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’) 这样使用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuyewen288

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值