androidQ集成非SDK方案

葛修真
2023-12-01

前言

最近有个需求需要定制系统级别的SDK架包,应用能够像访问framework.jar一样,只参与编译,不参与打包,但google从andorid 9开始对应用能使用的非 SDK 接口实施了限制,到android 10 后直接拒绝访问。故此有以下方案。

方案是否会影响CTS认证不确定,没有试过

关于android 10 集成非SDK方案如下

主要是把customapi以java_sdk_library的方式集成到系统里面

然后在把需要集成调用customapi架包的第三方非系统签名应用设置相应的白名单

第三方开发引用架包

第三方非系统签名需要以这种方式加入架包,在build.gradle添加 compileOnly files(‘libs/customapi.jar’) —此架包由客户提供,不是android原生系统编译生成出来的架包。

还需要在AndroidManifest.xml 的application标签内部 增加

<uses-library
            android:name="com.xxx.api"
            android:required="true" />

从系统集成的方面考虑修改方案如下:

1 build/target/product/aosp_x86_64.mk(增加customapi接口架包和两个test应用的编译链接)

PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
    system/etc/permissions/com.xxx.api.xml \
    system/framework/com.xxx.api.jar \
    system/app/TestCustomApi/TestCustomApi.apk \
    vendor/app/TestCustomApi/TestCustomApi2.apk \
PRODUCT_PACKAGES += \
    com.xxx.api \
    TestCustomApi \
    TestCustomApi2 \
PRODUCT_BOOT_JARS += \
    com.xxx.api \

2 build/tasks/check_boot_jars/package_whitelist.txt (增加boot jars的白名单)

# Packages used for customapi
com\.xxx\.api
com\.xxx\.api\..*

​3 packages/apps/Hsae_Apps/CustomApi​/Android.bp (编译customapi的bp脚本,相关接口代码让入src目录)

java_sdk_library {
    name: "com.xxx.api",
    srcs: ["src/**/*.java"],
    api_packages: ["com.xxx.api"],
}

4 frameworks/base/data/etc/hiddenapi-package-whitelist.xml (给两个test应用增加白名单权限)

  <hidden-api-whitelisted-app package="com.example.testcustomapi" />
  <hidden-api-whitelisted-app package="com.example.testcustomapi2" />

5 packages/apps/ThirdParty/TestCustomApi/Android.mk​ (同级目录放入对应的apk文件)

LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestCustomApi
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES := TestCustomApi.apk
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
include $(BUILD_PREBUILT)

6 vendor/ThirdParty/TestCustomApi2/Android.mk​(同级目录放入对应的apk文件)

LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestCustomApi2
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES := TestCustomApi2.apk
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/app
include $(BUILD_PREBUILT)

PS: 如果单纯的想调试,可以直接使用如下命令来调试,无需集成添加白名单工作,但此方案仅用于debug调试。

 adb shell settings put global hidden_api_policy  1​
 类似资料: