2017-11-15 8 views
0

React NativeのAndroidアプリで本番環境のJavaScriptランタイムの問題にぶつかっていますが、コンポーネント名がランダムな文字に再設定されているため、デバッグに苦労しています(場合によっては「不明」)。生産中:React Native Android:プロダクションでコンポーネント名が削除されましたか?

com.facebook.react.common.JavascriptException: TypeError: undefined is not an object (evaluating 's.profileType.toLowerCase') 
This error is located at: 
in t 
in InjectIntl(t) 
in Apollo(InjectIntl(t)) 
in Apollo(Apollo(InjectIntl(t))) 
in Apollo(Apollo(Apollo(InjectIntl(t)))) 
in Apollo(Apollo(Apollo(Apollo(InjectIntl(t))))) 
in Connect(Apollo(Apollo(Apollo(Apollo(InjectIntl(t)))))) 
in t 
in RCTView 
in RCTView 
in RCTView 
in n 
in t 
in n 

これらのエラーを追跡できるように、クラス/コンポーネント名を保存する方法はありますか?

答えて

0

これは、ProguardというAndroidツールのために発生します。

リリースビルドではクラスを難読化しているため、ハッカーがクラスの動作を把握することは難しく、悪用する方法もありません。

あなたができることは2つあります:
1)リリースビルドでProguardを完全に無効にします。
2)Proguardにどのクラスを難読化するのかを指示する正しい "Proguard rules"を設定しますが、残りの部分は難読化します。

Nr1ははるかに簡単で、googleは「プロガードをネイティブにする」と答えているので、回答が見つかります。
Nr 2ははるかに最適なオプションです。このようにしても、コードの大半は保護され、特定の要素のみが難読化されないようにすることができます。これにはさらに多くの作業と、Proguardの仕組みに関する知識が必要です。このラウンドを終了したい場合は、 "proguard rules javascript react native"と尋ねてみてください。

関連する問題