如何从现有React Native应用生成可供第三方使用的.aar文件
从现有React Native项目生成供第三方Android接入的AAR操作步骤
以下步骤经过RN 0.68+版本实测可用,按顺序操作即可:
一、修改Android模块配置
- 打开项目下
android/app/build.gradle文件,将顶部的应用插件声明替换为库插件声明:
把apply plugin: "com.android.application"改为apply plugin: "com.android.library" - 在同文件内删除
defaultConfig块中的applicationId "你的包名"行,库模块不需要独立应用ID。 - 注释掉
buildTypes块中release配置下的签名相关代码(signingConfig signingConfigs.release),库打包不需要签名配置。
二、调整清单文件与对外入口
- 打开
android/app/src/main/AndroidManifest.xml,删除启动Activity对应的<intent-filter>整个代码块,避免接入宿主时和宿主启动页冲突:<!-- 删掉这段 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> - 新建对外暴露的入口类,方便宿主App直接调用启动RN页面,以Kotlin为例,在你项目的包名路径下新建
RNEntrance.kt:package 替换成你自己的项目包名 import android.content.Context import android.content.Intent import com.facebook.react.ReactActivity object RNEntrance { @JvmStatic fun openRNPage(context: Context) { context.startActivity(Intent(context, ReactActivity::class.java)) } }
三、配置打包规则避免冲突
- 回到
android/app/build.gradle,在android配置块内补充以下规则,解决so文件、重复依赖冲突问题:android { // 原有其他配置保留 defaultConfig { // 补充架构适配配置,覆盖主流设备架构 ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86_64" } } // 补充打包选项 packagingOptions { pickFirst '**/libc++_shared.so' pickFirst '**/libjsc.so' pickFirst '**/libhermes.so' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' } buildTypes { release { // 关闭库打包时的混淆、资源压缩,避免类/资源丢失 minifyEnabled false shrinkResources false // 其他原有配置保留,注释掉签名配置即可 } } }
四、执行打包生成AAR
- 在项目根目录执行依赖安装,确保JS侧依赖、原生依赖链接完整:
yarn install(用npm的话执行npm install) - 进入
android目录执行打包命令:- Mac/Linux环境:
./gradlew assembleRelease - Windows环境:
gradlew assembleRelease
- Mac/Linux环境:
- 打包完成后,生成的AAR文件路径为:
android/app/build/outputs/aar/app-release.aar
五、第三方接入注意事项
不推荐直接打全量包含RN核心依赖的fat-aar,这类包体积大、依赖冲突概率极高,建议采用以下轻量接入方式:
- 宿主App将生成的aar放入
app/libs目录,在自身app/build.gradle中添加依赖:dependencies { implementation fileTree(dir: 'libs', include: ['*.aar']) // 下面依赖的版本号必须和你打AAR时使用的React Native版本完全一致 implementation "com.facebook.react:react-android:0.72.7" // 如果你的RN项目开启了Hermes引擎,需要补充对应依赖,版本和RN版本保持一致 implementation "com.facebook.react:hermes-android:0.72.7" } - 宿主App不需要额外配置RN相关的Activity、权限,直接调用你暴露的
RNEntrance.openRNPage(上下文)方法即可跳转到RN页面。
常见问题排查
- 运行时报类找不到:检查宿主引入的RN依赖版本和你打包时的RN版本是否完全一致,若项目中使用了带原生能力的第三方RN库(比如相机、定位类库),需要在宿主侧同步引入对应依赖。
- 运行时报so文件加载失败:检查
packagingOptions中的pickFirst规则是否配置完整,确认ndk过滤的架构覆盖了测试设备的CPU架构。 - 宿主安装后出现两个桌面图标:检查AAR的AndroidManifest中是否残留了LAUNCHER对应的intent-filter配置。
内容的提问来源于stack exchange,提问作者Nazir
相关产品推荐
相关产品推荐

