android10 添加系统服务
前言
添加自定义系统服务
一、增加aidl文件
IXunyeService.aidl
package android.os.xunye;
import android.os.xunye.XunyeEvent;
import android.os.xunye.IXunyeEventListener;
interface IXunyeService {
void addEventListener(IXunyeEventListener listener) = 0;
void removeEventListener(IXunyeEventListener listener) = 1;
void putStringValue(in String key, in String value)=2;
String getStringValue(in String key)=3;
void sendEvent(in XunyeEvent event)=4;
}
IXunyeEventListener.aidl
package android.os.xunye;
import android.os.xunye.XunyeEvent;
oneway interface IXunyeEventListener {
void onEventChanged(in XunyeEvent event) = 0;
}
XunyeEvent.aidl 这个文件比较简单,其实就是实现parcelable 接口
package android.os.xunye;
parcelable XunyeEvent;
diff --git a/alps/frameworks/base/Android.bp b/alps/frameworks/base/Android.bp
index 910bc2c7f6..37bfc439aa 100644
--- a/alps/frameworks/base/Android.bp
+++ b/alps/frameworks/base/Android.bp
@@ -274,6 +274,9 @@ java_defaults {
":libvibrator_aidl",
"core/java/android/os/IVibratorService.aidl",
"core/java/android/os/image/IDynamicSystemService.aidl",
+ "core/java/android/os/xunye/IXunyeEventListener.aidl",
+ "core/java/android/os/xunye/IXunyeService.aidl",
+ "core/java/android/os/xunye/XunyeEvent.aidl",
"core/java/android/os/storage/IStorageManager.aidl",
"core/java/android/os/storage/IStorageEventListener.aidl",
"core/java/android/os/storage/IStorageShutdownObserver.aidl",
二、增加自定义服务文件
diff --git a/alps/frameworks/base/core/java/android/os/xunye/XunyeEvent.java b/alps/frameworks/base/core/java/android/os/xunye/XunyeEvent.java
new file mode 100755
index 0000000000..0847e024fd
--- /dev/null
+++ b/alps/frameworks/base/core/java/android/os/xunye/XunyeEvent.java
@@ -0,0 +1,102 @@
+package android.os.xunye;
+
+
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.List;
+
+
+public class XunyeEvent implements Parcelable {
+ private int event=0;
+ private int result=0;
+ private String str1;
+ private String str2;
+ private List<String> list;
+
+ public XunyeEvent() {
+ }
+
+ public XunyeEvent(int event) {
+ this.event = event;
+ }
+
+ public XunyeEvent(int event, String str1, String str2) {
+ this.event = event;
+ this.str1 = str1;
+ this.str2 = str2;
+ }
+
+ protected XunyeEvent(Parcel in) {
+ event = in.readInt();
+ str1 = in.readString();
+ str2 = in.readString();
+ list = in.createStringArrayList();
+ }
+
+ public static final Creator<XunyeEvent> CREATOR = new Creator<XunyeEvent>() {
+ @Override
+ public XunyeEvent createFromParcel(Parcel in) {
+ return new XunyeEvent(in);
+ }
+
+ @Override
+ public XunyeEvent[] newArray(int size) {
+ return new XunyeEvent[size];
+ }
+ };
+
+ public int getEvent() {
+ return event;
+ }
+
+ public void setEvent(int event) {
+ this.event = event;
+ }
+
+ public int getResult() {
+ return result;
+ }
+
+ public void setResult(int result) {
+ this.result = result;
+ }
+
+ public String getStr1() {
+ return str1;
+ }
+
+ public void setStr1(String str1) {
+ this.str1 = str1;
+ }
+
+ public String getStr2() {
+ return str2;
+ }
+
+ public void setStr2(String str2) {
+ this.str2 = str2;
+ }
+
+ public List<String> getList() {
+ return list;
+ }
+
+ public void setList(List<String> list) {
+ this.list = list;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(event);
+ dest.writeString(str1);
+ dest.writeString(str2);
+ dest.writeStringList(list);
+ }
+}
diff --git a/alps/frameworks/base/core/java/android/os/xunye/XunyeEventListener.java b/alps/frameworks/base/core/java/android/os/xunye/XunyeEventListener.java
new file mode 100755
index 0000000000..0bcfd2dfa9
--- /dev/null
+++ b/alps/frameworks/base/core/java/android/os/xunye/XunyeEventListener.java
@@ -0,0 +1,13 @@
+package android.os.xunye;
+
+import android.os.RemoteException;
+
+public abstract class XunyeEventListener extends IXunyeEventListener.Stub{
+
+
+ @Override
+ public void onEventChanged(XunyeEvent event) throws RemoteException {
+
+ }
+
+}
diff --git a/alps/frameworks/base/core/java/android/os/xunye/XunyeManager.java b/alps/frameworks/base/core/java/android/os/xunye/XunyeManager.java
new file mode 100755
index 0000000000..1c8831396f
--- /dev/null
+++ b/alps/frameworks/base/core/java/android/os/xunye/XunyeManager.java
@@ -0,0 +1,102 @@
+package android.os.xunye;
+
+import android.Manifest;
+import android.annotation.CallbackExecutor;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
+import android.annotation.SystemApi;
+import android.annotation.SystemService;
+import android.annotation.TestApi;
+import android.annotation.UserIdInt;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.Process;
+import android.os.RemoteCallback;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.xunye.IXunyeEventListener;
+import android.os.xunye.XunyeEventListener;
+
+import android.util.Log;
+
+
+@SystemService(Context.XUNYE_SERVICE)
+public final class XunyeManager {
+
+ private static final String LOG_TAG = XunyeManager.class.getSimpleName();
+
+
+
+ public static final String PERMISSION_XUNYE_CONTROLLER =
+ "com.android.permissioncontroller.permission.XUNYE_CONTROLLER";
+
+ @NonNull
+ private final Context mContext;
+
+ @NonNull
+ private final IXunyeService mService;
+
+ /**
+ * @hide
+ */
+ public XunyeManager(@NonNull Context context) throws ServiceManager.ServiceNotFoundException {
+ mContext = context;
+ mService = IXunyeService.Stub.asInterface(ServiceManager.getServiceOrThrow(
+ Context.XUNYE_SERVICE));
+ }
+
+ public void addEventListener(XunyeEventListener xunyeEventListener){
+ try{
+ mService.addEventListener(xunyeEventListener);
+ }catch(Exception e){
+ Log.e(LOG_TAG,e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ public void removeEventListener(XunyeEventListener xunyeEventListener){
+ try{
+ mService.removeEventListener(xunyeEventListener);
+ }catch(Exception e){
+ Log.e(LOG_TAG,e.toString());
+ e.printStackTrace();
+ }
+ }
+
+
+ public void putStringValue(String key,String value){
+ try{
+ Log.e(LOG_TAG,"XunyeManager putStringValue");
+ mService.putStringValue(key,value);
+ }catch(Exception e){
+ Log.e(LOG_TAG,e.toString());
+ e.printStackTrace();
+ }
+ }
+
+ public String getStringValue(String key){
+ try{
+ Log.e(LOG_TAG,"XunyeManager getStringValue");
+ return mService.getStringValue(key);
+ }catch(Exception e){
+ Log.e(LOG_TAG,e.toString());
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public void sendEvent(XunyeEvent event) {
+ try{
+ Log.e(LOG_TAG, "sendEvent ");
+ mService.sendEvent(event);
+ }catch(Exception e){
+ Log.e(LOG_TAG,e.toString());
+ e.printStackTrace();
+ }
+ }
+
+
+}
+package android.os.xunye;
+
+
+import android.os.xunye.XunyeEvent;
+
+
+oneway interface IXunyeEventListener {
+
+
+ void onEventChanged(in XunyeEvent event) = 0;
+
+
+}
@@ -0,0 +1,19 @@
+package android.os.xunye;
+
+import android.os.xunye.XunyeEvent;
+import android.os.xunye.IXunyeEventListener;
+
+interface IXunyeService {
+
+ void addEventListener(IXunyeEventListener listener) = 0;
+
+ void removeEventListener(IXunyeEventListener listener) = 1;
+
+ void putStringValue(in String key, in String value)=2;
+
+ String getStringValue(in String key)=3;
+
+ void sendEvent(in XunyeEvent event)=4;
+
+
+}
diff --git a/alps/frameworks/base/services/core/java/com/android/server/xunye/XunyeService.java b/alps/frameworks/base/services/core/java/com/android/server/xunye/XunyeService.java
new file mode 100755
index 0000000000..4c3b44740b
--- /dev/null
+++ b/alps/frameworks/base/services/core/java/com/android/server/xunye/XunyeService.java
@@ -0,0 +1,177 @@
+package com.android.server.xunye;
+
+
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.xunye.IXunyeService;
+import android.os.xunye.IXunyeEventListener;
+import android.os.xunye.XunyeEventListener;
+import android.os.xunye.XunyeEvent;
+import android.os.RemoteException;
+import android.os.RemoteCallbackList;
+import android.os.TokenWatcher;
+import android.os.UpdateLock;
+import android.os.UserHandle;
+import android.util.Slog;
+import android.annotation.RequiresPermission;
+
+import com.android.internal.util.DumpUtils;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+
+
+public class XunyeService extends IXunyeService.Stub {
+
+ private static final String TAG = "XunyeService";
+ private Context mContext;
+ private RemoteCallbackList<IXunyeEventListener> mCallbackList = new RemoteCallbackList<>();
+ private final Object mListenersLock = new Object();
+
+ public XunyeService(Context context) {
+ Slog.i(TAG, "XunyeService init");
+ mContext = context;
+ }
+
+ @Override
+ public void addEventListener(IXunyeEventListener listener) throws RemoteException {
+ Slog.i(TAG, "addEventListener");
+ mCallbackList.register(listener);
+ }
+
+ @Override
+ public void removeEventListener(IXunyeEventListener listener) throws RemoteException {
+ Slog.i(TAG, "removeEventListener");
+ mCallbackList.unregister(listener);
+ }
+
+ @Override
+ public void putStringValue(String key, String value) throws RemoteException {
+ Slog.i(TAG, "putStringValue value = "+value);
+ }
+
+ @Override
+ public String getStringValue(String key) throws RemoteException {
+ Slog.i(TAG, "getStringValue ");
+ return "getStringValue";
+ }
+
+ @Override
+ public void sendEvent(XunyeEvent event) throws RemoteException {
+ Slog.i(TAG, "sendEvent ");
+ if(event.getEvent()==0){
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ doEvent(event);
+ }
+ }).start();
+ }else if(event.getEvent()==1){
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ int res=1;
+ event.setResult(res);
+ doEvent(event);
+ }
+ }).start();
+ }else{
+ doEvent(event);
+ }
+
+ }
+
+ @RequiresPermission(allOf = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.MANAGE_EXTERNAL_STORAGE"})
+ private void doEvent(XunyeEvent event){
+ synchronized (mListenersLock) {
+ //注册在列表中的callback数量
+ int count = mCallbackList.getRegisteredCallbackCount();
+ Slog.i(TAG, "sendEvent count="+count);
+ if (count > 0) {
+ final int size = mCallbackList.beginBroadcast();
+ //遍历列表中的callback,对注册的每个callback执行print方法,客户端重写print方法后可以获得sendMessage执行结果
+ for (int i = 0; i < size; i++) {
+ IXunyeEventListener listener = mCallbackList.getBroadcastItem(i);
+ try {
+ if (listener != null) {
+ listener.onEventChanged(event);
+ }
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ Slog.i(TAG, "remote exception:" + e.getMessage());
+ }
+ }
+ mCallbackList.finishBroadcast();
+ }
+
+ }
+ }
+
+}
三、修改SystemServer
1.系统启动的时候启动自定义服务
代码如下(示例):
diff --git a/alps/frameworks/base/core/java/android/app/SystemServiceRegistry.java b/alps/frameworks/base/core/java/android/app/SystemServiceRegistry.java
index 2771a2fdb0..c9e5c4e535 100644
--- a/alps/frameworks/base/core/java/android/app/SystemServiceRegistry.java
+++ b/alps/frameworks/base/core/java/android/app/SystemServiceRegistry.java
@@ -158,6 +158,7 @@ import android.os.health.SystemHealthManager;
import android.os.image.DynamicSystemManager;
import android.os.image.IDynamicSystemService;
import android.os.storage.StorageManager;
+import android.os.xunye.XunyeManager;
import android.permission.PermissionControllerManager;
import android.permission.PermissionManager;
import android.print.IPrintManager;
@@ -331,6 +332,19 @@ public final class SystemServiceRegistry {
return new ClipboardManager(ctx.getOuterContext(),
ctx.mMainThread.getHandler());
}});
+
+ registerService(Context.XUNYE_SERVICE, XunyeManager.class,
+ new CachedServiceFetcher<XunyeManager>() {
+ @Override
+ public XunyeManager createService(ContextImpl ctx) {
+ try {
+ return new XunyeManager(ctx);
+ } catch (ServiceNotFoundException e) {
+ Log.i(TAG, "registerService ServiceNotFoundException e = "+e);
+ onServiceNotFound(e);
+ }
+ return null;
+ }});
diff --git a/alps/frameworks/base/core/java/android/content/Context.java b/alps/frameworks/base/core/java/android/content/Context.java
index c3dd82729d..99e5dc12e1 100644
--- a/alps/frameworks/base/core/java/android/content/Context.java
+++ b/alps/frameworks/base/core/java/android/content/Context.java
@@ -4676,6 +4676,13 @@ public abstract class Context {
* @hide
*/
public static final String DYNAMIC_SYSTEM_SERVICE = "dynamic_system";
+
+ /**
+ * Use with {@link #getSystemService(String)}
+ *
+ * @see #getSystemService(String)
+ */
+ public static final String XUNYE_SERVICE = "xunye";
+
\ No newline at end of file
diff --git a/alps/frameworks/base/services/java/com/android/server/SystemServer.java b/alps/frameworks/base/services/java/com/android/server/SystemServer.java
index a05fdfe21c..b00ebdc275 100644
--- a/alps/frameworks/base/services/java/com/android/server/SystemServer.java
+++ b/alps/frameworks/base/services/java/com/android/server/SystemServer.java
@@ -141,6 +141,7 @@ import com.android.server.soundtrigger.SoundTriggerService;
import com.android.server.stats.StatsCompanionService;
import com.android.server.statusbar.StatusBarManagerService;
import com.android.server.storage.DeviceStorageMonitorService;
+import com.android.server.xunye.XunyeService;
import com.android.server.telecom.TelecomLoaderService;
import com.android.server.testharness.TestHarnessModeService;
import com.android.server.textclassifier.TextClassificationManagerService;
@@ -1043,7 +1044,8 @@ public final class SystemServer {
vibrator = new VibratorService(context);
ServiceManager.addService("vibrator", vibrator);
traceEnd();
-*/
+*/
+
traceBeginAndSlog("StartDynamicSystemService");
dynamicSystem = new DynamicSystemService(context);
ServiceManager.addService("dynamic_system", dynamicSystem);
@@ -1224,6 +1226,10 @@ public final class SystemServer {
traceEnd();
}
}
+
+ traceBeginAndSlog("StartXunyeManagerService");
+ ServiceManager.addService(Context.XUNYE_SERVICE, new XunyeService(context));
+ traceEnd();
// We start this here so that we update our configuration to set watch or television
// as appropriate.
@@ -1515,7 +1521,7 @@ public final class SystemServer {
}
traceEnd();
}
-/* 搜索服务, 去掉
+//* 搜索服务,
if (!isWatch) {
traceBeginAndSlog("StartSearchManagerService");
try {
@@ -1525,7 +1531,7 @@ public final class SystemServer {
}
traceEnd();
}
-*/
+
if (context.getResources().getBoolean(R.bool.config_enableWallpaperService)) {
traceBeginAndSlog("StartWallpaperManagerService");
mSystemServiceManager.startService(WALLPAPER_SERVICE_CLASS);
@@ -1971,11 +1977,11 @@ public final class SystemServer {
// NOTE: ClipboardService depends on ContentCapture and Autofill
//粘贴板服务
-/*
+
traceBeginAndSlog("StartClipboardService");
mSystemServiceManager.startService(ClipboardService.class);
traceEnd();
-*/
+
traceBeginAndSlog("AppServiceManager");
mSystemServiceManager.startService(AppBindingService.Lifecycle.class);
traceEnd();
三、修改SE权限
这里我们模仿一个系统服务照着写就行
diff --git a/alps/system/sepolicy/prebuilts/api/26.0/private/service_contexts b/alps/system/sepolicy/prebuilts/api/26.0/private/service_contexts
index ff97d662fb..23955ad882 100644
--- a/alps/system/sepolicy/prebuilts/api/26.0/private/service_contexts
+++ b/alps/system/sepolicy/prebuilts/api/26.0/private/service_contexts
@@ -16,6 +16,7 @@ batterystats u:object_r:batterystats_service:s0
battery u:object_r:battery_service:s0
bluetooth_manager u:object_r:bluetooth_manager_service:s0
bluetooth u:object_r:bluetooth_service:s0
+xunye u:object_r:xunye_service:s0
carrier_config u:object_r:radio_service:s0
clipboard u:object_r:clipboard_service:s0
com.android.net.IProxyService u:object_r:IProxyService_service:s0
diff --git a/alps/system/sepolicy/prebuilts/api/26.0/public/service.te b/alps/system/sepolicy/prebuilts/api/26.0/public/service.te
index da540dbf53..6c7c918fa0 100644
--- a/alps/system/sepolicy/prebuilts/api/26.0/public/service.te
+++ b/alps/system/sepolicy/prebuilts/api/26.0/public/service.te
@@ -44,6 +44,7 @@ type batterystats_service, app_api_service, ephemeral_app_api_service, system_se
type battery_service, system_server_service, service_manager_type;
type bluetooth_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type cameraproxy_service, system_server_service, service_manager_type;
+type xunye_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type clipboard_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type contexthub_service, app_api_service, system_server_service, service_manager_type;
type IProxyService_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
diff --git a/alps/system/sepolicy/prebuilts/api/27.0/private/service_contexts b/alps/system/sepolicy/prebuilts/api/27.0/private/service_contexts
index a82243ffb8..daf53f3fec 100644
--- a/alps/system/sepolicy/prebuilts/api/27.0/private/service_contexts
+++ b/alps/system/sepolicy/prebuilts/api/27.0/private/service_contexts
@@ -18,6 +18,7 @@ bluetooth_manager u:object_r:bluetooth_manager_service:s
bluetooth u:object_r:bluetooth_service:s0
broadcastradio u:object_r:broadcastradio_service:s0
carrier_config u:object_r:radio_service:s0
+xunye u:object_r:xunye_service:s0
clipboard u:object_r:clipboard_service:s0
com.android.net.IProxyService u:object_r:IProxyService_service:s0
commontime_management u:object_r:commontime_management_service:s0
diff --git a/alps/system/sepolicy/prebuilts/api/27.0/public/service.te b/alps/system/sepolicy/prebuilts/api/27.0/public/service.te
index e97b864db3..3c2895eaf2 100644
--- a/alps/system/sepolicy/prebuilts/api/27.0/public/service.te
+++ b/alps/system/sepolicy/prebuilts/api/27.0/public/service.te
@@ -45,6 +45,7 @@ type battery_service, system_server_service, service_manager_type;
type bluetooth_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type broadcastradio_service, system_server_service, service_manager_type;
type cameraproxy_service, system_server_service, service_manager_type;
+type xunye_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type clipboard_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type contexthub_service, app_api_service, system_server_service, service_manager_type;
type IProxyService_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
diff --git a/alps/system/sepolicy/prebuilts/api/28.0/private/service_contexts b/alps/system/sepolicy/prebuilts/api/28.0/private/service_contexts
index 5ec45a23ef..5e189a0581 100644
--- a/alps/system/sepolicy/prebuilts/api/28.0/private/service_contexts
+++ b/alps/system/sepolicy/prebuilts/api/28.0/private/service_contexts
@@ -19,6 +19,7 @@ bluetooth_manager u:object_r:bluetooth_manager_service:s
bluetooth u:object_r:bluetooth_service:s0
broadcastradio u:object_r:broadcastradio_service:s0
carrier_config u:object_r:radio_service:s0
+xunye u:object_r:xunye_service:s0
clipboard u:object_r:clipboard_service:s0
com.android.net.IProxyService u:object_r:IProxyService_service:s0
commontime_management u:object_r:commontime_management_service:s0
diff --git a/alps/system/sepolicy/prebuilts/api/28.0/public/service.te b/alps/system/sepolicy/prebuilts/api/28.0/public/service.te
index 3526049f25..b6548563cf 100644
--- a/alps/system/sepolicy/prebuilts/api/28.0/public/service.te
+++ b/alps/system/sepolicy/prebuilts/api/28.0/public/service.te
@@ -50,6 +50,7 @@ type binder_calls_stats_service, system_server_service, service_manager_type;
type bluetooth_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type broadcastradio_service, system_server_service, service_manager_type;
type cameraproxy_service, system_server_service, service_manager_type;
+type xunye_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type clipboard_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type contexthub_service, app_api_service, system_server_service, service_manager_type;
type crossprofileapps_service, app_api_service, system_server_service, service_manager_type;
diff --git a/alps/system/sepolicy/prebuilts/api/29.0/private/service_contexts b/alps/system/sepolicy/prebuilts/api/29.0/private/service_contexts
index 96d553bf49..69b5070ae0 100644
--- a/alps/system/sepolicy/prebuilts/api/29.0/private/service_contexts
+++ b/alps/system/sepolicy/prebuilts/api/29.0/private/service_contexts
@@ -29,6 +29,7 @@ bluetooth u:object_r:bluetooth_service:s0
broadcastradio u:object_r:broadcastradio_service:s0
bugreport u:object_r:bugreport_service:s0
carrier_config u:object_r:radio_service:s0
+xunye u:object_r:xunye_service:s0
clipboard u:object_r:clipboard_service:s0
com.android.net.IProxyService u:object_r:IProxyService_service:s0
companiondevice u:object_r:companion_device_service:s0
diff --git a/alps/system/sepolicy/prebuilts/api/29.0/public/service.te b/alps/system/sepolicy/prebuilts/api/29.0/public/service.te
index 92f8a09f74..69cc1050cb 100644
--- a/alps/system/sepolicy/prebuilts/api/29.0/public/service.te
+++ b/alps/system/sepolicy/prebuilts/api/29.0/public/service.te
@@ -58,6 +58,7 @@ type binder_calls_stats_service, system_server_service, service_manager_type;
type bluetooth_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type broadcastradio_service, system_server_service, service_manager_type;
type cameraproxy_service, system_server_service, service_manager_type;
+type xunye_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type clipboard_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type contexthub_service, app_api_service, system_server_service, service_manager_type;
type crossprofileapps_service, app_api_service, system_server_service, service_manager_type;
diff --git a/alps/system/sepolicy/private/service_contexts b/alps/system/sepolicy/private/service_contexts
index 96d553bf49..69b5070ae0 100644
--- a/alps/system/sepolicy/private/service_contexts
+++ b/alps/system/sepolicy/private/service_contexts
@@ -29,6 +29,7 @@ bluetooth u:object_r:bluetooth_service:s0
broadcastradio u:object_r:broadcastradio_service:s0
bugreport u:object_r:bugreport_service:s0
carrier_config u:object_r:radio_service:s0
+xunye u:object_r:xunye_service:s0
clipboard u:object_r:clipboard_service:s0
com.android.net.IProxyService u:object_r:IProxyService_service:s0
companiondevice u:object_r:companion_device_service:s0
diff --git a/alps/system/sepolicy/public/service.te b/alps/system/sepolicy/public/service.te
index 92f8a09f74..69cc1050cb 100644
--- a/alps/system/sepolicy/public/service.te
+++ b/alps/system/sepolicy/public/service.te
@@ -58,6 +58,7 @@ type binder_calls_stats_service, system_server_service, service_manager_type;
type bluetooth_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type broadcastradio_service, system_server_service, service_manager_type;
type cameraproxy_service, system_server_service, service_manager_type;
+type xunye_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type clipboard_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type contexthub_service, app_api_service, system_server_service, service_manager_type;
type crossprofileapps_service, app_api_service, system_server_service, service_manager_type;
总结
总的来说就这些,这个是10.0的,另外怎么打包接口出去就看自己的喜好了,
out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar 包含代码的
out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes-header.jar 这个就只有方法名, 不提供内容实现代码
如果不想要把整个framework层代码提供出去,还有一种简单的方法, 自己新建个app,打成jar包,包名和framewrok层写的一样,最后打包成一个jar包,compileOnly files(‘libs\classes.jar’) 这样使用