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


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

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

コード難読化からのIAPの除外

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

ProGuard

このセクションでは、ProGuardを使用してコードを難読化する方法を説明します。ProGuardは、Android SDK(およびGradle 3.4.0以前のAndroid Studio)に組み込まれているコード難読化ツールで、ソースコードの圧縮・最適化・難読化を行うことができます。

注:IAP APIは、ProGuardのバージョン4.7以降と互換性があります。

IAP APIは、購入リクエストに関する情報の呼び出し・提供に特定のメソッドが利用できることを前提としています。そのため、これらのメソッドの難読化は避けなければなりません。難読化によってメソッドの名前が変更されると、アプリとAmazon間の通信ができなくなります。このセクションでは、難読化ツールとしてProGuardを使用する場合に、アプリとAmazon間の通信を維持しながらIAP APIの実装コードを難読化する方法を説明します。

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が自動的に実行されます。