首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用React Native with obfuscation的Android应用程序有没有工作的Proguard配置?

使用React Native with obfuscation的Android应用程序有没有工作的Proguard配置?
EN

Stack Overflow用户
提问于 2016-07-16 00:05:43
回答 2查看 7.4K关注 0票数 4

当我在我现有的安卓应用程序中使用-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之后,我得到了以下错误:

代码语言:javascript
复制
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原生屏幕时抛出异常。

  1. 首次配置尝试:

-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..**{ *;}

例外情况,例如:

代码语言:javascript
复制
  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配置吗?

EN

回答 2

Stack Overflow用户

发布于 2016-07-20 23:26:22

这是一个可以在ReactNative 0.27.2版本中工作的配置。(负责本机模块)。

大多数示例和react-native init项目都有react原生设置,如下所示。2.更改是- 1.删除dontobfuscate和2. -keep类com.facebook。**{ *;}

代码语言:javascript
复制
#-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.**
票数 4
EN

Stack Overflow用户

发布于 2017-03-04 17:08:15

你应该尝试Bg+ Anti Decompiler/Obfuscator它可以混淆你的项目:有效和简单(UI设置,而不是命令行配置)。它支持:

  • 隐藏字符串值(在java源代码中保留一些敏感信息时很有用,例如:"Hello world“->ߤª)
  • 使用unicode字符(文件名、主活动类、类、函数、变量等)进行混淆
  • 隐藏fakecode以捕获反编译器工具
  • 检查资源字符串(在有人试图编辑您的APK资源时很有用)

<代码>F212

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38400620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档