首先下载AOSP代码,这个可以参考以前的文章
https://blog.csdn.net/y874961524/article/details/80725389
上篇文章介绍了编译后启动模拟器,模拟器不需要驱动,所以比较容易,但是运行缓慢,下面我们学习将aosp编译到真机。
这一步假设我们已经成功下载了AOSP代码,但是因为需要刷入真机,所以还需要下载驱动,重新编译等步骤。
AOSP开发离不开使用Repo这个工具,我们先来看下基本时使用。
使用repo sync
同步最新的代码。
然后我们新建一个自己的分支,便于我们比较改动。
# 这里我们建立一个分支,刚clone下来的代码是没有分支的
repo start tianrui/aosp_debug --all
详细参考资料
https://source.android.com/setup/develop/repo
https://blog.csdn.net/salmon_zhang/article/details/79180075
repo保持在当前分支即可,无须特意切换,我们需要根据手机机型下载对应的驱动。
编译aosp时会生成system.img文件,这个文件是最终刷机用的,但是system.img文件必须依赖驱动文件生成,如果没有放入对应的驱动就编译,那么生成的镜像也是无法正常刷机的。
下面通过这个网站查找对应的手机代号,也可以直接下镜像使用fastboot刷入:
https://developers.google.com/android/images
这里我是用的pixel手机测试的,经过查找该手机代号是sailfash
,然后到这个网站上找镜像。
https://developers.google.com/android/drivers
因为是基于最新代码编译,所以我们下载最新版即可,如果是基于其他分支的代码编译,我们就需要下载对应分支的驱动。
两个文件都需要下载解压,得到两个脚本文件。
执行两个脚本,即可提取出驱动,将提取出的vendor/目录放到aosp根目录。
驱动下载完成。
这个时候需要将aosp全部编译下,因为我们之后就使用mm部分编译了,使用部分编译之前,需要先全部编译一次。
source build/envsetup.sh
lunch aosp_sailfish-userdebug
make clean; make -j8
大约需要2小时,aosp编译完成,这个时候我们使用
adb reboot bootloader
fastboot flashall -w
即可将镜像刷入手机。
soruce build/envsetup.sh
mmm development/tools/idegen/
./development/tools/idegen/idegen.sh
这个时候,可以使用Android Studio 导入这个android.ipr文件,导入之前可以删除一些文件夹,提高导入速度。
如果只是修改framework模块的代码,那么只导入framework模块即可,x。
主要是修改
和
标签,仅导入framework/base模块。
参考:
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/tests/coretests/BinderProxyCountingTestService/src" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/tests/coretests/BstatsTestApp/src" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/tests/coretests/DisabledTestApp/src" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/tests/coretests/EnabledTestApp/src" isTestSource="true" />
将 Project Setting 中的依赖都删除。ClassPath仅保留这两个,SourcePath都删除。
将自动编译关掉,否则会卡。
配置完成后,源码就可以正常跳转了。
同样,这样配置完成后也可以使用Android Studio进行Debug源码。
下面我们演示下修改aosp中的framework代码。
我们把ActivityManagerService的LOG开关全部打开,然后重新编译个Rom刷入手机。
改动如下:
然后在aosp目录执行
// 下面这两步每次打开终端都需要
soruce build/envsetup.sh
lunch aosp_sailfish-userdebug
// 仅编译framework模块
mmm framework
// 重新生成system.img镜像
make snod
然后刷入手机,跟之前步骤一样。
adb reboot bootloader
fastboot flashall -w
重启手机,AOSP已经运行在我们手机上了。
看下ActivityManagerService的LOG,说明我们的改动生效了。
02-09 14:56:33.965 1359 1429 I ActivityManager: Retrieving available item: com.android.server.am.ActivityManagerService$ProcessChangeItem@3f42631
02-09 14:56:34.213 1359 1429 D ActivityManager: activityIdleInternalLocked: Callers=com.android.server.am.ActivityManagerService.activityIdle:7819 android.app.IActivityManager$Stub.onTransact:2751 com.android.server.am.ActivityManagerService.onTransact:3282 android.os.Binder.execTransact:740
02-09 14:56:34.678 1359 2071 I ActivityManager: Retrieving available item: com.android.server.am.ActivityManagerService$ProcessChangeItem@3f42631