在名为 VehiclePropertyTest 的供应商应用程序请求 CAR_VENDOR_EXTENSION 权限后,我的 Android AOSP 13 汽车模拟器 (sdk_car_x86_64-userdebug) 陷入启动循环。发现启动序列无法完成,因为 priv-app 权限白名单问题引发以下错误:
02-01 19:28:30.814 2590 2590 W PackageManager: Privileged permission android.car.permission.CAR_VENDOR_EXTENSION for package com.example.vehiclepropertytest (/system_ext/priv-app/VehiclePropertyTest) not in privapp-permissions allowlist
02-01 19:28:33.067 2590 2590 W PackageManager: Privileged permission android.car.permission.CAR_VENDOR_EXTENSION for package com.example.vehiclepropertytest (/system_ext/priv-app/VehiclePropertyTest) not in privapp-permissions allowlist
02-01 19:28:33.068 2590 2590 E System : java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions allowlist: {com.example.vehiclepropertytest (/system_ext/priv-app/VehiclePropertyTest): android.car.permission.CAR_VENDOR_EXTENSION}
02-01 19:28:33.068 2590 2590 E Zygote : java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions allowlist: {com.example.vehiclepropertytest (/system_ext/priv-app/VehiclePropertyTest): android.car.permission.CAR_VENDOR_EXTENSION}
02-01 19:28:33.068 2590 2590 E AndroidRuntime: java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions allowlist: {com.example.vehiclepropertytest (/system_ext/priv-app/VehiclePropertyTest): android.car.permission.CAR_VENDOR_EXTENSION}
创建了一个名为 VehiclePropertyTest 的供应商应用程序,它是一个 priv-app 并使用 CAR_VENDOR_EXTENSION 作为供应商特定属性(已添加到 aidl hal 中)。
在AndroidManifest.xml中添加以下权限
<uses-permission android:name="android.car.permission.CAR_VENDOR_EXTENSION"/>
故障排除尝试:
通过两种方式将 CAR_VENDOR_EXTENSION 添加到权限白名单:
从Android文档修改了对frameworks/base/data/etc/permissions/privapp-permissions-platform.xml
的权限<privapp-permssions package="com.example.vehiclepropertytest">
<permission name="android.car.permission.CAR_VENDOR_EXTENSION"/>
</privapp-permissions>
创建自定义权限xml并将其添加到应用程序的Android.bp中的prebuilt_etc
privapp-permission-vehiclepropertytest.xml
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="com.example.vehiclepropertytest">
<permission name="android.car.permission.CAR_VENDOR_EXTENSION"/>
</privapp-permissions>
</permissions>
Android.bp
prebuilt_etc {
name: "privapp-permission-vehiclepropertytest",
src: "privapp-permissions-vehiclepropertytest.xml",
sub_dir: "permissions",
filename_from_src: true,
}
然后
required: ["privapp-permission-vehiclepropertytest"],
里面 android_app{}
问题:
任何见解将不胜感激。预先感谢:)
注意 - 我从未测试过这是否适用于您的情况的 priv 权限白名单。恕我直言,如果你想做这种系统相关的开发,最好从源代码构建你自己的模拟器,而不是在 Android Studio 上使用模拟器进行调整。
如s.a.c文档中所述,priv权限白名单应位于产品、供应商或系统分区中。 (请查看文档以了解更多详细信息)
我认为您可以通过将模拟器更改为可写系统来添加权限白名单。您可以在终端中的 Android Studio 上启动模拟器 AVD,使其可写系统。 (我的情况是Mac)
export ANDROID_SDK_ROOT=~/Library/Android/sdk
cd ~/Library/Android/sdk/emulator
./emulator -list-avds # check your AVD name
./emulator @avd_name -writable-system -no-snapshot
为 ADB 命令打开另一个终端
adb root
adb remount
现在,您可以修改供应商、产品、系统等系统分区中的文件。尝试按照 s.a.c 文档中的说明将您的包添加为 priv 权限白名单。
我认为您已经知道如何将供应商专用应用程序添加到正确的位置。之后,尝试重新启动模拟器。 (亚行重新启动)