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