升级Salesforce Mobile SDK至11.0.1后遇编译及符号解析问题求助
解决Salesforce Mobile SDK 11.0.1升级后PackageList无法解析的问题
问题背景
升级Salesforce Mobile SDK从10.2到11.0.1版本,新建对应SDK版本的项目并引入原有依赖时,先遇到以下JSON解析错误:
java.lang.Exception: Calling [myProject/node_modules/@react-native-community/cli/build/bin.js, config] finished with an exception. Error message: groovy.json.JsonException: Unable to determine the current character, it is not a string, number, array, or object
删除build.gradle(app)和settings.gradle中的以下配置后,上述错误解决,但MainApplication.java出现新错误:Cannot resolve the symbol 'PackageList',删除重装node_modules无效。
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
解决方案
方案1:恢复自动链接配置,修复JSON解析错误
删除上述gradle配置会导致React Native自动链接脚本无法生成PackageList类,核心是修复最初的JSON解析问题:
- 检查项目根目录
package.json的语法:排查是否存在逗号遗漏、引号不匹配等JSON格式错误,这是触发groovy解析失败的常见原因。 - 直接运行CLI命令定位错误:在项目根目录终端执行
node node_modules/@react-native-community/cli/build/bin.js config,查看具体的JSON报错位置,定位到有问题的依赖配置。 - 清理缓存并重建依赖:
npx react-native clean npm install
方案2:手动创建PackageList类
若暂时无法修复自动链接的JSON问题,可手动生成PackageList:
- 在
android/app/src/main/java/[你的项目包名]/目录下新建PackageList.java文件 - 写入以下模板代码(替换包名和所需依赖包):
package com.yourprojectname; import android.app.Application; import java.util.List; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; // 导入Salesforce及其他你用到的React Native依赖包 import com.salesforce.androidsdk.reactnative.ui.RNSalesforceReactPackage; public class PackageList { public List<ReactPackage> getPackages(Application application) { return List.of( new MainReactPackage(), new RNSalesforceReactPackage() // 按需添加其他ReactPackage实现类 ); } }
- 确保
MainApplication.java中引用的PackageList路径正确,例如:
import com.yourprojectname.PackageList; public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages() { List<ReactPackage> packages = new PackageList(this).getPackages(); // 可在此添加自定义包 return packages; } @Override protected String getJSMainModuleName() { return "index"; } }; // 其余代码保持不变 }
方案3:检查Salesforce SDK集成配置
确认项目符合Salesforce Mobile SDK 11.0.1的集成要求:
- 根目录
build.gradle中配置正确的仓库:
allprojects { repositories { // 其他已有仓库 maven { url 'https://salesforcemobiletools.jfrog.io/artifactory/repo' } } }
- app模块
build.gradle中依赖版本正确:
dependencies { // 其他依赖 implementation 'com.salesforce.mobilesdk:react-native:11.0.1' }
内容的提问来源于stack exchange,提问作者Shivam Jaiswal
相关产品推荐
相关产品推荐

