当前位置: 首页 > news >正文

A13 自定义系统服务使用总结

看帖子A13自定义系统服务集成(史上最靠谱)我们集成了客制服务,接下来我们需要再应用中遇到该服务,在此,我们将集成遇到的一些问题在此做整理总结

一app层集成调用

  1. aidl文件集成,如下图,保证和系统的包名一致

ps:记得在build.gradle文件中增加aidl的编译(系统默认存在,则忽略)

android {......// 默认情况下不需要手动指定 AIDL 路径sourceSets {getByName("main") {aidl.srcDir("src/main/aidl")}}
.............

2. java中增加FlyscaleManager.java类(包名保持一致,直接将aosp中的aidl文件和java)

 

然后再业务中调用FlyscaleManager类就实现了客制服务调用

  二问题总结:

问题1:我需要增加新的方法imsi,然后编译报如下错误:

[arm]
[ 23% 40796/176369] //hardware/interfaces/bluetooth/audio/aidl:android.hardware.bluetooth.audio-V2-ndk clang-tidy-dep android/hardware/bluetooth/audio/OpusConfiguration.cpp [arm]
[ 23% 40797/176369] //hardware/interfaces/bluetooth/audio/aidl:android.hardware.bluetooth.audio-V2-ndk clang-tidy-dep android/hardware/bluetooth/audio/PcmCapabilities.cpp [arm]
[ 23% 40798/176369] //hardware/interfaces/bluetooth/audio/aidl:android.hardware.bluetooth.audio-V2-ndk clang-tidy android/hardware/bluetooth/audio/SbcCapabilities.cpp
[ 23% 40799/176369] //hardware/interfaces/bluetooth/audio/aidl:android.hardware.bluetooth.audio-V2-ndk clang++ android/hardware/bluetooth/audio/LeAudioBroadcastConfiguration.cpp [arm]
[ 23% 40800/176369] //hardware/interfaces/bluetooth/audio/aidl:android.hardware.bluetooth.audio-V2-ndk clang++ android/hardware/bluetooth/audio/SbcAllocMethod.cpp [arm]
[ 23% 40801/176369] //hardware/interfaces/bluetooth/audio/aidl:android.hardware.bluetooth.audio-V2-ndk clang-tidy-dep android/hardware/bluetooth/audio/SbcAllocMethod.cpp [arm]
[ 23% 40802/176369] //frameworks/base:api-stubs-docs-non-updatable metalava merged [common]
FAILED: out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api-stubs-docs-non-updatable-stubs.srcjar out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api-stubs-docs-non-updatable_annotations.zip out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api-stubs-docs-non-updatable_api.txt out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api-stubs-docs-non-updatable_removed.txt out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api_lint.timestamp out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/api_lint_report.txt out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/check_last_released_api.timestamp out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava/last_released_baseline.txt
out/host/linux-x86/bin/sbox --sandbox-path out/soong/.temp --output-dir out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava --manifest out/soong/.intermediates/frameworks/base/api-stubs-docs-non-updatable/android_common/metalava.sbox.textproto --write-if-changed
The failing command was run inside an sbox sandbox in temporary directory
out/soong/.temp/sbox/49a7cc33d80847891abf538139e05268e1581b41
The failing command line can be found in
out/soong/.temp/sbox/49a7cc33d80847891abf538139e05268e1581b41/sbox_command.0.bashout/srcjars/android/flyscale/IFlyscaleManager.java:141: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:142: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:10: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:14: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:50: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]Error: metalava detected the following problems:
out/srcjars/android/flyscale/IFlyscaleManager.java:141: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:142: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:10: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:14: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
out/srcjars/android/flyscale/IFlyscaleManager.java:50: error: Methods calling system APIs should rethrow `RemoteException` as `RuntimeException` (but do not list it in the throws clause) [RethrowRemoteException]
************************************************************
Your API changes are triggering API Lint warnings or errors.
To make these errors go away, fix the code according to the
error and/or warning messages above.If it is not possible to do so, there are workarounds:1. You can suppress the errors with @SuppressLint("<id>")where the <id> is given in brackets in the error message above.
2. You can add a baseline file of existing lint failuresto the build rule of api-stubs-docs-non-updatable.
************************************************************
exit status 255

