You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP预安装应用如何将外部AAR/JAR作为共享库引入

AOSP 预编译AAR作为共享库接入方案

你之前遇到的两类报错核心原因都是配置逻辑错误:

  • 把AAR直接配成LOCAL_PREBUILT_JAVA_LIBRARIES报dex2oat找不到dex,是因为普通Java库预编译规则默认处理纯jar包,不会自动解包AAR提取dex、资源、清单文件,直接把原AAR丢到系统框架目录,dex2oat自然找不到可优化的dex内容。
  • 改引用为LOCAL_JAVA_LIBRARIES后运行报NoClassDefFoundError,是因为预编译的AAR没有被正确注册为系统共享库,应用启动时系统不会把这个库加入应用的类查找路径。

具体配置步骤

1. 重写AAR的预编译规则

删掉原来写的LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += aar-release:libs/aar-release.aar和对应的BUILD_MULTI_PREBUILT块,替换为如下配置:

include $(CLEAR_VARS)
LOCAL_MODULE := aar-release
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_SRC_FILES := libs/aar-release.aar
LOCAL_UNINSTALLABLE_MODULE := true
LOCAL_BUILT_MODULE_STEM := classes.jar
# 必须开启AAPT2,处理AAR自带的资源、清单文件
LOCAL_USE_AAPT2 := true
LOCAL_DEX_PREOPT := true
# 如果AAR自带JNI库,按架构取消对应注释,配置so路径
# LOCAL_PREBUILT_JNI_LIBS_arm := libs/armeabi-v7a/*.so
# LOCAL_PREBUILT_JNI_LIBS_arm64 := libs/arm64-v8a/*.so
include $(BUILD_PREBUILT)

这个配置会告诉构建系统把AAR作为系统级共享Java库处理,自动解包提取dex、资源,生成符合dex2oat要求的输出文件,不会再报找不到dex的错误。

2. 修改应用模块的引用配置

在你的应用模块配置块里做如下调整:

  • 删除原有的LOCAL_STATIC_JAVA_LIBRARIES += aar-release行
  • 在LOCAL_JAVA_LIBRARIES列表中加入aar-release,注意你原有LOCAL_JAVA_LIBRARIES行末尾的反斜杠不要漏写,避免截断配置
    LOCAL_JAVA_LIBRARIES += aar-release
    

3. 注册系统共享库白名单

放到/system/framework下的库需要加入系统权限白名单,才能被应用正常加载:

  1. 新建权限配置xml文件,内容如下,其中class字段填你报错中找不到的Runtime类的完整包名路径:
    <?xml version="1.0" encoding="utf-8"?>
    <permissions>
        <library name="aar-release"
                file="/system/framework/aar-release.aar"
                class="com.your.aar.package.Runtime"/>
    </permissions>
    
  2. 在你产品对应的产品配置mk文件(一般是对应机型的<product>.mk)中,把AAR模块和权限配置加入编译列表:
    PRODUCT_PACKAGES += aar-release
    PRODUCT_COPY_FILES += <你存放权限xml的本地路径>:system/etc/permissions/aar-release.xml
    

排查要点

  • 刷入编译后的镜像后,先通过adb shell检查/system/framework/下是否存在aar-release.aar,/system/etc/permissions/下是否存在对应的权限配置文件,避免拷贝失败导致的加载问题
  • 如果AAR带自定义资源,必须确保预编译阶段开启AAPT2,否则资源ID会和系统资源表不匹配,运行时会报资源找不到错误
  • 作为共享库的AAR不要开启代码混淆,否则类名、方法名被混淆后会和应用编译时的引用符号不匹配,依旧会报类找不到错误

Android.mk 官方文档查询渠道

不存在和Soong(Android.bp)在线文档形式完全一致的独立托管Android.mk官方文档,所有配置字段的权威说明都在AOSP源码内:

  • 核心配置定义:路径为build/make/core/,clear_vars.mk文件中列出了所有支持的LOCAL_*变量及默认值,package.mk、java_library.mk等文件对应了应用、Java库等不同模块的构建规则、变量生效逻辑。
  • 语法说明文档:AOSP源码docs/目录下留存了完整的Android.mk语法、配置项说明,本地同步AOSP源码后,在源码根目录执行make doc-comment-check-docs即可生成本地可浏览的完整构建文档,覆盖所有配置字段的用途、取值要求。

内容的提问来源于stack exchange,提问作者abirusabil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 09:18:27