亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Android Framework添加自定義系統服務

2024-06-21 09:38:22
86
0

安(an)卓原生框架(jia)層代碼位于frameworks目錄下,在(zai)這里基于vendor目錄下的ctyun-framework添(tian)加一個自定義(yi)的系統服務,并在(zai)system server中進行啟動。以ApplicationAccessManagerService為例。

1.添加自定義服務。

一個系統服務(wu)需(xu)要(yao)包含(han)manager類和(he)service實現,通過aidl進行通信。首先新(xin)建以下三個文件(jian)定義接口功(gong)能。

1.1 IApplicationAccessManager.aidl

在/vendor/ctyun/source/frameworks/core/java/android/app/下添加aidl文件,定義API。

IApplicationAccessManager.aidl    
interface IApplicationAccessManager {

    // add your method here
}

1.2 ApplicationAccessManager.java

在/vendor/ctyun/source/frameworks/core/java/android/app/下添加manager文件(jian),實現(xian)第三(san)方調用接口。

ApplicationAccessManager
public class ApplicationAccessManager {

    Context mContext;
    IApplicationAccessManager mApplicationAccessManagerService;

    public ApplicationAccessManager(Context context, IApplicationAccessManager aam) {
        mContext = context;
        mApplicationAccessManagerService = aam;
    }

	//......
}

1.3 ApplicationAccessManagerService.java

在/vendor/ctyun/source/frameworks/services/core/java/com/android/server/下添加(jia)service文(wen)件,實現(xian)服(fu)務端邏輯(ji)。

ApplicationAccessManagerService  
public class ApplicationAccessManagerService extends IApplicationAccessManager.Stub {
    private static final String TAG = "ApplicationAccessManagerService";

    public ApplicationAccessManagerService(Context context){
        //.....
    }

    //@Override
	//......
}

2. 修改Android.bp,聲明新增的aidl

在/vendor/ctyun/source/frameworks/Android.bp中聲明新增(zeng)aidl編(bian)譯,這(zhe)樣編(bian)譯時才會(hui)生(sheng)成IApplicationAccessManager類。

Android.bp    
java_library {
    name: "ctyun-framework",

    srcs: [
		......       
       "core/java/android/app/IApplicationAccessManager.aidl",   
        ......
	],
	......
}

3. 聲明service name

在/vendor/ctyun/source/frameworks/core/java/android/content/ContextExternal.java中聲(sheng)明系統服務的service name。

ContextExternal    
public static final String APP_ACCESS_SERVICE = "app_access";

4. 注冊service

在(zai)/vendor/ctyun/source/frameworks/services/core/java/com/android/server/SystemServerExternal的(de)startExternalServices()方(fang)法中注冊服務,開機自啟(qi)動(dong)。