解决方案:按提示,在根目录下执行以下,更新current.txt

make  api-stubs-docs-non-updatable

问题2:忽略系统对新增类的校验

aidl中的hide的作用

这个注释是让系统隐藏该类,我想提供给第三方应用调用,做如下修改:

这样发现编译异常,日志丢失,应该是系统检查策略原因,做如下修改:

 

framework/base/Android.bp下,忽略新增类的检查// TODO(b/145644363): move this to under StubLibraries.bp or ApiDocs.bp
metalava_framework_docs_args = "" +"--api-lint-ignore-prefix android.icu. " ++   "--api-lint-ignore-prefix android.flyscale. " +"--api-lint-ignore-prefix java. " +"--api-lint-ignore-prefix junit. " +"--api-lint-ignore-prefix org. " +"--error NoSettingsProvider " +"--error UnhiddenSystemApi " +"--force-convert-to-warning-nullability-annotations +*:-android.*:+android.icu.*:-dalvik.* " +"--hide BroadcastBehavior " +"--hide CallbackInterface " +"--hide DeprecationMismatch " +"--hide HiddenSuperclass " +"--hide HiddenTypeParameter " +"--hide MissingPermission " +"--hide-package android.audio.policy.configuration.V7_0 " +"--hide-package com.android.server " +"--hide RequiresPermission " +"--hide SdkConstant " +"--hide Todo " +"--hide Typo " +"--hide UnavailableSymbol " +"--manifest $(location core/res/AndroidManifest.xml) "

问题三:系统隐藏api 的的处理

在调试中发现,第三方应用无法调用客制服务,android studio logcat日志输出,异常如下:

20:30:51.148 javaprojectdemo          W  Accessing hidden method Landroid/flyscale/FlyscaleManager;->getImei()Ljava/lang/String; (blocked, linking, denied)
20:30:51.149 javaprojectdemo          W  Accessing hidden method Landroid/flyscale/FlyscaleManager;->getImsi()Ljava/lang/String; (blocked, linking, denied)
20:30:51.180 AppCompatDelegate        D  Checking for metadata for AppLocalesMetadataHolderService : Service not found
20:30:51.259 javaprojectdemo          W  Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
20:30:51.259 javaprojectdemo          W  Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
20:30:51.271 Compatibil...geReporter  D  Compat change id reported: 210923482; UID 10120; state: ENABLED
20:30:51.284 javaprojectdemo          W  Accessing hidden method Landroid/flyscale/FlyscaleManager;->getImei()Ljava/lang/String; (blocked, linking, denied)
20:30:51.284 AndroidRuntime           D  Shutting down VM
20:30:51.285 AndroidRuntime           E  FATAL EXCEPTION: mainProcess: com.example.javaprojectdemo, PID: 4337java.lang.NoSuchMethodError: No virtual method getImei()Ljava/lang/String; in class Landroid/flyscale/FlyscaleManager; or its super classes (declaration of 'android.flyscale.FlyscaleManager' appears in /system/framework/framework.jar)at com.example.javaprojectdemo.EncoderTestActivity.onCreate(EncoderTestActivity.java:30)at android.app.Activity.performCreate(Activity.java:8329)at android.app.Activity.performCreate(Activity.java:8308)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3750)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3907)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:137)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2393)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loopOnce(Looper.java:201)at android.os.Looper.loop(Looper.java:288)at android.app.ActivityThread.main(ActivityThread.java:8061)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:703)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)

我们看到有如下日志

