2016-07-15 10 views
1

既存のアンドロイドアプリで-dontobfuscateオプションを1つのReact Native画面で使用すると、リリースビルドが正常に動作します。難解なネイティブの難読化機能を備えたAndroid App用のProguardの設定

は、しかし、私は私の既存のアプリを難読化し、(https://github.com/facebook/react-native/issues/7530それがあたりとしてはサポートされていないので)のみ反応し、ネイティブの難読化を無視したい(私はまた、設定https://github.com/facebook/react-native/blob/master/local-cli/generator-android/templates/src/app/proguard-rules.proからプロガードのネイティブな構成を反応させるために持っていました)

-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のproguardフェーズ中に警告を出したり、一度構築したりすると、反応したネイティブスクリーンの最初の起動時に例外がスローされます。

  1. まずコンフィグ試してみてください。

    -keepクラスcom.facebook.react ** {公共の保護されたプライベート*; }

  2. 第二Configを試してみてください。。

    -dontwarn android.support.v7 **

    -keepクラスandroid.support.v7 ** {*; }

    -keep interface android.support.v7。** {*; }

  3. 第三に設定してみます。

    -keepクラスandroid.support.v7.internal ** {*; }

    -keep interface android.support.v7.internal。** {*; }

  4. 第四に設定してみてください。

    サポート-V7

    -dontwarn android.support.v7 **

    -keepクラスandroid.support.v7.internal ** {*。。 ; }

    -keep interface android.support.v7.internal。** {*; }

    -keep class 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) 

反応し、ネイティブでリリースAPK(既存のAndroidアプリを)作業をお持ちの方は、あなたのProGuardの設定を共有してくださいすることができますか?

+1

android.supportライブラリには、すでにproguardルールがaarファイルに含まれています。 ライブラリを追加すると、自動的にプロジェクトに追加されます。 http://tools.android.com/tech-docs/new-build-system/aar-format – ajack

+0

ありがとう@ジャック。 Incase、私はAndroid V7/V4サポートライブラリのためのproguardエントリーを含んでいません、私は異なるエラーを取得します。私は私が得るエラーで質問を更新しました。 – bschandramohan

答えて

3

ここでは、ReactNative 0.27.2バージョンで動作させるための作業設定を示します。 (ネイティブモジュールの世話をします)。

ほとんどのサンプルと反応ネイティブのinitプロジェクトの反応ネイティブ設定は以下のとおりです。 2変更点は - です。1. dontobfuscateと を削除します。2. -keep class com.facebook。** {*;効果的な&簡単に(UI設定ではなく、コマンドラインの設定):}

#-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.** 
1

あなたはそれがあなたのプロジェクトを難読化することができますBg+ Anti Decompiler/Obfuscator を試してみてください。 それはサポートしています(あなたはJavaのソースの一部の敏感な情報を保持したときに、役に立つ例:「こんにちは、世界」 - >ߤª)

  • 隠す文字列値を
  • 難読メインUnicode文字(ファイル名、と-activeクラス、クラス、関数、変数、...)
  • 隠すパッケージ名
  • 逆コンパイラツールトラップに
  • チェックリソース文字列をfakecodeを追加します(誰かがあなたのAPKのリソースを編集しようとすると便利)
+0

Neoco、Javascriptコードを作成しているReact Nativeではどのように動作しますか? – bschandramohan

+1

bschandramohan。このアプリはJavaソース専用です。 Javascriptコード用の別のバージョンアプリがあります。 – Neoco

関連する問題