美文网首页
android P 添加自定义系统服务

android P 添加自定义系统服务

作者: l900 | 来源:发表于2021-08-19 09:55 被阅读0次

    概述

    此番代码是为了添加一个客户指纹系统管理服务,并提供接口给客户应用调用指纹服务,监听指纹状态,应用来控制指纹;
    由于客户指纹不是android标准指纹,没有自己的hal,要提供接口给客户应用调用,所以得添加自定义的aidl接口方式实现

    创建系统服务

    添加系统服务的https://blog.csdn.net/zhongyanghu27/article/details/86549374已经写的很完善,就不再重写了
    但是在android P上会有几点不同:

    将定义接口的 AIDL 添加到编译队列中

    .frameworks\base\Android.bp
    在 framework-base 模块中将 aidl 文件的路径添加进去,参照 bp文件中已有的添加 aidl 的写法即可。

    "core/java/com/custom/ICustomFingerPrintManager.aidl",
    

    添加string到framework

    由于本例需要在service使用到string,在P版本上修改如下:
    1.frameworks\base\core\res\res\values\strings.xml

    <string name="custom_str">custom_str</string>
    

    2.\frameworks\base\core\res\res\values\public.xml 的末尾添加申明

    <public type="string" name="custom_str"/>
    

    编译后的framework jar包

    \out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar

    如何导入到android Studio中使用

    1.把编译好的classes.jar复制到app\libs\framework.jar
    2.在项目下的build.gradle中allprojects添加:
    -Xbootclasspath/p:app/libs/framework.jar需要替换成自己的路径

    gradle.projectsEvaluated {
            tasks.withType(JavaCompile) {
                options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar')
            }
        }
    

    3.在模块的build.gradle中android下添加 multiDexEnabled true
    用来解决 编译报65535 的问题
    dependencies添加 libs/framework.jar 替换为自己的jar路径

    compileOnly files('libs/framework.jar')
    

    同时移除

    implementation fileTree(include: ['*.jar'], dir: 'libs')
    

    至此就可以在app中调用自己添加的系统服务了

    参考:

    https://blog.csdn.net/zhongyanghu27/article/details/86549374
    https://www.cnblogs.com/zhengtu2015/p/5133112.html

    谢谢!
    2021年8月19日早上11点

    相关文章

      网友评论

          本文标题:android P 添加自定义系统服务

          本文链接:https://www.haomeiwen.com/subject/lpyobltx.html