20:30:51.148 javaprojectdemo          W  Accessing hidden method Landroid/flyscale/FlyscaleManager;->getImei()Ljava/lang/String; (blocked, linking, denied)
20:30:51.149 javaprojectdemo          W  Accessing hidden method Landroid/flyscale/FlyscaleManager;->getImsi()Ljava/lang/String; (blocked, linking, denied)
20:30:51.180 AppCompatDelegate        D  Checking for metadata for AppLocalesMetadataHolderService : Service not found
20:30:51.259 javaprojectdemo          W  Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
20:30:51.259 javaprojectdemo          W  Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
20:30:51.271 Compatibil...geReporter  D  Compat change id reported: 210923482; UID 10120; state: ENABLED
20:30:51.284 javaprojectdemo          W  Accessing hidden method Landroid/flyscale/FlyscaleManager;->getImei()Ljava/lang/String; (blocked, linking, denied)

提示方法找不到,限制,拒绝

查资料发现,aosp13默认非SDK的API是隐藏的,禁止对第三方引用,因为项目是系统级预装,

当前场景下做以下处理:

1 将应用做系统级预装(允许可卸载),使用系统签名

2 将应用增加白名单,允许调用

    应用白名单Change-Id: I7eaa2ab4e39f8a1ff3d7023a42504b2b12b0636ddiff --git a/boot/hiddenapi/hiddenapi-unsupported-packages.txt b/boot/hiddenapi/hiddenapi-unsupported-packages.txt
index 145f0c2213eb..0cec414572d3 100644
--- a/boot/hiddenapi/hiddenapi-unsupported-packages.txt
+++ b/boot/hiddenapi/hiddenapi-unsupported-packages.txt
@@ -13,3 +13,4 @@ gov.nist.javax.sip.parser.imsgov.nist.javax.sip.stackorg.ccil.cowan.tagsouporg.ccil.cowan.tagsoup.jaxp
+com.thwx.ctcht //应用包名

文件目录如下截图:

这里都是系统应用,允许调用非SDK隐藏的API,测试执行正常

讨论:至今没有找到允许第三方应用引用非SDK的API的方案,看网上资料说修改客制服务类的路径,将其移出到开发的路径中,这个开发路径未找到官方定义的位置,有解决的小伙伴欢迎留言指教~

 

http://www.xdnf.cn/news/108163.html

相关文章:

  • Kafka集群
  • ABP-Book Store Application中文讲解 - Part 0:开发环境搭建
  • 意见反馈留言二维码制作
  • leetcode-枚举
  • Langchain coercion简介
  • deeplab语义分割训练自定数据集
  • leve1.4
  • LLama Factory从入门到放弃
  • iThenticate英文查重系统怎么用?
  • 【AI论文】在非政策指导下学习推理
  • 中药企业数字化转型:从传统制造到智能制药的跨越
  • 3D模型格式转换工具HOOPS Exchange 2025.3.0更新:iOS实现Rhino格式支持!
  • TypeScript-知识点梳理
  • 艾瑞:高标准化场景AI渗透越来越高,Agent将是未来AI+HRM的最佳形态
  • 【UML建模】数据流图 绘制
  • 【论文#目标检测】Attention Is All You Need
  • sql 根据时间范围获取每日,每月,年月的模版数据
  • 高等数学第一章---函数与极限(1.3 函数的极限)
  • CF2103F Maximize Nor
  • 车载信息安全架构 --- 汽车网络安全
  • 在面试中被问到spring是什么?
  • 分糖果——牛客
  • 0基础可以考MySQL OCP么?备考时间需要多久?
  • java Nacos
  • Java基础系列-HashMap源码解析1-BST树
  • 深入剖析PHP反弹Shell:OSCP场景下的实现、原理与优化
  • 深入理解IP地址、端口号、字节序及其应用
  • 困局与破局:当传统校园能源管理遭遇“散沙式“能耗困局
  • Python图形界面编程(一)
  • HTML表格居中显示、在表格中插入音频文件、表格分行列显示