SystemServerExternal    
private void startApplicationAccessManagerService() {
    try {
        ServiceManager.addService(ContextExternal.APP_ACCESS_SERVICE, new ApplicationAccessManagerService(mSystemContext));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

5. 注冊manager

在/vendor/ctyun/source/frameworks/core/java/android/app/ExternalSystemServiceManager中注冊自定義的manager,綁定service name和manager實例。

ExternalSystemServiceManager
registerExternalService(ContextExternal.APP_ACCESS_SERVICE, ApplicationAccessManager.class,
    new ExternalCachedServiceFetcher<ApplicationAccessManager>() {
        @Override
        public ApplicationAccessManager createService(Context ctx) throws ServiceManager.ServiceNotFoundException {
            IBinder b = ServiceManager.getServiceOrThrow(ContextExternal.APP_ACCESS_SERVICE);
            IApplicationAccessManager service = IApplicationAccessManager.Stub.asInterface(b);
            return new ApplicationAccessManager(ctx, service);
        }});

 

0條評論
0 / 1000
胡****杰
1文(wen)章數
0粉絲(si)數
胡****杰
1 文章 | 0 粉絲(si)
胡****杰
1文(wen)章數(shu)
0粉(fen)絲數
胡****杰
1 文章 | 0 粉絲
原創(chuang)

Android Framework添加自定義系統服務

2024-06-21 09:38:22
86
0

安(an)卓原生框架(jia)層代碼位于(yu)frameworks目(mu)錄(lu)下,在(zai)這里基于(yu)vendor目(mu)錄(lu)下的(de)ctyun-framework添加(jia)一個自定義的(de)系統服務(wu),并在(zai)system server中進行啟動。以ApplicationAccessManagerService為例。

1.添加自定義服務。

一(yi)個系統服務需要包(bao)含manager類(lei)和service實現,通(tong)過aidl進行(xing)通(tong)信。首先新建以下三個文件定義接口功(gong)能。

1.1 IApplicationAccessManager.aidl

在/vendor/ctyun/source/frameworks/core/java/android/app/下添加aidl文件,定(ding)義API。

IApplicationAccessManager.aidl    
interface IApplicationAccessManager {

    // add your method here
}

1.2 ApplicationAccessManager.java

在/vendor/ctyun/source/frameworks/core/java/android/app/下添加manager文件,實現(xian)第三方調用接口。

ApplicationAccessManager
public class ApplicationAccessManager {

    Context mContext;
    IApplicationAccessManager mApplicationAccessManagerService;

    public ApplicationAccessManager(Context context, IApplicationAccessManager aam) {
        mContext = context;
        mApplicationAccessManagerService = aam;
    }

	//......
}

1.3 ApplicationAccessManagerService.java

在/vendor/ctyun/source/frameworks/services/core/java/com/android/server/下添加service文件,實現(xian)服務端邏輯。

ApplicationAccessManagerService  
public class ApplicationAccessManagerService extends IApplicationAccessManager.Stub {
    private static final String TAG = "ApplicationAccessManagerService";

    public ApplicationAccessManagerService(Context context){
        //.....
    }

    //@Override
	//......
}

2. 修改Android.bp,聲明新增的aidl

在(zai)/vendor/ctyun/source/frameworks/Android.bp中(zhong)聲明新(xin)增(zeng)aidl編譯,這樣編譯時才會生成IApplicationAccessManager類。

Android.bp    
java_library {
    name: "ctyun-framework",

    srcs: [
		......       
       "core/java/android/app/IApplicationAccessManager.aidl",   
        ......
	],
	......
}

3. 聲明service name

在/vendor/ctyun/source/frameworks/core/java/android/content/ContextExternal.java中聲明(ming)系統服務的service name。

ContextExternal    
public static final String APP_ACCESS_SERVICE = "app_access";

4. 注冊service

在/vendor/ctyun/source/frameworks/services/core/java/com/android/server/SystemServerExternal的startExternalServices()方(fang)法中注冊服(fu)務,開機自啟(qi)動。

SystemServerExternal    
private void startApplicationAccessManagerService() {
    try {
        ServiceManager.addService(ContextExternal.APP_ACCESS_SERVICE, new ApplicationAccessManagerService(mSystemContext));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

5. 注冊manager

在/vendor/ctyun/source/frameworks/core/java/android/app/ExternalSystemServiceManager中注冊自定(ding)義的manager,綁定(ding)service name和(he)manager實例。

ExternalSystemServiceManager
registerExternalService(ContextExternal.APP_ACCESS_SERVICE, ApplicationAccessManager.class,
    new ExternalCachedServiceFetcher<ApplicationAccessManager>() {
        @Override
        public ApplicationAccessManager createService(Context ctx) throws ServiceManager.ServiceNotFoundException {
            IBinder b = ServiceManager.getServiceOrThrow(ContextExternal.APP_ACCESS_SERVICE);
            IApplicationAccessManager service = IApplicationAccessManager.Stub.asInterface(b);
            return new ApplicationAccessManager(ctx, service);
        }});

 

文章來自個人專欄
文章 | 訂閱(yue)
0條評論
0 / 1000
請輸入你的評論
0
0