在Android13上添加一个自动的system service例子
留好,备用。
.../prebuilts/api/30.0/plat_pub_versioned.cil | 76 ++++++++++++++-
.../prebuilts/api/31.0/plat_pub_versioned.cil | 94 ++++++++++++++++++-
.../prebuilts/api/32.0/plat_pub_versioned.cil | 94 ++++++++++++++++++-
frameworks/base/core/api/current.txt | 18 ++++
.../android/app/SystemServiceRegistry.java | 25 ++++-
.../core/java/android/bean/BeanManager.java | 50 ++++++++++
.../core/java/android/bean/IBeanManager.aidl | 16 ++++
.../base/core/java/android/bean/Person.aidl | 3 +
.../base/core/java/android/bean/Person.java | 74 +++++++++++++++
.../core/java/android/content/Context.java | 12 +++
.../server/bean/BeanManagerService.java | 71 ++++++++++++++
.../java/com/android/server/SystemServer.java | 11 ++-
.../api/28.0/private/service_contexts | 1 +
.../api/28.0/private/system_server.te | 2 +
.../api/28.0/public/system_server.te | 1 +
.../api/29.0/private/service_contexts | 1 +
.../api/29.0/private/system_server.te | 2 +
.../prebuilts/api/29.0/public/service.te | 1 +
.../api/30.0/private/service_contexts | 1 +
.../api/30.0/private/system_server.te | 1 +
.../prebuilts/api/30.0/public/service.te | 1 +
.../api/31.0/private/service_contexts | 1 +
.../api/31.0/private/system_server.te | 1 +
.../prebuilts/api/31.0/public/service.te | 1 +
.../api/32.0/private/service_contexts | 1 +
.../api/32.0/private/system_server.te | 1 +
.../prebuilts/api/32.0/public/service.te | 1 +
.../api/33.0/private/service_contexts | 1 +
.../api/33.0/private/system_server.te | 2 +
.../prebuilts/api/33.0/public/service.te | 1 +
system/sepolicy/private/service_contexts | 1 +
system/sepolicy/private/system_server.te | 2 +
system/sepolicy/public/service.te | 1 +
33 files changed, 561 insertions(+), 8 deletions(-)
create mode 100644 frameworks/base/core/java/android/bean/BeanManager.java
create mode 100644 frameworks/base/core/java/android/bean/IBeanManager.aidl
create mode 100644 frameworks/base/core/java/android/bean/Person.aidl
create mode 100644 frameworks/base/core/java/android/bean/Person.java
create mode 100644 frameworks/base/services/core/java/com/android/server/bean/BeanManagerService.java
diff --git a/device/qcom/sepolicy/prebuilts/api/30.0/plat_pub_versioned.cil b/device/qcom/sepolicy/prebuilts/api/30.0/plat_pub_versioned.cil
index ac63b142bc..b6a28cc608 100644
--- a/device/qcom/sepolicy/prebuilts/api/30.0/plat_pub_versioned.cil
+++ b/device/qcom/sepolicy/prebuilts/api/30.0/plat_pub_versioned.cil
@@ -1 +1,75 @@
-;; this file should not be empty
+(type vendor_smcinvoke_device)
+(type vendor_qtelephony)
+(type vendor_dpmd)
+(type vendor_dun-server)
+(type vendor_elabel_data_file)
+(type vendor_dpmtcm_socket)
+(type vendor_seempdw_socket)
+(type vendor_fm_app)
+(type vendor_hal_atfwd_hwservice)
+(type vendor_sigmahal_hwservice)
+(type vendor_qccsyshal_hwservice)
+(type vendor_location_app)
+(type vendor_mmi_sys)
+(type vendor_perfservice)
+(type vendor_persist_dpm_prop)
+(type vendor_persist_camera_prop)
+(type vendor_bt_prop)
+(type vendor_sys_video_prop)
+(type vendor_wlc_prop)
+(type vendor_qcc_app)
+(type vendor_qcc_trd)
+(type vendor_qcc_utils_app)
+(type vendor_qspmsvc)
+(type qti-testscripts)
+(type vendor_qvrd)
+(type vendor_seempd)
+(type vendor_usta_app_service)
+(type vendor_vpsservice)
+(type vendor_wfd_app)
+(type vendor_wfdservice)
+(type vendor_sigmahal_qti)
+(type vendor_dataservice_app)
+(typeattribute vendor_smcinvoke_device_30_0)
+(typeattribute vendor_qtelephony_30_0)
+(typeattribute vendor_dpmd_30_0)
+(typeattribute vendor_dun-server_30_0)
+(typeattribute vendor_elabel_data_file_30_0)
+(typeattribute vendor_dpmtcm_socket_30_0)
+(typeattribute vendor_seempdw_socket_30_0)
+(typeattribute vendor_fm_app_30_0)
+(typeattribute vendor_hal_atfwd_hwservice_30_0)
+(typeattribute vendor_sigmahal_hwservice_30_0)
+(typeattribute vendor_qccsyshal_hwservice_30_0)
+(typeattribute vendor_location_app_30_0)
+(typeattribute vendor_mmi_sys_30_0)
+(typeattribute vendor_perfservice_30_0)
+(typeattribute vendor_persist_dpm_prop_30_0)
+(typeattribute vendor_persist_camera_prop_30_0)
+(typeattribute vendor_bt_prop_30_0)
+(typeattribute vendor_sys_video_prop_30_0)
+(typeattribute vendor_wlc_prop_30_0)
+(typeattribute vendor_qcc_app_30_0)
+(typeattribute vendor_qcc_trd_30_0)
+(typeattribute vendor_qcc_utils_app_30_0)
+(typeattribute vendor_qspmsvc_30_0)
+(typeattribute qti-testscripts_30_0)
+(typeattribute vendor_qvrd_30_0)
+(typeattribute vendor_seempd_30_0)
+(typeattribute vendor_usta_app_service_30_0)
+(typeattribute vendor_vpsservice_30_0)
+(typeattribute vendor_wfd_app_30_0)
+(typeattribute vendor_wfdservice_30_0)
+(typeattribute vendor_sigmahal_qti_30_0)
+(typeattribute vendor_dataservice_app_30_0)
+(typeattribute vendor_hal_systemhelper)
+(typeattribute vendor_hal_systemhelper_client)
+(typeattribute vendor_hal_systemhelper_server)
+(type vendor_hal_systemhelper_hwservice)
+(type vendor_display_notch_prop)
+(type vendor_sys_qti_display)
+(type vendor_systemhelper_app)
+(typeattribute vendor_hal_systemhelper_hwservice_30_0)
+(typeattribute vendor_display_notch_prop_30_0)
+(typeattribute vendor_sys_qti_display_30_0)
+(typeattribute vendor_systemhelper_app_30_0)
diff --git a/device/qcom/sepolicy/prebuilts/api/31.0/plat_pub_versioned.cil b/device/qcom/sepolicy/prebuilts/api/31.0/plat_pub_versioned.cil
index ac63b142bc..35396982d8 100644
--- a/device/qcom/sepolicy/prebuilts/api/31.0/plat_pub_versioned.cil
+++ b/device/qcom/sepolicy/prebuilts/api/31.0/plat_pub_versioned.cil
@@ -1 +1,93 @@
-;; this file should not be empty
+(type vendor_smcinvoke_device)
+(type vendor_qtelephony)
+(type vendor_dpmd)
+(type vendor_dun-server)
+(type vendor_elabel_data_file)
+(type vendor_dpmtcm_socket)
+(type vendor_seempdw_socket)
+(type vendor_fm_app)
+(type vendor_hal_atfwd_hwservice)
+(type vendor_sigmahal_hwservice)
+(type vendor_qccsyshal_hwservice)
+(type vendor_location_app)
+(type vendor_mmi_sys)
+(type vendor_perfservice)
+(type vendor_persist_dpm_prop)
+(type vendor_persist_camera_prop)
+(type vendor_bt_prop)
+(type vendor_sys_video_prop)
+(type vendor_wlc_prop)
+(type vendor_qcc_app)
+(type vendor_qcc_trd)
+(type vendor_qcc_utils_app)
+(type vendor_qspmsvc)
+(type qti-testscripts)
+(type vendor_qvrd)
+(type vendor_seempd)
+(type vendor_usta_app_service)
+(type vendor_vpsservice)
+(type vendor_wfd_app)
+(type vendor_wfdservice)
+(type vendor_sigmahal_qti)
+(type vendor_dataservice_app)
+(type vendor_qesdk_service)
+(type vendor_qcc_authmgr_app)
+(type vendor_qcc_lmtp_app)
+(type vendor_qcc_netstat_app)
+(type vendor_qvirtmgr)
+(type vendor_hal_displayconfig_service)
+(type vendor_hal_telephony_service)
+(type vendor_persist_tcm_prop)
+(type vendor_persist_rcs_prop)
+(typeattribute vendor_smcinvoke_device_31_0)
+(typeattribute vendor_qtelephony_31_0)
+(typeattribute vendor_dpmd_31_0)
+(typeattribute vendor_dun-server_31_0)
+(typeattribute vendor_elabel_data_file_31_0)
+(typeattribute vendor_dpmtcm_socket_31_0)
+(typeattribute vendor_seempdw_socket_31_0)
+(typeattribute vendor_fm_app_31_0)
+(typeattribute vendor_hal_atfwd_hwservice_31_0)
+(typeattribute vendor_sigmahal_hwservice_31_0)
+(typeattribute vendor_qccsyshal_hwservice_31_0)
+(typeattribute vendor_location_app_31_0)
+(typeattribute vendor_mmi_sys_31_0)
+(typeattribute vendor_perfservice_31_0)
+(typeattribute vendor_persist_dpm_prop_31_0)
+(typeattribute vendor_persist_camera_prop_31_0)
+(typeattribute vendor_bt_prop_31_0)
+(typeattribute vendor_sys_video_prop_31_0)
+(typeattribute vendor_wlc_prop_31_0)
+(typeattribute vendor_qcc_app_31_0)
+(typeattribute vendor_qcc_trd_31_0)
+(typeattribute vendor_qcc_utils_app_31_0)
+(typeattribute vendor_qspmsvc_31_0)
+(typeattribute qti-testscripts_31_0)
+(typeattribute vendor_qvrd_31_0)
+(typeattribute vendor_seempd_31_0)
+(typeattribute vendor_usta_app_service_31_0)
+(typeattribute vendor_vpsservice_31_0)
+(typeattribute vendor_wfd_app_31_0)
+(typeattribute vendor_wfdservice_31_0)
+(typeattribute vendor_sigmahal_qti_31_0)
+(typeattribute vendor_dataservice_app_31_0)
+(typeattribute vendor_qesdk_service_31_0)
+(typeattribute vendor_qcc_authmgr_app_31_0)
+(typeattribute vendor_qcc_lmtp_app_31_0)
+(typeattribute vendor_qcc_netstat_app_31_0)
+(typeattribute vendor_qvirtmgr_31_0)
+(typeattribute vendor_hal_displayconfig_service_31_0)
+(typeattribute vendor_hal_telephony_service_31_0)
+(typeattribute vendor_persist_tcm_prop_31_0)
+(typeattribute vendor_persist_rcs_prop_30_0)
+(typeattribute vendor_hal_systemhelper)
+(typeattribute vendor_hal_systemhelper_client)
+(typeattribute vendor_hal_systemhelper_server)
+(type vendor_hal_systemhelper_hwservice)
+(type vendor_display_notch_prop)
+(type vendor_sys_qti_display)
+(type vendor_systemhelper_app)
+(typeattribute vendor_hal_systemhelper_hwservice_31_0)
+(typeattribute vendor_display_notch_prop_31_0)
+(typeattribute vendor_sys_qti_display_31_0)
+(typeattribute vendor_systemhelper_app_31_0)
diff --git a/device/qcom/sepolicy/prebuilts/api/32.0/plat_pub_versioned.cil b/device/qcom/sepolicy/prebuilts/api/32.0/plat_pub_versioned.cil
index ac63b142bc..becda6acb8 100644
--- a/device/qcom/sepolicy/prebuilts/api/32.0/plat_pub_versioned.cil
+++ b/device/qcom/sepolicy/prebuilts/api/32.0/plat_pub_versioned.cil
@@ -1 +1,93 @@
-;; this file should not be empty
+(type vendor_smcinvoke_device)
+(type vendor_qtelephony)
+(type vendor_dpmd)
+(type vendor_dun-server)
+(type vendor_elabel_data_file)
+(type vendor_dpmtcm_socket)
+(type vendor_seempdw_socket)
+(type vendor_fm_app)
+(type vendor_hal_atfwd_hwservice)
+(type vendor_sigmahal_hwservice)
+(type vendor_qccsyshal_hwservice)
+(type vendor_location_app)
+(type vendor_mmi_sys)
+(type vendor_perfservice)
+(type vendor_persist_dpm_prop)
+(type vendor_persist_camera_prop)
+(type vendor_bt_prop)
+(type vendor_sys_video_prop)
+(type vendor_wlc_prop)
+(type vendor_qcc_app)
+(type vendor_qcc_trd)
+(type vendor_qcc_utils_app)
+(type vendor_qspmsvc)
+(type qti-testscripts)
+(type vendor_qvrd)
+(type vendor_seempd)
+(type vendor_usta_app_service)
+(type vendor_vpsservice)
+(type vendor_wfd_app)
+(type vendor_wfdservice)
+(type vendor_sigmahal_qti)
+(type vendor_dataservice_app)
+(type vendor_qesdk_service)
+(type vendor_qcc_authmgr_app)
+(type vendor_qcc_lmtp_app)
+(type vendor_qcc_netstat_app)
+(type vendor_qvirtmgr)
+(type vendor_hal_displayconfig_service)
+(type vendor_hal_telephony_service)
+(type vendor_persist_tcm_prop)
+(type vendor_persist_rcs_prop)
+(typeattribute vendor_smcinvoke_device_32_0)
+(typeattribute vendor_qtelephony_32_0)
+(typeattribute vendor_dpmd_32_0)
+(typeattribute vendor_dun-server_32_0)
+(typeattribute vendor_elabel_data_file_32_0)
+(typeattribute vendor_dpmtcm_socket_32_0)
+(typeattribute vendor_seempdw_socket_32_0)
+(typeattribute vendor_fm_app_32_0)
+(typeattribute vendor_hal_atfwd_hwservice_32_0)
+(typeattribute vendor_sigmahal_hwservice_32_0)
+(typeattribute vendor_qccsyshal_hwservice_32_0)
+(typeattribute vendor_location_app_32_0)
+(typeattribute vendor_mmi_sys_32_0)
+(typeattribute vendor_perfservice_32_0)
+(typeattribute vendor_persist_dpm_prop_32_0)
+(typeattribute vendor_persist_camera_prop_32_0)
+(typeattribute vendor_bt_prop_32_0)
+(typeattribute vendor_sys_video_prop_32_0)
+(typeattribute vendor_wlc_prop_32_0)
+(typeattribute vendor_qcc_app_32_0)
+(typeattribute vendor_qcc_trd_32_0)
+(typeattribute vendor_qcc_utils_app_32_0)
+(typeattribute vendor_qspmsvc_32_0)
+(typeattribute qti-testscripts_32_0)
+(typeattribute vendor_qvrd_32_0)
+(typeattribute vendor_seempd_32_0)
+(typeattribute vendor_usta_app_service_32_0)
+(typeattribute vendor_vpsservice_32_0)
+(typeattribute vendor_wfd_app_32_0)
+(typeattribute vendor_wfdservice_32_0)
+(typeattribute vendor_sigmahal_qti_32_0)
+(typeattribute vendor_dataservice_app_32_0)
+(typeattribute vendor_qesdk_service_32_0)
+(typeattribute vendor_qcc_authmgr_app_32_0)
+(typeattribute vendor_qcc_lmtp_app_32_0)
+(typeattribute vendor_qcc_netstat_app_32_0)
+(typeattribute vendor_qvirtmgr_32_0)
+(typeattribute vendor_hal_displayconfig_service_32_0)
+(typeattribute vendor_hal_telephony_service_32_0)
+(typeattribute vendor_persist_tcm_prop_32_0)
+(typeattribute vendor_persist_rcs_prop_30_0)
+(typeattribute vendor_hal_systemhelper)
+(typeattribute vendor_hal_systemhelper_client)
+(typeattribute vendor_hal_systemhelper_server)
+(type vendor_hal_systemhelper_hwservice)
+(type vendor_display_notch_prop)
+(type vendor_sys_qti_display)
+(type vendor_systemhelper_app)
+(typeattribute vendor_hal_systemhelper_hwservice_32_0)
+(typeattribute vendor_display_notch_prop_32_0)
+(typeattribute vendor_sys_qti_display_32_0)
+(typeattribute vendor_systemhelper_app_32_0)
diff --git a/frameworks/base/core/api/current.txt b/frameworks/base/core/api/current.txt
index c8a43db2f9..ecc1482006 100644
--- a/frameworks/base/core/api/current.txt
+++ b/frameworks/base/core/api/current.txt
@@ -8924,6 +8924,23 @@ package android.appwidget {
}
+package android.bean {
-
public final class Person implements android.os.Parcelable {
-
ctor public Person();
-
ctor public Person(@NonNull String, int);
-
method public int describeContents();
-
method public int getAge();
-
method @NonNull public String getName();
-
method public void readFromParcel(@NonNull android.os.Parcel);
-
method public void setAge(int);
-
method public void setName(@NonNull String);
-
method public void writeToParcel(@NonNull android.os.Parcel, int);
-
field @NonNull public static final android.os.Parcelable.Creator<android.bean.Person> CREATOR;
-
}
+}
package android.companion {
public final class AssociationInfo implements android.os.Parcelable {
@@ -9774,6 +9791,7 @@ package android.content {
field public static final String APP_SEARCH_SERVICE = "app_search";
field public static final String AUDIO_SERVICE = "audio";
field public static final String BATTERY_SERVICE = "batterymanager";
- field public static final String BEAN_SERVICE = "bean";
field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
field public static final int BIND_ADJUST_WITH_ACTIVITY = 128; // 0x80
field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10
diff --git a/frameworks/base/core/java/android/app/SystemServiceRegistry.java b/frameworks/base/core/java/android/app/SystemServiceRegistry.java
index 40192836e0..7ba20fe120 100644
--- a/frameworks/base/core/java/android/app/SystemServiceRegistry.java
+++ b/frameworks/base/core/java/android/app/SystemServiceRegistry.java
@@ -235,6 +235,8 @@ import android.view.textservice.TextServicesManager;
import android.view.translation.ITranslationManager;
import android.view.translation.TranslationManager;
import android.view.translation.UiTranslationManager;
+import android.bean.IBeanManager;
+import android.bean.BeanManager;
import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IBatteryStats;
@@ -282,10 +284,25 @@ public final class SystemServiceRegistry {
//CHECKSTYLE:OFF IndentationCheck
registerService(Context.ACCESSIBILITY_SERVICE, AccessibilityManager.class,
new CachedServiceFetcher<AccessibilityManager>() {
-
@Override
-
public AccessibilityManager createService(ContextImpl ctx) {
-
return AccessibilityManager.getInstance(ctx);
-
}});
-
@Override
-
public AccessibilityManager createService(ContextImpl ctx) {
-
return AccessibilityManager.getInstance(ctx);
-
}});
-
/* 20250520 */
-
registerService(Context.BEAN_SERVICE, BeanManager.class,
-
// 这里是CachedServiceFetcher抽象类的实现
-
new CachedServiceFetcher<BeanManager>() {
-
// 抽象方法createService的实现,我们看到其实很简单,就是通过ServiceManager获取服务的binder代理对象
-
@Override
-
public BeanManager createService(ContextImpl ctx) throws ServiceNotFoundException {
-
IBinder b = ServiceManager.getServiceOrThrow(Context.BEAN_SERVICE);
-
IBeanManager service = IBeanManager.Stub.asInterface(b);
-
// 以IBeanManager和Context为参数构造BeanManager,这样我们通过Context.getSysetemService(Context.BEAN_SERVICE)
-
// 返回的对象就是BeanManager
-
return new BeanManager(service, ctx);
-
}});
registerService(Context.CAPTIONING_SERVICE, CaptioningManager.class,
new CachedServiceFetcher<CaptioningManager>() {
diff --git a/frameworks/base/core/java/android/bean/BeanManager.java b/frameworks/base/core/java/android/bean/BeanManager.java
new file mode 100644
index 0000000000..7535f88d7b
--- /dev/null
+++ b/frameworks/base/core/java/android/bean/BeanManager.java
@@ -0,0 +1,50 @@
+package android.bean;
+import android.annotation.NonNull;
+import android.content.Context;
+import android.os.RemoteException;
+import android.util.Log;
+/**
+* {@hide}
+*/
+public class BeanManager {
-
private static final String TAG = "BeanManager";
-
private Context mContext;
-
private IBeanManager mService;
-
public BeanManager(IBeanManager service, Context ctx) {
-
Log.d(TAG, "new BeanManager");
-
mService = service;
-
mContext = ctx;
-
}
-
public void sayHello(@NonNull String words) {
-
Log.d(TAG, "sayHello words: " + words);
-
if (mService == null) {
-
Log.d(TAG, "sayHello mService is null!!!");
-
return;
-
}
-
try {
-
mService.sayHello(words);
-
} catch (RemoteException e) {
-
throw e.rethrowFromSystemServer();
-
}
-
}
-
public void sayHelloTo(@NonNull Person person, @NonNull String words) {
-
Log.d(TAG, "sayHelloTo " + person.getName() + ": " + words);
-
if (mService == null) {
-
Log.d(TAG, "sayHelloTo mService is null!!!");
-
return;
-
}
-
try {
-
mService.sayHelloTo(person, words);
-
} catch (RemoteException e) {
-
throw e.rethrowFromSystemServer();
-
}
-
}
+}
diff --git a/frameworks/base/core/java/android/bean/IBeanManager.aidl b/frameworks/base/core/java/android/bean/IBeanManager.aidl
new file mode 100644
index 0000000000..48a3b22107
--- /dev/null
+++ b/frameworks/base/core/java/android/bean/IBeanManager.aidl
@@ -0,0 +1,16 @@
+package android.bean;
+import android.bean.Person;
+/**
-
* {@hide}
-
*/
+interface IBeanManager {
-
void sayHello(String words);
-
// 自定义类型前面必须加上in或者out或者inout标识符
-
// in: 表示参数只能由客户端传递到服务端,基本类型默认只支持in修饰符
-
// out: 表示参数只能由服务端传递到客户端,服务端如果修改了参数对象的值
-
// 那么客户端的值也会改变,但是服务端无法读取客户端对象的值
-
// inout: 表示参数可以双向传递
-
void sayHelloTo(in Person person, String words);
+}
diff --git a/frameworks/base/core/java/android/bean/Person.aidl b/frameworks/base/core/java/android/bean/Person.aidl
new file mode 100644
index 0000000000..a4518f1601
--- /dev/null
+++ b/frameworks/base/core/java/android/bean/Person.aidl
@@ -0,0 +1,3 @@
+package android.bean;
+parcelable Person;
diff --git a/frameworks/base/core/java/android/bean/Person.java b/frameworks/base/core/java/android/bean/Person.java
new file mode 100644
index 0000000000..474cd897a2
--- /dev/null
+++ b/frameworks/base/core/java/android/bean/Person.java
@@ -0,0 +1,74 @@
+package android.bean;
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+public final class Person implements Parcelable {
-
// 注意定义成员变量的顺序,后面读取和写入都必须按这个顺序
-
private String mName;
-
private int mAge;
-
public Person() {
-
}
-
public Person(@NonNull String name, int age) {
-
this.mName = name;
-
this.mAge = age;
-
}
-
private Person(@NonNull Parcel in) {
-
// 注意定义成员变量的顺序
-
this.mName = in.readString();
-
this.mAge = in.readInt();
-
}
-
@NonNull
-
public String getName() {
-
return mName;
-
}
-
public int getAge() {
-
return mAge;
-
}
-
public void setName(@NonNull String name) {
-
mName = name;
-
}
-
public void setAge(int age) {
-
mAge = age;
-
}
-
@Override
-
public int describeContents() {
-
return 0;
-
}
-
//
-
@Override
-
public void writeToParcel(@NonNull Parcel dest, int flags) {
-
// 注意定义成员变量的顺序
-
dest.writeString(this.mName);
-
dest.writeInt(this.mAge);
-
}
-
public void readFromParcel(@NonNull Parcel source) {
-
// 注意定义成员变量的顺序
-
this.mName = source.readString();
-
this.mAge = source.readInt();
-
}
-
@NonNull
-
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
-
@Override
-
public Person createFromParcel(@NonNull Parcel source) {
-
return new Person(source);
-
}
-
@Override
-
public Person[] newArray(int size) {
-
return new Person[size];
-
}
-
};
+}
diff --git a/frameworks/base/core/java/android/content/Context.java b/frameworks/base/core/java/android/content/Context.java
index fce23cf681..831c46e36f 100644
--- a/frameworks/base/core/java/android/content/Context.java
+++ b/frameworks/base/core/java/android/content/Context.java
@@ -3809,6 +3809,7 @@ public abstract class Context {
ACCOUNT_SERVICE,
ACTIVITY_SERVICE,
ALARM_SERVICE,
- BEAN_SERVICE,
NOTIFICATION_SERVICE,
ACCESSIBILITY_SERVICE,
CAPTIONING_SERVICE,
@@ -4247,6 +4248,17 @@ public abstract class Context {
*/
public static final String ACTIVITY_SERVICE = "activity";
-
/**
-
*
-
* Use with {@link #getSystemService(String)} to retrieve a
-
* {@link android.bean.BeanManager} for interacting with the global
-
* system state.
-
*
-
* @see #getSystemService(String)
-
* @see android.bean.BeanManager
-
*/
-
public static final String BEAN_SERVICE = "bean";
/**
* Use with {@link #getSystemService(String)} to retrieve a
* {@link android.app.ActivityTaskManager} for interacting with the global system state.
diff --git a/frameworks/base/services/core/java/com/android/server/bean/BeanManagerService.java b/frameworks/base/services/core/java/com/android/server/bean/BeanManagerService.java
new file mode 100644
index 0000000000..4f5749b91e
--- /dev/null
+++ b/frameworks/base/services/core/java/com/android/server/bean/BeanManagerService.java
@@ -0,0 +1,71 @@
+package com.android.server.bean;
+import android.bean.IBeanManager;
+import android.bean.Person;
+import android.content.Context;
+import android.util.Log;
+import com.android.server.SystemService;
+import com.android.server.Watchdog;
+public class BeanManagerService extends IBeanManager.Stub
-
implements Watchdog.Monitor {
-
static final String TAG = "BeanManagerService";
-
final Context mContext;
-
public BeanManagerService(Context systemContext) {
-
Log.d(TAG, "BeanManagerService");
-
mContext = systemContext;
-
Watchdog.getInstance().addMonitor(this);
-
}
-
@Override
-
public void sayHello(String words) {
-
Log.d(TAG, " sayHello : " + words);
-
}
-
@Override
-
public void sayHelloTo(Person person, String words) {
-
Log.d(TAG, " sayHello " + person.getName() + ": " + words);
-
}
-
public void systemReady() {
-
Log.d(TAG, " systemReady ");
-
}
-
/** In this method we try to acquire our lock to make sure that we have not deadlocked */
-
public void monitor() {
-
synchronized (this) { }
-
}
-
// 这里我们定义了一个内部类继承SystemService,这样便于方便system_server统一管理启动服务
-
// 系统启动时会回调所有继承了SystemService的类的函数,比如onStart,onBootPhase等等。
-
public static final class Lifecycle extends SystemService {
-
static final String TAG = "BeanManagerService.Lifecycle";
-
private BeanManagerService mService;
-
public Lifecycle(Context context) {
-
super(context);
-
// 在这里构造我们的BeanManagerService对象
-
mService = new BeanManagerService(context);
-
}
-
@Override
-
public void onStart() {
-
Log.d(TAG, "onStart");
-
// 这里最终调用ServiceManager.addService
-
publishBinderService(Context.BEAN_SERVICE, mService);
-
}
-
@Override
-
public void onBootPhase(int phase) {
-
Log.d(TAG, "onBootPhase");
-
if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
-
mService.systemReady();
-
}
-
}
-
}
+}
diff --git a/frameworks/base/services/java/com/android/server/SystemServer.java b/frameworks/base/services/java/com/android/server/SystemServer.java
index ce91cd2cc8..13cb7e09cf 100644
--- a/frameworks/base/services/java/com/android/server/SystemServer.java
+++ b/frameworks/base/services/java/com/android/server/SystemServer.java
@@ -111,6 +111,7 @@ import com.android.server.appbinding.AppBindingService;
import com.android.server.art.ArtManagerLocal;
import com.android.server.attention.AttentionManagerService;
import com.android.server.audio.AudioService;
+import com.android.server.bean.BeanManagerService;
import com.android.server.biometrics.AuthService;
import com.android.server.biometrics.BiometricService;
import com.android.server.biometrics.sensors.face.FaceService;
@@ -1404,7 +1405,7 @@ public final class SystemServer implements Dumpable {
* Starts a miscellaneous grab bag of stuff that has yet to be refactored and organized.
*/
private void startOtherServices(@NonNull TimingsTraceAndSlog t) {
- t.traceBegin("startOtherServices");
- t.traceBegin("c LA.QSSI, startOtherServices");
mSystemServiceManager.updateOtherServicesStartIndex();
final Context context = mSystemContext;
@@ -1473,6 +1474,14 @@ public final class SystemServer implements Dumpable {
}
}, SECONDARY_ZYGOTE_PRELOAD);
-
//
-
Slog.d(TAG, " test add BeanManagerService.");
-
t.traceBegin(" BeanManagerService");
-
// 这里最终会通过反射的方法调用BeanManagerService.Lifecycle的构造函数
-
mSystemServiceManager.startService(BeanManagerService.Lifecycle.class);
-
t.traceEnd();
t.traceBegin("StartKeyAttestationApplicationIdProviderService");
ServiceManager.addService("sec_key_att_app_id_provider",
new KeyAttestationApplicationIdProviderService(context));
diff --git a/system/sepolicy/prebuilts/api/28.0/private/service_contexts b/system/sepolicy/prebuilts/api/28.0/private/service_contexts
index 5ec45a23ef..80f05057a6 100644
--- a/system/sepolicy/prebuilts/api/28.0/private/service_contexts
+++ b/system/sepolicy/prebuilts/api/28.0/private/service_contexts
@@ -185,4 +185,5 @@ wificond u:object_r:wificond_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/prebuilts/api/28.0/private/system_server.te b/system/sepolicy/prebuilts/api/28.0/private/system_server.te
index 8b1b4df6e6..aa7b791b73 100644
--- a/system/sepolicy/prebuilts/api/28.0/private/system_server.te
+++ b/system/sepolicy/prebuilts/api/28.0/private/system_server.te
@@ -866,3 +866,5 @@ neverallow system_server { domain -system_server }:process ptrace;
CAP_SYS_RESOURCE was traditionally needed for sensitive /proc/PID
file read access. However, that is now unnecessary (b/34951864)
neverallow system_server system_server:global_capability_class_set sys_resource;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/prebuilts/api/28.0/public/system_server.te b/system/sepolicy/prebuilts/api/28.0/public/system_server.te
index 805d6175d6..0592293f0b 100644
--- a/system/sepolicy/prebuilts/api/28.0/public/system_server.te
+++ b/system/sepolicy/prebuilts/api/28.0/public/system_server.te
@@ -3,3 +3,4 @@
Most of the framework services run in this process.
type system_server, domain;
+type bean_service, service_manager_type;
diff --git a/system/sepolicy/prebuilts/api/29.0/private/service_contexts b/system/sepolicy/prebuilts/api/29.0/private/service_contexts
index 96d553bf49..a397671972 100644
--- a/system/sepolicy/prebuilts/api/29.0/private/service_contexts
+++ b/system/sepolicy/prebuilts/api/29.0/private/service_contexts
@@ -219,4 +219,5 @@ wificond u:object_r:wificond_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/prebuilts/api/29.0/private/system_server.te b/system/sepolicy/prebuilts/api/29.0/private/system_server.te
index 5f60674b0e..8cb7f63464 100644
--- a/system/sepolicy/prebuilts/api/29.0/private/system_server.te
+++ b/system/sepolicy/prebuilts/api/29.0/private/system_server.te
@@ -1044,3 +1044,5 @@ neverallow {
-system_server
} password_slot_metadata_file:notdevfile_class_set ~{ relabelto getattr };
neverallow { domain -init -system_server } password_slot_metadata_file:notdevfile_class_set *;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/prebuilts/api/29.0/public/service.te b/system/sepolicy/prebuilts/api/29.0/public/service.te
index a2193d0edb..d4c5f7d737 100644
--- a/system/sepolicy/prebuilts/api/29.0/public/service.te
+++ b/system/sepolicy/prebuilts/api/29.0/public/service.te
@@ -187,6 +187,7 @@ type wifiaware_service, app_api_service, system_server_service, service_manager_
type window_service, system_api_service, system_server_service, service_manager_type;
type inputflinger_service, system_api_service, system_server_service, service_manager_type;
type wpantund_service, system_api_service, service_manager_type;
+type bean_service,service_manager_type;
Neverallow rules
diff --git a/system/sepolicy/prebuilts/api/30.0/private/service_contexts b/system/sepolicy/prebuilts/api/30.0/private/service_contexts
index 5c6f1a4766..2c8ee79c2f 100644
--- a/system/sepolicy/prebuilts/api/30.0/private/service_contexts
+++ b/system/sepolicy/prebuilts/api/30.0/private/service_contexts
@@ -247,4 +247,5 @@ wifinl80211 u:object_r:wifinl80211_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/prebuilts/api/30.0/private/system_server.te b/system/sepolicy/prebuilts/api/30.0/private/system_server.te
index 00828274d6..c965ba3eb0 100644
--- a/system/sepolicy/prebuilts/api/30.0/private/system_server.te
+++ b/system/sepolicy/prebuilts/api/30.0/private/system_server.te
@@ -1170,3 +1170,4 @@ neverallow system_server self:perf_event ~{ open write cpu kernel };
Do not allow any domain other than init or system server to set the property
neverallow { domain -init -system_server } socket_hook_prop:property_service set;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/prebuilts/api/30.0/public/service.te b/system/sepolicy/prebuilts/api/30.0/public/service.te
index f27772eabb..05540e0a79 100644
--- a/system/sepolicy/prebuilts/api/30.0/public/service.te
+++ b/system/sepolicy/prebuilts/api/30.0/public/service.te
@@ -205,6 +205,7 @@ type inputflinger_service, system_api_service, system_server_service, service_ma
type wpantund_service, system_api_service, service_manager_type;
type tethering_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type emergency_affordance_service, system_server_service, service_manager_type;
+type bean_service,service_manager_type;
HAL Services
diff --git a/system/sepolicy/prebuilts/api/31.0/private/service_contexts b/system/sepolicy/prebuilts/api/31.0/private/service_contexts
index 3fd342b9be..71f3be55f0 100644
--- a/system/sepolicy/prebuilts/api/31.0/private/service_contexts
+++ b/system/sepolicy/prebuilts/api/31.0/private/service_contexts
@@ -307,4 +307,5 @@ wifinl80211 u:object_r:wifinl80211_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/prebuilts/api/31.0/private/system_server.te b/system/sepolicy/prebuilts/api/31.0/private/system_server.te
index 73301c1e9f..b046c5c0f8 100644
--- a/system/sepolicy/prebuilts/api/31.0/private/system_server.te
+++ b/system/sepolicy/prebuilts/api/31.0/private/system_server.te
@@ -1409,3 +1409,4 @@ neverallowxperm { domain -system_server } binder_device:chr_file ioctl { BINDER_
Only system server can write the font files.
neverallow { domain -init -system_server } font_data_file:file no_w_file_perms;
neverallow { domain -init -system_server } font_data_file:dir no_w_dir_perms;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/prebuilts/api/31.0/public/service.te b/system/sepolicy/prebuilts/api/31.0/public/service.te
index ba7837d562..7da8ae30fa 100644
--- a/system/sepolicy/prebuilts/api/31.0/public/service.te
+++ b/system/sepolicy/prebuilts/api/31.0/public/service.te
@@ -268,6 +268,7 @@ type hal_secureclock_service, vendor_service, protected_service, service_manager
type hal_sharedsecret_service, vendor_service, protected_service, service_manager_type;
type hal_vibrator_service, vendor_service, protected_service, service_manager_type;
type hal_weaver_service, vendor_service, protected_service, service_manager_type;
+type bean_service,service_manager_type;
Neverallow rules
diff --git a/system/sepolicy/prebuilts/api/32.0/private/service_contexts b/system/sepolicy/prebuilts/api/32.0/private/service_contexts
index 3fd342b9be..71f3be55f0 100644
--- a/system/sepolicy/prebuilts/api/32.0/private/service_contexts
+++ b/system/sepolicy/prebuilts/api/32.0/private/service_contexts
@@ -307,4 +307,5 @@ wifinl80211 u:object_r:wifinl80211_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/prebuilts/api/32.0/private/system_server.te b/system/sepolicy/prebuilts/api/32.0/private/system_server.te
index 6aca000385..c9ae3aa3ec 100644
--- a/system/sepolicy/prebuilts/api/32.0/private/system_server.te
+++ b/system/sepolicy/prebuilts/api/32.0/private/system_server.te
@@ -1411,3 +1411,4 @@ neverallowxperm { domain -system_server } binder_device:chr_file ioctl { BINDER_
Only system server can write the font files.
neverallow { domain -init -system_server } font_data_file:file no_w_file_perms;
neverallow { domain -init -system_server } font_data_file:dir no_w_dir_perms;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/prebuilts/api/32.0/public/service.te b/system/sepolicy/prebuilts/api/32.0/public/service.te
index ba7837d562..7da8ae30fa 100644
--- a/system/sepolicy/prebuilts/api/32.0/public/service.te
+++ b/system/sepolicy/prebuilts/api/32.0/public/service.te
@@ -268,6 +268,7 @@ type hal_secureclock_service, vendor_service, protected_service, service_manager
type hal_sharedsecret_service, vendor_service, protected_service, service_manager_type;
type hal_vibrator_service, vendor_service, protected_service, service_manager_type;
type hal_weaver_service, vendor_service, protected_service, service_manager_type;
+type bean_service,service_manager_type;
Neverallow rules
diff --git a/system/sepolicy/prebuilts/api/33.0/private/service_contexts b/system/sepolicy/prebuilts/api/33.0/private/service_contexts
index 72fa16629e..107139f764 100644
--- a/system/sepolicy/prebuilts/api/33.0/private/service_contexts
+++ b/system/sepolicy/prebuilts/api/33.0/private/service_contexts
@@ -384,4 +384,5 @@ wifinl80211 u:object_r:wifinl80211_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/prebuilts/api/33.0/private/system_server.te b/system/sepolicy/prebuilts/api/33.0/private/system_server.te
index 0f72c7fcfe..15e252f2d8 100644
--- a/system/sepolicy/prebuilts/api/33.0/private/system_server.te
+++ b/system/sepolicy/prebuilts/api/33.0/private/system_server.te
@@ -1486,3 +1486,5 @@ neverallowxperm { domain -system_server } binder_device:chr_file ioctl { BINDER_
Only system server can write the font files.
neverallow { domain -init -system_server } font_data_file:file no_w_file_perms;
neverallow { domain -init -system_server } font_data_file:dir no_w_dir_perms;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/prebuilts/api/33.0/public/service.te b/system/sepolicy/prebuilts/api/33.0/public/service.te
index e862b405fe..2d0f7a9eb3 100644
--- a/system/sepolicy/prebuilts/api/33.0/public/service.te
+++ b/system/sepolicy/prebuilts/api/33.0/public/service.te
@@ -310,6 +310,7 @@ type hal_weaver_service, vendor_service, protected_service, hal_service_type, se
type hal_nlinterceptor_service, vendor_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_hostapd_service, vendor_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_supplicant_service, vendor_service, protected_service, hal_service_type, service_manager_type;
+type bean_service,service_manager_type;
Neverallow rules
diff --git a/system/sepolicy/private/service_contexts b/system/sepolicy/private/service_contexts
index 72fa16629e..107139f764 100644
--- a/system/sepolicy/private/service_contexts
+++ b/system/sepolicy/private/service_contexts
@@ -384,4 +384,5 @@ wifinl80211 u:object_r:wifinl80211_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
+bean u:object_r:bean_service:s0
* u:object_r:default_android_service:s0
diff --git a/system/sepolicy/private/system_server.te b/system/sepolicy/private/system_server.te
index 0f72c7fcfe..15e252f2d8 100644
--- a/system/sepolicy/private/system_server.te
+++ b/system/sepolicy/private/system_server.te
@@ -1486,3 +1486,5 @@ neverallowxperm { domain -system_server } binder_device:chr_file ioctl { BINDER_
Only system server can write the font files.
neverallow { domain -init -system_server } font_data_file:file no_w_file_perms;
neverallow { domain -init -system_server } font_data_file:dir no_w_dir_perms;
+allow system_server bean_service:service_manager add;
diff --git a/system/sepolicy/public/service.te b/system/sepolicy/public/service.te
index e862b405fe..2d0f7a9eb3 100644
--- a/system/sepolicy/public/service.te
+++ b/system/sepolicy/public/service.te
@@ -310,6 +310,7 @@ type hal_weaver_service, vendor_service, protected_service, hal_service_type, se
type hal_nlinterceptor_service, vendor_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_hostapd_service, vendor_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_supplicant_service, vendor_service, protected_service, hal_service_type, service_manager_type;
+type bean_service,service_manager_type;
Neverallow rules
--
2.17.1
--