虽然使用这个方法可以自定义 Vehicle Property,也可以在模拟器中读取和设置属性。但是当我们在应用层调用
CarPropertyManager
的getIntProperty
和setIntProperty
方法时还是会抛出 property id 不存在的异常。
这篇文章将详细讲述如何在 CarService 层添加自定义权限。
本文基于 AOSP android13-release 分支代码进行修改。
第一步 添加自定义权限的定义
packages/services/Car/car-lib/src/android/car/Car.java
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index 12955ee..c094d54 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -1139,6 +1139,13 @@ public final class Car {
public static final String PERMISSION_MANAGE_THREAD_PRIORITY = "android.car.permission.MANAGE_THREAD_PRIORITY";
+ /**
+ * Custom Permission.
+ * @hide
+ */
+ @AddedInOrBefore(majorVersion = 33)
+ public static final String PERMISSION_CAR_CUSTOM =
+ "android.car.permission.CAR_CUSTOM";
第二步 为添加的自定义属性添加读写权限
packages/services/Car/car-lib/src/android/car/VehiclePropertyIds.java
diff --git a/car-lib/src/android/car/VehiclePropertyIds.java b/car-lib/src/android/car/VehiclePropertyIds.java
index 1531ff1..f8966f5 100644
--- a/car-lib/src/android/car/VehiclePropertyIds.java
+++ b/car-lib/src/android/car/VehiclePropertyIds.java
@@ -2229,6 +2229,15 @@ public final class VehiclePropertyIds {
@AddedInOrBefore(majorVersion = 33)
public static final int VEHICLE_CURB_WEIGHT = 289410886;
+ @RequiresPermission(Car.PERMISSION_CAR_CUSTOM)
+ @AddedInOrBefore(majorVersion = 33)
public static final int VEHICLE_TEST_PROPERTY = 289410896;
packages/services/Car/car-lib/src/com/android/car/internal/PropertyPermissionMapping.java
@@ -34,6 +34,9 @@ public final class PropertyPermissionMapping {
public PropertyPermissionMapping() {
// Add propertyId and read/write permissions
// Cabin Properties
+ map(Car.PERMISSION_CAR_CUSTOM, VehiclePropertyIds.VEHICLE_TEST_PROPERTY);
packages/services/Car/service/src/com/android/car/hal/PropertyHalServiceIds.java
--- a/service/src/com/android/car/hal/PropertyHalServiceIds.java
+++ b/service/src/com/android/car/hal/PropertyHalServiceIds.java
@@ -184,6 +184,12 @@ public class PropertyHalServiceIds {
mPropToValidBitFlag = new HashMap<>();
// Add propertyId a