5

React Native 画面が 1 つある既存の Android アプリでこのオプションを使用する-dontobfuscateと、リリース ビルドが正常に機能します。

( https://github.com/facebook/react-native/blob/master/local-cli/generator-android/templates/src/app/proguard-rulesから pro-guard の反応ネイティブ構成も設定する必要がありました。プロ

ただし、既存のアプリを難読化し、反応ネイティブの難読化のみを無視したい ( 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
...

以下の構成を試しましたが、どれも機能しません。これらは、proguard フェーズ中に警告をスローするかassembleRelease、ビルド後に、反応ネイティブ画面の最初の起動時に例外をスローします。

  1. 最初の構成試行:

    -keep class com.facebook.react.** { public protected private *; }
    
  2. 2 回目の設定試行:

    -dontwarn android.support.v7.**
    
    -keep class android.support.v7.** { *; }
    
    -keep interface android.support.v7.** { *; }
    
  3. 3 番目の構成試行:

    -keep class android.support.v7.internal.** { *; }
    
    -keep interface android.support.v7.internal.** { *; }
    
  4. 4番目の構成を試してください:

    support-v7
    
    -dontwarn android.support.v7.**
    
    -keep class 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 アプリ) をお持ちの方は、プロガードの構成を共有していただけますか?

4

2 に答える 2

4

これは、ReactNative 0.27.2 バージョンで動作させるための作業構成です。(ネイティブモジュールを処理します)。

ほとんどのサンプルと react-native init プロジェクトには、以下に示す反応ネイティブ設定があります。2 つの変更点は次のとおりです。1. dontobfuscate を削除し、2. -keep class 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.**
于 2016-07-20T15:26:21.597 に答える