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

求助:将React Native项目转为.AAR/SDK并集成到Android项目

React Native转AAR集成Android项目:实操步骤与避坑指南

一、先改造RN Android工程为Library模块

  • 进入RN项目的android目录,修改根目录下的build.gradle:
    • 将apply plugin: "com.android.application"替换为apply plugin: "com.android.library"
    • 删除defaultConfig里的applicationId配置(Library不需要这个)
    • 把minSdkVersion、compileSdkVersion、targetSdkVersion和你要集成的宿主Android项目完全对齐,这是避免版本冲突的基础

二、解决依赖冲突(核心避坑点)

  • 强制统一依赖版本:在Library的build.gradle里添加resolutionStrategy,把所有冲突的依赖版本和宿主项目保持一致,比如:
    configurations.all {
        resolutionStrategy {
            force 'com.google.guava:guava:30.1.1-jre'
            force 'com.facebook.fresco:fresco:2.6.0'
            force 'androidx.appcompat:appcompat:1.6.1'
            // 把报错提示里的冲突依赖都加到这里
        }
    }
    
  • 排除重复依赖:如果宿主项目已经包含某些RN依赖(比如androidx库),在Library的依赖声明里排除这些组,比如:
    implementation('com.facebook.react:react-native:0.72.0') {
        exclude group: 'com.google.android.material'
        exclude group: 'androidx.appcompat'
    }
    
  • 确保RN第三方库的正确引入:所有RN原生插件(比如react-native-webview)必须在settings.gradle里添加include ':react-native-webview',并在build.gradle里用implementation project(':react-native-webview')引入,不要手动复制jar包

三、打包AAR的正确流程

  1. 清理缓存:先执行npx react-native clean,再进入android目录执行./gradlew clean,避免旧缓存干扰
  2. 打包RN资源和bundle:执行以下命令把RN的JS bundle和静态资源打包到Library的assets/res目录:
    npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
    
  3. 构建Release版AAR:在android目录执行./gradlew assembleRelease,生成的AAR文件在android/build/outputs/aar/目录下(找带release后缀的文件)

四、宿主项目集成AAR的注意事项

  • 把AAR放到宿主项目的libs目录,然后在宿主的build.gradle里配置:
    repositories {
        flatDir {
            dirs 'libs'
        }
        // 必须添加RN的maven仓库,否则可能找不到RN依赖
        maven { url "../node_modules/react-native/android" }
        maven { url "../node_modules/jsc-android/dist" }
    }
    
    dependencies {
        implementation(name: 'your-library-release', ext: 'aar')
        // 如果AAR里没有打包RN核心库,需要手动添加对应版本的依赖
        // implementation 'com.facebook.react:react-native:0.72.0'
    }
    
  • 初始化RN环境:在宿主项目的Application或启动Activity里调用AAR提供的初始化方法,示例:
    // 这是你在AAR里写的初始化类
    public class RNBridgeManager {
        private static ReactInstanceManager sReactInstanceManager;
    
        public static void init(Application app) {
            sReactInstanceManager = ReactInstanceManager.builder()
                    .setApplication(app)
                    .setBundleAssetName("index.android.bundle")
                    .setJSMainModulePath("index")
                    .addPackage(new MainReactPackage())
                    // 添加你的自定义RN Package
                    .setUseDeveloperSupport(BuildConfig.DEBUG)
                    .setInitialLifecycleState(LifecycleState.RESUMED)
                    .build();
        }
    
        public static ReactInstanceManager getReactInstanceManager() {
            return sReactInstanceManager;
        }
    }
    

五、常见报错快速修复

  • Duplicate class XXX found:用resolutionStrategy.force统一对应依赖的版本,或者排除重复的依赖组
  • Could not resolve com.facebook.react:react-native:x.x.x:检查Library和宿主的build.gradle是否添加了RN的maven仓库,确保node_modules里的RN版本正确
  • RN bundle not found:打包AAR前必须执行react-native bundle命令,确保index.android.bundle已经生成在assets目录
  • 资源冲突(比如同名drawable/string):给RN项目的资源加前缀,或者在Library的AndroidManifest.xml里添加tools:replace="android:name"处理冲突资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:43:12