Android 11 framework.jar编译并替换
在Android11之前修改了framework相关代码,只需make framework就可以编译出framework.jar。在Android11,这个编译命令不起作用了,根据framework/base/目录下Android.bp中的提示:
java_library {
name: "framework-minus-apex",
defaults: ["framework-defaults"],
srcs: [":framework-non-updatable-sources"],
installable: true,
......
// For backwards compatibility.
stem: "framework",
apex_available: ["//apex_available:platform"],
visibility: [
"//frameworks/base",
// TODO(b/147128803) remove the below lines
"//frameworks/base/apex/blobstore/framework",
"//frameworks/base/apex/jobscheduler/framework",
"//frameworks/base/packages/Tethering/tests/unit",
],
}
// This "framework" module is NOT installed to the device. It's
// "framework-minus-apex" that gets installed to the device. Note that
// the filename is still framework.jar (via the stem property) for
// compatibility reason. The purpose of this module is to provide
// framework APIs (both public and private) for bundled apps.
// "framework-minus-apex" can't be used for the purpose because 1)
// many apps have already hardcoded the name "framework" and
// 2) it lacks API symbols from updatable modules - as it's clear from
// its suffix "-minus-apex".
可以看到framework变为了framework-minus-apex,通过stem属性使编译出来的模块还叫framework.jar,这样修改的目的一个是为了向后兼容以前的jar名称,一个也是为了表示现在framework是减去了apex的模块,所以带个minus-apex的后缀。
那么编译的时候就要换成下面的命令:
make framework-minus-apex
编译出framework.jar后,先用下面的命令remount:
adb root;adb disable-verity;adb reboot;adb wait-for-device;adb root;adb remount
然后把framework.jar push到system/framework/下面,同时还要删除这个目录下面的oat,arm,arm64三个目录(不删除会一直卡在开机动画),最后再运行下面的命令重启zygote,这样新替换的framework.jar就生效了。
adb shell stop;adb shell start;