当我在我现有的安卓应用程序中使用-dontobfuscate
选项时,只有一个React Native屏幕,release build工作得很好。
(我还必须从https://github.com/facebook/react-native/blob/master/local-cli/generator-android/templates/src/app/proguard-rules.pro为pro-guard设置react原生配置)
但是,我想混淆我现有的应用程序,只忽略react-native混淆(因为它不支持per:https://github.com/facebook/react-native/issues/7530)
在注释掉-dontobfuscate
之后,我得到了以下错误:
Warning: com.facebook.react.views.recyclerview.NotAnimatedItemAnimator: can't find referenced method 'void dispatchRemoveStarting(android.support.v7.widget.RecyclerView$ViewHolder)' in program class com.facebook.react.views.recyclerview.NotAnimatedItemAnimator
Warning: com.facebook.react.views.recyclerview.NotAnimatedItemAnimator: can't find referenced method 'void dispatchRemoveFinished(android.support.v7.widget.RecyclerView$ViewHolder)' in program class com.facebook.react.views.recyclerview.NotAnimatedItemAnimator
...
我尝试了下面的配置,它们都不起作用。它们要么在assembleRelease
的前卫阶段抛出警告,要么一旦构建,在第一次启动react原生屏幕时抛出异常。
-keep类com.facebook.react。**{公有保护私有*;}
-dontwarn android.support.v7..** -keep类android.support.v7..**{ *;} -keep接口android.support.v7..**{ *;}
-keep类android.support.v7.intral.**{ *;} -keep接口android.support.v7.inter.**{ *;}
支持-v7 -dontwarn android.support.v7.** -keep类android.support.v7.intral.**{ *;} -keep接口android.support.v7.intral.**{ *;} -keep类android.support.v7..**{ *;}
例外情况,例如:
Caused by: java.lang.IllegalAccessError: Method 'void android.support.v4.net.ConnectivityManagerCompat.<init>()' is inaccessible to class 'com.facebook.react.modules.netinfo.NetInfoModule' (declaration of 'com.facebook.react.modules.netinfo.NetInfoModule' appears in /data/app/com.sampleapp-1/base.apk)
at com.facebook.react.modules.netinfo.NetInfoModule.<init>(NetInfoModule.java:55)
任何使用react-native的工作版本apk (现有的android应用程序)的人,你能分享一下你的proguard配置吗?
发布于 2016-07-20 23:26:22
这是一个可以在ReactNative 0.27.2版本中工作的配置。(负责本机模块)。
大多数示例和react-native init项目都有react原生设置,如下所示。2.更改是- 1.删除dontobfuscate和2. -keep类com.facebook。**{ *;}
#-dontobfuscate
# React Native
# Keep our interfaces so they can be used by other ProGuard rules.
# See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.proguard.annotations.DoNotStrip *;
@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
void set*(***);
*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
-keep class com.facebook.** { *; }
-dontwarn com.facebook.react.**
# okhttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
发布于 2017-03-04 17:08:15
你应该尝试Bg+ Anti Decompiler/Obfuscator它可以混淆你的项目:有效和简单(UI设置,而不是命令行配置)。它支持:
<代码>F212
https://stackoverflow.com/questions/38400620
复制相似问题