问题描述
我想为Android汽车模拟器11禁用 feature:android.hardware.bluetooth 。
我与回购同步的版本:android-11.0.0_r3 我吃午饭的版本:aosp_car_x86_64-userdebug
更改文件以注释掉权限:
car.mk
# frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_copY_OUT_vendOR)/etc/permissions/android.hardware.bluetooth_le.xml \
# frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_copY_OUT_vendOR)/etc/permissions/android.hardware.bluetooth.xml \
评论了以下权限:
car_core_hardware.xml
<!-- <feature name="android.hardware.bluetooth" /> -->
如果我运行仿真器并询问packagemanager,它仍然确信启用了蓝牙功能:
pm list features
feature:android.hardware.bluetooth
feature:android.hardware.bluetooth_le
解决方法
当我从 out
文件夹中删除文件 (android.hardware.bluetooth.xml) 时,它被禁用了。
问题是汽车无法处理这种禁用,因为它开始崩溃:
01-07 15:12:08.833 8509 8509 D PerUserCarService: onCreate()
01-07 15:12:08.834 8509 8509 E BluetoothAdapter: Bluetooth binder is null
01-07 15:12:08.835 8509 8509 D AndroidRuntime: Shutting down VM
01-07 15:12:08.835 8509 8509 E AndroidRuntime: FATAL EXCEPTION: main
01-07 15:12:08.835 8509 8509 E AndroidRuntime: Process: com.android.car,PID: 8509
01-07 15:12:08.835 8509 8509 E AndroidRuntime: java.lang.RuntimeException: Unable to create service com.android.car.PerUserCarService: java.lang.NullPointerException: Bluetooth adapter cannot be null
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.app.ActivityThread.handleCreateService(ActivityThread.java:4204)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.app.ActivityThread.access$1500(ActivityThread.java:237)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.os.Looper.loop(Looper.java:223)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7656)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: Caused by: java.lang.NullPointerException: Bluetooth adapter cannot be null
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at java.util.Objects.requireNonNull(Objects.java:245)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at com.android.car.CarBluetoothUserService.<init>(CarBluetoothUserService.java:84)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at com.android.car.PerUserCarService.onCreate(PerUserCarService.java:66)
01-07 15:12:08.835 8509 8509 E AndroidRuntime: at android.app.ActivityThread.handleCreateService(ActivityThread.java:4192)
,
android.hardware.bluetooth.xml
可能已通过设备构建配置中的其他.mk
文件(可能已多次复制到/ etc / permissions)。尝试从运行的设备中删除它:
adb root && adb remount && adb reboot
adb root && adb remount
export BT=etc/permissions/android.hardware.bluetooth.xml
adb shell rm /$BT /*/$BT /*/*/$BT
export BT=etc/permissions/android.hardware.bluetooth_le.xml
adb shell rm /$BT /*/$BT /*/*/$BT
adb reboot
adb shell pm list features | grep blue
对我来说,它删除了android.hardware.bluetooth_le
但没有删除android.hardware.bluetooth
功能。编辑您提到的<target type>_core_hardware.xml
文件后,后者消失了。
在确认删除xml文件是否有帮助之后,您需要查看设备可能正在使用的所有mk文件,以跟踪其复制位置(使用PRODUCT_COPY_FILES
)。每次尝试之后,请查看您的$OUT
目录的内容(在构建之前,您可能需要从输出中手动删除xml文件,buildsystem并不总是干净地进行此操作)。