在Android源代码(AOSP)中,我试图将jar库编译为 / vendor / framework / ,而不是 / system / framework 。
因此我为此库在Android.bp中进行了更改:
java_library {
name: "com.test.provider",
srcs: ["./java/**/*.java"],
vendor: true,
dex_preopt: {
app_image: true,
},
}
com.test.provider.jar现已构建为 / vendor / framework / 。
然后我在SystemUI中使用此库,对frame / base / packages / SystemUI / Android.mk进行了更改:
LOCAL_JAVA_LIBRARIES += com.test.provider
还要引用com.test.provider.jar中定义的类,SystemUI构建成功。
但是当此APP运行时,出现以下错误消息:
12-27 11:35:41.807 5449 5449 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
12-27 11:35:41.807 5449 5449 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.test.testprovidermanager.TestProviderManager" on path: DexPathList[[zip file "/system/priv-app/SystemUI/SystemUI.apk"],nativeLibraryDirectories=[/system/priv-app/SystemUI/lib/arm64, /system/lib64, /vendor/lib64, /system/lib64, /vendor/lib64]]
像OS一样,该库既不查找/ system / framework也不查找/ vendor / framework。但是,当我将此库构建为 / system / framework / (从Android.bp删除“ vendor:true”)时,SystemUI可以正常工作,真是太奇怪了!
所以我的问题是: 如何在Android P中将jar库构建到/ vendor / framwork /?
感谢您的帮助!
答案 0 :(得分:0)
喜欢这个问题。 我忘记了/system/etc/permission/testprovider_permission.xml中的更改权限:
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="com.test.provider"
file="/system/framework/com.test.provider.jar"/>
</permissions>
将 /system/framework/com.test.provider.jar 更改为 /vendor/framework/com.test.provider.jar