[Jar][Android P]如何将jar库构建成/vendor/framework

[Jar][Android P] How to build a jar library into /vendor/framework

在 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中定义的class,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/?

感谢您的帮助!

解决了这个问题。 我忘记了 /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