アプリのコードを難読化する方法
Amazonアプリストアにアプリを申請する準備ができたら、ProGuardなどのツールを使用して、アプリコードを難読化することを検討してください。コードを難読化すると、悪意のあるユーザーがアプリを逆コンパイルしても解読が困難になるよう、ソースコードとマシンコードに変更が加えられます。開発したアプリがリバースエンジニアリングされる恐れがある場合は、コードを難読化するツールを使用して、そのような脅威を軽減してください。
IAPとコード難読化
コードを難読化する際には、アプリ内課金(IAP)APIの機能に影響が生じないようにする必要があります。難読化ツールによって、com.amazon.*
名前空間のクラス(メソッド名や識別子を含む)が難読化されないようにしてください。また、アノテーションも失われないようにする必要があります。
Android StudioでGradle 3.4.0以降を使用している場合、R8コンパイラを介して最適化が実行されます(詳細については、アプリの圧縮、難読化、最適化を参照してください)。
- Android Gradleプラグインをバージョン3.6.0以降にアップグレードします。詳細については、Android Gradleプラグインのアップデートを参照してください。
-
次のProGuardルールを使用します。
-dontwarn com.amazon.** -keep class com.amazon.** {*;} -keepattributes *Annotation*
ルールの適用方法の詳細については、ProGuardを参照してください。
ProGuard
このセクションでは、ProGuardを使用してコードを難読化する方法を説明します。ProGuardは、Android SDK(およびGradle 3.4.0以前のAndroid Studio)に組み込まれているコード難読化ツールであり、ソースコードの圧縮・最適化・難読化を行うことができます。
注:IAP APIは、ProGuardのバージョン4.7以降と互換性があります。
IAP対応プロジェクトでコードの難読化を設定するには、以下の手順に従います。
- プロジェクトのbuild.propertiesファイルを編集して、ProGuardを有効にします。build.propertiesファイルがない場合は、build.propertiesと名付けた空のテキストファイルを作成してください。
以下の行をbuild.propertiesファイルに追加して、ProGuardを有効にします。
proguard.config = <proguard.cfgファイルの相対パスまたは絶対パス>
注: 構成を作成するときは、ProGuardの構成例(英語のみ)に含まれるサンプルAndroidアプリファイルをベースとしてください。
-
proguard.configファイルを編集して、アプリの難読化を構成します。
- コード内のクラスのうち、難読化から除外するクラスを指定します。ファイルに以下の行を追加してください。
-dontwarn com.amazon.** -keep class com.amazon.** {*;} -keepattributes *Annotation*
- ProGuardで実行する最適化パスの数を指定します。アプリの要件と想定される用途に応じて、最適化パスを1またはなしに設定してください。
- 最適化パスを1に指定する場合は、以下の行を追加します。
-optimizationpasses 1
-
最適化を完全にスキップする場合は、以下の行を追加します。
-dontoptimize
ベストプラクティス:少なくとも、-dontoptimize -dontobfuscateパスを実行して、アプリから一時的な依存関係を排除することをお勧めします。
- 最適化パスを1に指定する場合は、以下の行を追加します。
- 最適化に関連するフラグがほかにあれば削除し、指定した設定と競合する可能性のあるフラグも削除します。
- アプリをリリースモードでビルドします。
ProGuardはAndroidのビルドシステムに統合されているため、手動で呼び出す必要はありません。proguard.cfgファイルとbuild.propertiesファイルが上記の説明どおりに設定されていれば、アプリをリリースモードでビルドした際に、ProGuardが自動的に実行されます。