集成react-native-code-push后React Native 0.68.1打包APK报错及更新失败问题
解决React Native 0.68.1集成CodePush 8.0.2打包APK报错及更新失败问题
问题分析
打包时触发的No signature of method: java.util.ArrayList.get()错误,源于CodePush 8.x版本的Gradle脚本在读取编译SDK版本时,与RN 0.68.x的build.gradle结构适配存在问题;后续移除apply from脚本位置后能打包但无法更新,是因为CodePush的打包注入逻辑未正常生效。
具体解决方案
1. 修复codepush.gradle的SDK版本读取错误
找到node_modules/react-native-code-push/android/codepush.gradle文件,定位到报错的第6行附近:
- 原代码可能类似:
def compileSdkVersion = android.compileSdkVersion.get() - 修改为:
def compileSdkVersion = android.compileSdkVersion(直接获取版本值,无需调用无参get()) - 若项目SDK版本定义在根目录build.gradle的ext块中,也可改为:
def compileSdkVersion = project.ext.compileSdkVersion
修改后保存,重新执行打包命令。
2. 正确配置apply from的位置
不要移动apply from到其他文件,必须保留在app/build.gradle中,正确位置示例:
apply plugin: "com.android.application" apply plugin: "com.facebook.react" // 放在此处,确保在android块之前加载CodePush脚本 apply from: "../../node_modules/react-native-code-push/android/codepush.gradle" android { compileSdkVersion 31 // RN 0.68.x推荐使用31,确保此处配置正确版本 defaultConfig { targetSdkVersion 31 // 其他默认配置... } // 其他android块配置... }
同时确保app/build.gradle的android块中明确指定compileSdkVersion和targetSdkVersion,解决第二个报错。
3. 确保更新功能正常的额外检查
- 确认AndroidManifest.xml中配置了正确的CodePush部署密钥:
且strings.xml中的<meta-data android:name="com.microsoft.codepush.DeploymentKey" android:value="@string/CodePushDeploymentKey" />CodePushDeploymentKey与App Center对应环境的密钥一致。 - 确认MainApplication.java中正确初始化CodePush:
import com.microsoft.codepush.react.CodePush; @Override protected List<ReactPackage> getPackages() { List<ReactPackage> packages = new PackageList(this).getPackages(); // 添加CodePush初始化 packages.add(new CodePush(BuildConfig.CODEPUSH_KEY, getApplicationContext(), BuildConfig.DEBUG)); return packages; } - 打包时使用正确命令:
npx react-native run-android --variant=release,或直接用./gradlew assembleRelease打包。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

