在Android13上添加系统服务的好用例子

在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

--

相关推荐
安东尼肉店4 小时前
Android compose屏幕适配终极解决方案
android
2501_916007474 小时前
HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包)
android·ios·小程序·https·uni-app·iphone·webview
feiyangqingyun5 小时前
基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
android·qt·ffmpeg
用户2018792831679 小时前
ANR之RenderThread不可中断睡眠state=D
android
煤球王子9 小时前
简单学:Android14中的Bluetooth—PBAP下载
android
小趴菜822710 小时前
安卓接入Max广告源
android
齊家治國平天下10 小时前
Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
android·anr
ZHANG13HAO10 小时前
Android 13.0 Framework 实现应用通知使用权默认开启的技术指南
android
【ql君】qlexcel10 小时前
Android 安卓RIL介绍
android·安卓·ril
写点啥呢10 小时前
android12解决非CarProperty接口深色模式设置后开机无法保持
android·车机·aosp·深色模式·座舱