项目简介
本项目聚焦于Android系统开发,覆盖了Android系统多个核心方面的操作与实现。包含UID和GID配置、源代码REPO工程搭建、Recovery和OTA升级、NDK使用、Binder系统分析、JNI原理及调用流程、APK签名、userdata image处理、BootChart制作与比较、按键事件处理、命令行操作以及系统崩溃调试等内容,还有一个基于Android Binder机制的进程间通信测试项目。
项目的主要特性和功能
- 系统配置与基础操作:提供UID和GID配置文件与转换函数,可管理系统用户和组;支持搭建Android源代码REPO工程,便于源码开发。
- 系统更新与维护:涵盖Recovery系统和OTA升级,能制作并升级完整包和差分包;支持命令行进行OTA升级和恢复出厂设置。
- 开发工具与技术:介绍Android NDK使用方法,利于原生代码开发;深入分析Binder系统以实现进程间通信;讲解JNI原理及调用HAL层方法,实现Java与C/C++代码交互。
- 应用与签名:支持用am命令启动APK,提供APK使用系统签名的方法和步骤。
- 系统性能分析:可制作BootChart并比较两次开机性能,方便系统性能优化。
- 按键事件处理:能获取按键事件值,通过KeyLayout文件进行按键映射。
- 系统调试:提供系统崩溃定位方法,通过logcat和tombstone日志信息找到错误代码位置。
- Binder通信测试:包含基于Android Binder机制的测试项目,可验证进程间通信功能,具备服务管理、错误处理和日志记录功能。
安装使用步骤
通用前提
假设用户已下载本项目的源码文件,且具备Android开发环境,包括相应的编译器和工具链。
各功能使用步骤
系统配置与基础操作
- UID和GID:查看
system/core/include/private/android_filesystem_config.h
文件进行配置,执行ps
或busybox ps
命令查看相关信息。 - REPO工程搭建:参考
./repo.md
文件进行Android源代码REPO工程的搭建。
系统更新与维护
- OTA升级:将生成的ota包放到
/cache/update.zip
,执行echo -e "--update_package=CACHE:update.zip" > /cache/recovery/command
和reboot recovery
命令进行升级;差分包制作按照文档中生成pre和cur版本的ota完整包、保存基础素材、生成差异升级包的步骤操作。 - 恢复出厂设置:执行
am broadcast -a android.intent.action.MASTER_CLEAR
命令。
开发工具与技术
- NDK使用:参考
./ndk.md
文件进行Android NDK的使用。 - Binder系统:查看
./binder
相关文件进行Android Binder系统分析。 - JNI调用:编译java代码使用
javac JNIDemo.java
,编译c库使用gcc -I/opt/java-7-openjdk-amd64/include/ -fPIC -shared -o libnative.so native.c
,设置库文件链接地址export LD_LIBRARY_PATH=.
,测试程序使用java JNIDemo
。
应用与签名
- 启动APK:使用
dumpsys window w | grep \/ | grep name=
命令查出APK名字,然后使用am start -n <APK名字>
启动。 - APK签名:找到平台签名文件
"platform.pk8"
和"platform.x509.pem"
,签名工具"signapk.jar"
,放置在同一文件夹,执行java -jar signapk.jar platform.x509.pem platform.pk8 Demo.apk signedDemo.apk
命令进行签名。
系统性能分析
- BootChart制作:设备上操作
echo 120 > /data/bootchart/start
和tar -czf bootchart.tgz header proc_stat.log proc_ps.log proc_diskstats.log kernel_pacct
,PC机上操作bootchart bootchart.tgz
;比较两次开机bootchart将前后两次bootchart.tgz
拷贝到对应目录,执行./compare-bootcharts.py base_bootchart_dir exp_bootchart_dir
脚本。
按键事件处理
- 查看内核中
device/rockchip/common/rk29-keypad.kl
文件进行按键映射,使用getevent /dev/input/event3
命令获取按键事件值。
系统调试
- 当系统崩溃时,通过logcat和tombstone日志信息找到错误代码位置,进行调试。
Binder通信测试
- 编译代码:使用相应的编译器(如GCC)编译客户端和服务器端的代码,以及服务管理代码。
- 运行测试:编译成功后,运行客户端和服务器端的测试程序,通过Binder通信进行进程间通信的测试。
- 调试和排查问题:如果在测试过程中遇到问题,通过错误处理和日志记录功能进行调试和排查。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】