yuandaimaahao / AndroidFrameworkTutorial

写给应用开发的 Android Framework 教程
Apache License 2.0
734 stars 190 forks source link

aosp10预置bootjar笔记 #4

Open df13954 opened 1 year ago

df13954 commented 1 year ago

查看当前设备的环境

dipper:/ # echo $BOOTCLASSPATH
/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar

这些就是bootjar,现在还没有我们自己定制的jar

开始定制

假设我们的包名是api.cat.xxx as中创建我们的模块,其他项目结构也行。 当然我的业务代码肯定比这个多,但是都是在这个包名下就行,因为要加入白名单。

开始预置

\192.168.216.128\aosp\aosp\android-10.0.0_r41\device\google\crosshatch\blueline 在p3产品目录下增加一个文件夹api.cat 把业务代码复制到这个目录下。

不要直接创建bp文件,从其他地方找一个bp复制过来,修改里面的json:

bp文件配置: 预置到product分区用product_specific: true,不加就是system分区,开始的时候参考豪哥文章加入这个配置,导致预置到了product分区了。

java_library {
    name: "api.cat",
    installable: true,
    srcs: ["**/*.java"],
    sdk_version: "current"
}

代码配置完成,需要把新增的模块加入到白名单中: 在\192.168.216.128\aosp\aosp\android-10.0.0_r41\device\google\crosshatch目录找找到device.mk 找到节点PRODUCT_PACKAGES加入

PRODUCT_PACKAGES += \
    messaging \
    api.cat

PRODUCT_BOOT_JARS += \
    api.cat \

PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
    system/framework/api.cat.jar

配置包名白名单\192.168.216.128\aosp\aosp\android-10.0.0_r41\build\core\tasks\check_boot_jars\package_whitelist.txt中增加

api\.cat
api\.cat\..*

刷机完成后进入shell查询环境:

dipper:/ # echo $BOOTCLASSPATH
/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/system/framework/api.cat.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar

#这个时候进入system/framework中也能找到jar
dipper:/system/framework # ls -l | grep cat
-rw-r--r-- 1 root root      882 2023-04-28 20:30 api.cat.jar

非常感谢豪哥的指导~

sfdex commented 1 year ago

大佬你好,你能通过直接反射访问你编译的jar文件中的Java类吗? 还是说必须得在AndroidManifest.xml中声明