2016-06-16 9 views
2

私のReactネイティブアプリケーションのリリースビルドを作成しようとしています。私はそれをコンパイルし、JSバンドルでパッケージ化することができます。デバッグモードで正常に動作します。しかし、リリースモードでアセンブルすると、最初のRNビューが表示されるとすぐにJNIによって実行時にerrorsがスローされます。リリースネイティブのネイティブランタイムエラーリリースビルドの難読化コード

私はtheseとよく似たプロガード規則を使用しています。それらは私のアプリに既に適用されているproguardのルールに加えてあります。さらに、multiDexEnabledとminifyEnabledは両方ともtrueに設定されています。私が-dontobfuscateをproguardに含めると、リリースモードでもアプリは正常に動作します。コメントアウトされると、上記のエラーが表示されます。コードの難読化はリリースの要件です。私は間違って何をしていますか?

EDIT:このGithub issueでいくつかの議論がありますが、2月と-dontobfuscateをコメントアウトに関する質問は未解答に行ったので、何も議論されていません。 2月3日に@kristjanmikによって投稿された長いスタックトレースは、まさに私が直面しているのと同じエラーです。

答えて

1

この問題は、別のサードパーティのライブラリSoLoaderに関連しているようです。

ネイティブライブラリは、難読化されたJavaクラスの静的フィールドにアクセスしようとします。それらを維持するには、この設定を試してみてください。

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

以上のルールが必要になる場合がありますので、上記のすべてを解決しない場合は、私もしようとするだろう:

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

をこれは、右のトラックに私を得ました。 2番目のルールを追加した後もまだクラッシュしていました。しかし、何らかの理由でlogcatのログがもう見えなくなりました。最後に、ルールを一般化することでそれを働かせました: '-keep class com.facebook。** {*; } '。ベストプラクティスはルールをあまり一般的にするのではなく、他のものをデバッグすることはできず、ルールを一般化することの意味を完全には理解していないと確信しています。あなたはどちらかまたは両方で光を照らすことができますか? –

+0

私は '-keep class com.facebook。** {*; } 'しかし、それは私の問題を修正しました。ありがとう@MikeOrtiz –