Framework中新增Java service

1、  新建ITouchShService.aidl

(frameworks\base\core\java\android\os)

 

2、  新建TouchShService.java

(frameworks\base\services\core\java\com\android\server)

public class TouchShService extends ITouchShService.Stub

 

3、  新建TouchShManager.java

(frameworks\base\core\java\android\os)

    /**

     * get singleton

     *@hide

     */

    public static TouchShManager getInstance() {

        if (mInstance == null) {

            mInstance = new TouchShManager();

        }

        return mInstance;

    }

 

    public TouchShManager() {

        IBinder b = ServiceManager.getService(Context.TOUCHSH_SERVICE);

        if (b != null) {

            mService = ITouchShService.Stub.asInterface(b);

            Log.d(TAG, "TouchShManager: init mService");

        }

    }

 

4、  在Context.java中给新建的service写别名,方便引用

    /* BEGIN: Added by test, 2016/8/26 */

    /**

     *sharpnow touch service

     *@hide

     */

    public static final String TOUCHSH_SERVICE = "touchsh";

5、  SystemServiceRegistry.java中在static中注册service

        /* BEGIN: Added by test, 2016/8/26  add TouchSHservice */

        registerService(Context.TOUCHSH_SERVICE, TouchShManager.class,

                new CachedServiceFetcher<TouchShManager>() {

                    @Override

                    public TouchShManager createService(ContextImpl ctx) {

                        Log.d(TAG,"register TouchShManager success !");

                        return TouchShManager.getInstance();

                    }});

 

6、  在SystemServer.java中的 startOtherServices() 函数中将新建的servie添加到servicemanager中

        /* BEGIN: Added by test, 2016/8/26   add touchShService to service manager*/

        try {

            Slog.i(TAG, "touchShService");

            touchShService = new touchShService(mSystemContext);

            ServiceManager.addService(Context.TOUCHSH_SERVICE, touchShService);

        } catch (RuntimeException e) {

            Slog.e(TAG, "Starting touchShService exception ", e);

        }

 

7、  编译烧录验证

 

 

 

编译报错

a)      checkpublicapi-current-timestamp,make update-api

b)      给新增的类和函数添加@hide防止java doc生成时报错

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新增自定义的framework框架层,可以按照以下步骤进行: 1. 创建自定义framework层的代码 在AOSP源码的framework目录下创建自定义模块的代码目录,例如创建一个名为myframework的模块,可以在framework目录下执行以下命令: ``` mkdir myframework ``` 在myframework目录下创建自定义的Java代码和native代码。 2. 添加Android.mk文件 在myframework目录下创建Android.mk文件,指定要编译的Java和native代码。例如,Android.mk文件可以包含以下内容: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := myframework LOCAL_SRC_FILES := \ MyJavaClass.java \ MyCFile.c LOCAL_STATIC_LIBRARIES := libcutils liblog include $(BUILD_STATIC_JAVA_LIBRARY) include $(BUILD_SHARED_LIBRARY) ``` 其,LOCAL_MODULE指定了模块的名称,LOCAL_SRC_FILES指定了要编译的Java和native代码文件,LOCAL_STATIC_LIBRARIES指定了需要链接的静态库。 3. 修改build/core/main.mk 在AOSP源码的build/core/main.mk文件添加以下内容: ``` # Add myframework to the build ifeq ($(TARGET_BUILD_APPS),) $(error TARGET_BUILD_APPS must be set) endif ifeq ($(filter myframework,$(TARGET_BUILD_APPS)),myframework) $(call add-subdir-if-exists,frameworks/myframework) endif ``` 这样,编译系统就会将myframework模块添加到编译列表。 4. 编译自定义framework 执行以下命令编译自定义framework: ``` make myframework ``` 编译完成后,会在out/target/common/obj/JAVA_LIBRARIES和out/target/product/<product>/system/framework目录下生成myframework.jar和service.jar文件,以及myframework.so和service.so库文件。 以上就是新增自定义framework框架层的步骤。需要注意的是,在修改AOSP源码时,应该遵循AOSP的开发规范,并在保证代码正确性的前提下进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值