在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

--

相关推荐
CYRUS_STUDIO2 小时前
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
android·安全·逆向
Shujie_L4 小时前
【Android基础回顾】四:ServiceManager
android
Think Spatial 空间思维5 小时前
【实施指南】Android客户端HTTPS双向认证实施指南
android·网络协议·https·ssl
louisgeek6 小时前
Git 使用 SSH 连接
android
二流小码农6 小时前
鸿蒙开发:实现一个标题栏吸顶
android·ios·harmonyos
八月林城7 小时前
echarts在uniapp中使用安卓真机运行时无法显示的问题
android·uni-app·echarts
雨白7 小时前
搞懂 Fragment 的生命周期
android
casual_clover7 小时前
Android 之 kotlin语言学习笔记三(Kotlin-Java 互操作)
android·java·kotlin
梓仁沐白7 小时前
【Kotlin】数字&字符串&数组&集合
android·开发语言·kotlin
技术小甜甜7 小时前
【Godot】如何导出 Release 版本的安卓项目
android·游戏引擎·godot