android P 添加自定义系统服务

2021-08-19  本文已影响0人  l900

概述

此番代码是为了添加一个客户指纹系统管理服务,并提供接口给客户应用调用指纹服务,监听指纹状态,应用来控制指纹;
由于客户指纹不是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点

上一篇下一篇

猜你喜欢

热点阅读