React Native集成Branch.io后Android端启动崩溃问题排查
解决React Native集成Branch.io Android启动崩溃问题
问题背景
React Native项目集成Branch.io实现深度链接功能,iOS平台运行正常,但Android端集成SDK后应用启动直接崩溃。
错误日志
Process: com.mypkg, PID: 19133 java.lang.RuntimeException: Unable to create application com.mypkg.MainApplication: android.content.res.Resources$NotFoundException: String resource ID #0x0 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7110) at android.app.ActivityThread.access$1800(ActivityThread.java:259) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2208) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:344) at android.app.ActivityThread.main(ActivityThread.java:8249) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:589) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1071) Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 at android.content.res.Resources.getText(Resources.java:463) at android.content.res.Resources.getString(Resources.java:556) at io.branch.referral.BranchUtil.readBranchKey(BranchUtil.java:113) at io.branch.referral.Branch.getAutoInstance(Branch.java:385) at io.branch.rnbranch.RNBranchModule.getAutoInstance(RNBranchModule.java:106) at com.mypkg.MainApplication.onCreate(MainApplication.kt:38) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1225) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7103)
解决方案
1. 修正BranchKey配置位置
Branch SDK要求io.branch.sdk.BranchKey等元数据必须放在<application>标签下,而非<activity>标签内。修改AndroidManifest.xml:
<application android:name=".MainApplication" ...> <!-- 其他原有meta-data --> <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> <!-- 移动Branch相关配置到此处 --> <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_test" /> <meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test" /> <meta-data android:name="io.branch.sdk.TestMode" android:value="false" /> <activity android:name=".MainActivity" ...> <!-- 保留原有intent-filter配置 --> </activity> </application>
2. 确认BranchKey有效性
- 替换
key_test为Branch控制台获取的真实测试密钥,禁止使用占位符 - 若
TestMode设为false,需替换为正式环境BranchKey;若使用测试密钥,将TestMode改为true
3. 调整初始化顺序
将Branch初始化代码移到SoLoader.init之后,避免加载顺序冲突:
override fun onCreate() { super.onCreate() SoLoader.init(this, false) RNBranchModule.getAutoInstance(this) // 移至SoLoader初始化之后 if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { load() } RNBranchModule.enableLogging(); ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) }
4. 检查依赖版本兼容性
确认io.branch.sdk.android:library:5.8.0与当前React Native版本兼容,若存在冲突,尝试升级或降级Branch SDK至react-native-branch官方推荐的对应版本。
内容的提问来源于stack exchange,提问作者user17793928
相关产品推荐
相关产品推荐

