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


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

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

コード難読化ツール

コードを難読化するには、専用のツールが必要です。Android SDKにはProGuardが付属していますが、ほかの難読化ツールを使用することもできます。

ProGuard

アプリの開発では、アプリ内課金(IAP)APIを実装するだけでなく、コード難読化ツールを使用してアプリのコードを難読化することも必要になります。このページでは、ProGuardを使用してコードを難読化する方法について説明します。ProGuardは、Android SDKの一部として提供されるコード難読化ツールです。ProGuardでは、ソースコードの圧縮、最適化、難読化を行うことができます。

ProGuardを既に使用している場合は、使用中のバージョンが最新であることを確認してください。IAP APIは、バージョン4.7より前のProGuardとは互換性がありません。

その他のコード難読化ツール

ProGuard以外のツールを使用してコードを難読化する場合は、アプリ内課金(IAP)APIの機能が維持されることを確認する必要があります。com.amazon.*名前空間のクラス(メソッド名や識別子を含む)が難読化されないようにしてください。また、アノテーションも失われないようにする必要があります。

プロジェクトのコードの難読化を設定する方法

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