最近对安卓API进行源码Hook,稍微记录一下操作流程,不过我是直接在别人已经设置好的环境下进行修改的,所以AOSP的环境和编译设置别人都已经帮我搞好了,其实没有什么困难的步骤。
之后有必要研究一下,编译流程。
AOSP 编译
API Hook
其实就是Java代码,我们的方式是在源码中API调用的地方打印log,然后实际动态测试时不断检测log的生成。
编译
修改好之后就是再编译,AOSP编译是增量编译,所以之后编译都挺快的。
1. 导航到Android源码树的根目录。
2. 执行环境设置脚本 source build/envsetup.sh。
3. 选择适合您目标设备的构建配置,如:lunch aosp_x86-eng
4. m -j35 //-j35 参数告诉make命令并行运行35个编译任务,这里根据实际修改是多少个编译任务
我们的指令是:
source build/envsetup.sh
lunch aosp_crosshatch-user //表示user 模式,后续执行编译的时候有些App会根据不同编译模式选择编或者不编
m -j35
编译好后,可以看到output的地址,把其中的img刷入手机中。
刷入镜像
刷机首先需要,能连接上设备。不然会< waiting for any device >。
fastboot flashall
< waiting for any device >
-
安装谷歌USB驱动
我是使用Android Studio的SDK Manager安装的。
https://developer.android.com/studio/run/win-usb?hl=zh-cn
也可以看谷歌官方这个文档获取驱动。 -
用驱动连接上设备
https://blog.csdn.net/weixin_44183483/article/details/119330911
这里参考了大佬的文档,但是略有出入。
在大佬文档中,可以看到Piexl的设备,但是我的电脑里是检测不到设备的。
我的:
实际上问题在于:
adb reboot bootloader
首先要让设备进入Fastboot的模式。可以尝试看看 fastboot device 能不能有设备
之后运行fastboot flashall
> fastboot flashall
< waiting for any device >
--------------------------------------------
Bootloader Version...: b1c1-0.4-7617406
Baseband Version.....: g845-00194-210812-B-7635520
Serial Number........: FLHG65002576010J8BG00658
--------------------------------------------
fastboot: error: ANDROID_PRODUCT_OUT not set
我因为把img拖到了其它电脑上,而新电脑没有配置ANDROID_PRODUCT_OUT ,出现这个报错,需要把ANDROID_PRODUCT_OUT 加入系统环境,地址就是存放img的地址。
再运行,就成了。
fastboot: error: could not read android-info.txt
在我过了许久又一次进行fastboot的时候,报了这个错误,我这里是因为ANDROID_PRODUCT_OUT 是上次那个地址,把它变为新的地址就行了。