android - React Native 应用程序在发布版本中混淆代码时出现 native 运行时错误

标签 android react-native proguard

我正在尝试创建我的 React Native 应用程序的发布版本。我可以编译它并将其与 JS 包一起打包。它在 Debug模式下工作正常。但是,当我在 Release模式下组装时,我得到这些 errors一旦显示第一个 RN View ,就会在运行时由 JNI 抛出。

我使用的 proguard 规则与 these 非常相似。它们是对已应用于我的应用程序的 proguard 规则的补充。另外,multiDexEnabled 和 minifyEnabled 都设置为 true。当我在 proguard 中包含 -dontobfuscate 时,应用程序工作正常,即使在 Release模式下也是如此。当它被注释掉时,我收到上面的错误。代码混淆是发布的要求。我做错了什么?

编辑:Github issue中有一些讨论,但自 2 月份以来就没有任何讨论,并且有关注释 -dontobfuscate 的问题也没有得到解答。 @kristjanmik 在 2 月 3 日发布的长堆栈跟踪与我遇到的错误完全相同。

最佳答案

该问题似乎与另一个第 3 方库有关:SoLoader。

native 库尝试访问 Java 类中已被混淆的静态字段。为了留住他们,请尝试以下配置:

-keepclassmembers class com.facebook.soloader.SoLoader {
   static <fields>;
}

可能需要更多规则,所以如果上述方法不能解决所有问题,我也会尝试:

-keep class com.facebook.soloader.** { *; }

关于android - React Native 应用程序在发布版本中混淆代码时出现 native 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870948/

相关文章:

android - 混淆器 :Exclude library project in Android

Android,在应用程序的漏洞中,唤醒锁是否处于 Activity 状态?

Android Studio 使我的测试模块依赖于应用程序模块

javascript - React Native Debugger 状态未定义

react-native - native react - 具有百分比值的 paddingTop 不起作用

javascript - 如何防止两个react-native Picker相互影响?

java - android 在 onClick 之后在新 Activity 中访问 EditText 数据

android - 第一次设置 VISIBLE 后 RecyclerView 的内容不可见。 (此代码适用于 v4-25.0.1)

android - 获取 MultiDex 错误,即使在设置 Min SDK 21 之后

android - ADT R22 - Proguard - 找不到引用的类