[Jar] [Android P]如何在/ vendor / framework中构建jar库

时间:2018-12-28 12:12:36

标签: android frameworks android-source

在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 /?

感谢您的帮助!

1 个答案:

答案 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