開発者コンソール

アプリのコードを難読化する方法

アプリのコードを難読化する方法

Amazonアプリストアにアプリを申請する準備ができたら、ProGuardなどのツールを使用して、アプリコードを難読化することを検討してください。コードを難読化すると、悪意のあるユーザーがアプリを逆コンパイルしても解読が困難になるよう、ソースコードとマシンコードに変更が加えられます。開発したアプリがリバースエンジニアリングされる恐れがある場合は、コードを難読化するツールを使用して、そのような脅威を軽減してください。

IAPとコード難読化

コードを難読化する際には、アプリ内課金(IAP)APIの機能に影響が生じないようにする必要があります。難読化ツールによって、com.amazon.*名前空間のクラス(メソッド名や識別子を含む)が難読化されないようにしてください。また、アノテーションも失われないようにする必要があります。

Android StudioでGradle 3.4.0以降を使用している場合、R8コンパイラを介して最適化が実行されます(詳細については、アプリの圧縮、難読化、最適化を参照してください)。

  1. Android Gradleプラグインをバージョン3.6.0以降にアップグレードします。詳細については、Android Gradleプラグインのアップデートを参照してください。
  2. 次の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対応プロジェクトでコードの難読化を設定するには、以下の手順に従います。

  1. プロジェクトのbuild.propertiesファイルを編集して、ProGuardを有効にします。build.propertiesファイルがない場合は、build.propertiesと名付けた空のテキストファイルを作成してください。

以下の行をbuild.propertiesファイルに追加して、ProGuardを有効にします。

proguard.config = <proguard.cfgファイルの相対パスまたは絶対パス>

注: 構成を作成するときは、ProGuardの構成例(英語のみ)に含まれるサンプルAndroidアプリファイルをベースとしてください。

  1. proguard.configファイルを編集して、アプリの難読化を構成します。

  2. コード内のクラスのうち、難読化から除外するクラスを指定します。ファイルに以下の行を追加してください。
    -dontwarn com.amazon.**
    -keep class com.amazon.** {*;}
    -keepattributes *Annotation*
    
  3. ProGuardで実行する最適化パスの数を指定します。アプリの要件と想定される用途に応じて、最適化パスを1またはなしに設定してください。
    • 最適化パスを1に指定する場合は、以下の行を追加します。
      -optimizationpasses 1
    • 最適化を完全にスキップする場合は、以下の行を追加します。
      -dontoptimize

      ベストプラクティス:少なくとも、-dontoptimize -dontobfuscateパスを実行して、アプリから一時的な依存関係を排除することをお勧めします。

  4. 最適化に関連するフラグがほかにあれば削除し、指定した設定と競合する可能性のあるフラグも削除します。
  5. アプリをリリースモードでビルドします。

ProGuardはAndroidのビルドシステムに統合されているため、手動で呼び出す必要はありません。proguard.cfgファイルとbuild.propertiesファイルが上記の説明どおりに設定されていれば、アプリをリリースモードでビルドした際に、ProGuardが自動的に実行されます。