我修改了framework里的Activity.java,在他的onCreate()方法中加了一行log,这样其它activity调用的时候就会触发这行log。然后编译framework,会生成framework.jar,然后push framework.jar到机器验证。
1、Activity.java的onCreate方法中添加log
frameworks/base⟫ find -name Activity.java
./core/java/android/app/Activity.java
frameworks/base⟫ grep -nr "cmy" ./core/java/android/app/Activity.java
1818: android.util.Log.d("cmy-test1", "Activity is onCreate");
2、单编framework
在在初始化完环境后,执行以下命令,这里我用的是make framework-minus-apex:
# 进入工程根目录
make framework-minus-apex
# 或者
make framework
framework-minus-apex: 它编译 framework 的核心库,速度比全量编译快得多。- 结果文件: 编译完成后,我这里生成的framework.jar路径为
out\target\product\qssi\system\framework\framework.jar。
关于framework-minus-apex 说明
这里关于make framework-minuapex 说明的简单说明,答案来自chatgpt,我也是第一次了解:
从字面上看:
- framework: 指代传统的系统框架层。
- minus (-) : 减去。
- apex: 指代 Android Pony EXpress (APEX) 模块。
make framework-minus-apex 本质上是 只重新编译 framework.jar 相关部分,而不重新打包 APEX 模块。
如何判断某个模块是不是 APEX
最简单的方法:
看目录:
packages/modules/*
基本都是 APEX模块。
例如:
packages/modules/Wifi
packages/modules/Connectivity
packages/modules/Permission
packages/modules/AdServices
3、adb push
正常情况下,你adb root,然后remount(因为system分区是只读的,必须remount才能push上去),再然后push到设备后,然后重启,framework.jar的修改就生效了。 但是我这里remount失败了,下面记录我恢复remount的过程:
C:\Users\cmy>adb push Z:\workspace\A8003B-NEW\LA.QSSI.15.0\LINUX\android\out\target\product\qssi\system\framework\framework.jar /system/framework
adb: error: failed to copy 'Z:\workspace\A8003B-NEW\LA.QSSI.15.0\LINUX\android\out\target\product\qssi\system\framework\framework.jar' to '/system/framework/framework.jar': remote couldn't create file: Read-only file system
Z:\workspace\A8003B-NEW\LA.QSSI.15.0\LINUX\android\out\target\product\qssi\system\framework\framework.jar: 1 file pushed, 0 skipped. 44.5 MB/s (43486481 bytes in 0.933s)
我这台设备是debug版本,可以root,但是remount就报错,说解锁bootloader:
C:\Users\cmy>adb remount
Device must be bootloader unlocked
首先打开 开发者模式中的OED解锁,这里OED解锁只是允许你去解锁,和真正执行解锁的操作两者不是一回事。
一、确认当前 Bootloader 状态
先执行:
adb reboot bootloader
进入 fastboot 后:
fastboot flashing get_unlock_ability
如果返回:
get_unlock_ability: 1
说明 允许解锁。
再执行:
fastboot getvar unlocked
如果返回:
unlocked: no
说明 Bootloader 仍然锁着。
二、真正解锁 Bootloader
在 fastboot 模式执行:
fastboot flashing unlock
设备屏幕会出现确认界面,用 音量键选择 Unlock,电源键确认。
等到设备启动后,就可以正常adb remount了。