APK の直接操作
このセクションでは、PreEmptive Protection - DashO を使用するために、既存の Android アプリケーション(APK)プロジェクトを構成する手順をひととおり示します。 ビルド環境として Gradle を使用する場合、あるいは APK ファイルを直接操作する場合では、セットアップ プロセスが異なります。DashO は APK パッケージを直接操作することができます。
APK を扱う場合、DashO はサード パーティ製の dex2jar および Apktool ユーティリティを使用して、クラスを抽出します。 次いで、DashO はそれらのクラスを難読化します。 その後、それらのツールを使って新しい APK を出力します。
必要条件
DashO ホストには、Android SDK ツールと Java 7(以降)がインストールされている必要があります。 Java はシステム パス上になければなりません。
PreEmptive Protection - DashO のための、Android プロジェクトのステージング
このセットアップで必要なステージングはありません。構築された APK ファイルさえあればよいです。
メモ:
DashO は、multidex の APK ファイルの操作をサポートしていません。アプリケーションで multidex サポートが必要になる場合は、DashO の Gradle 統合を使用してください。
DashO は埋め込み APK ファイル(Android Wear で使用される)は処理しません。Wear アプリケーションを含むアプリケーションがあり、その Wear 部分の難読化を行いたい場合は、DashO の Gradle 統合を使用してください。
ウィザードによる PreEmptive Protection - DashO プロジェクトの作成
New Project Wizard は、DashO の起動時に自動的に起動することができます。DashO が既に実行されている場合は、[File|Project Wizard]から起動できます。[Select Application Type]ウィザード画面で "An Android application or library" を選択し、次に "APK" ビルド環境を選択して、Android APK ファイルの名前を入力します。
ウィザードは、その作業のほとんどを自動的に実行します。ウィザードは、dex2jar および Apktool を使用して APK の内容を判断します。
ウィザードは、project.dox
というファイルを APK ファイルと同じディレクトリに保存します。このファイルにはすべての構成が含まれています。
DashO プロジェクトを作成したら、DashO で APK を直接操作できるようにするために、追加のプロパティを設定する必要があります。Options - User Properties パネルで以下の項目を設定します。
ANDROID_BUILD_TOOLS_HOME
– 使用する Android ビルド ツールの場所。ここで指定されるディレクトリには、zipalign
の実行可能ファイルが入っている必要があります(たとえば、c:\android-sdk\build-tools\27.0.3
)。19.1.0 より前のバージョンのビルド ツールを使用している場合、この実行可能ファイルはbuild-tools
ディレクトリの下ではなく、tools
ディレクトリの下にあるはずです。APKTOOL_FRAMEWORK_DIR
– Apktool で使用するフレームワーク ファイルを格納するディレクトリ。これは、既定のフレームワーク ファイルが動作しないようなまれな場合(たとえば、カスタム デバイスであったり、Android がベータ版であったりする場合)にのみ必要となります。必要なフレームワークを抽出する方法については、http://ibotpeaches.github.io/Apktool/documentation/#frameworks を参照してください。SKIP_APK_MANIFEST
– この省略可能な設定により、APK 内部のAndroidManifest.xml
ファイルの処理を省くことができます。マニフェストに記載されているクラスのどれも名前を変更しない場合は、これを "true" に設定できます。
ウィザードの完全な手引きは、Android アプリケーションおよびライブラリ セクションに記載されています。
PreEmptive Protection - DashO GUI を使って、難読化を構成する
さて、ステージングされた Android プロジェクトを DashO に読み込んだら、DashO GUI を使用して、望みどおりの構成にすることができます。プロジェクトを忘れずに保存してください。プロジェクトは project.dox
ファイルを更新します。後で構成設定を変更する場合は、DashO を実行して project.dox
ファイルを開き、変更を加えて保存します。
DashO GUI の段階的な説明については、ユーザー インターフェイス リファレンス セクションを参照してください。
GUI 内でプロジェクトを構築すると、構成内容をテストして、正しくビルドするかどうかを確認することができます。
Gradle ビルドと統合する
ビルド スクリプトに以下のコードを追加することにより、Gradle ビルドから DashO を呼び出すこともできます。
buildscript {
repositories {
flatDir dirs: "{DashO's Installation Directory}/gradle"
}
dependencies {
classpath "com.preemptive:dasho:X.Y.+"
}
}
apply plugin: 'com.preemptive.dashoCustom'
dashOConfig {
dashOHome = '{DashO's Installation Directory}'
doxFilename = 'project.dox'
}
task obfuscate (type:DashOFileTask) {
from("application.apk") //application.apk は実際のファイル名とパスに置き換えられます。
to("application-ob.apk")
addUserProperty("apkInput", '${gradleInput}')
addUserProperty("apkOutput", '${gradleOutput}')
}
これにより、標準の java DashO プラグインが組み込まれます。実行するには、gradlew obfuscate
を呼び出します。
メモ:
${gradleInput}
と${gradleOutput}
を囲んでいる一重引用符に注目してください。これらのリテラル文字列は、プロパティ値として渡される必要があります。
Ant ビルドと統合する
ビルド スクリプトに以下のコードを追加することにより、Ant ビルドからの DashO の呼び出しを追加できます。
<typedef onerror="failall" resource="preemptive/dasho/anttask/antlib.xml"/>
<target name="obfuscate" description="Obfuscate the application.">
<obfuscate project="project.dox">
<sysproperty key="apkInput" value="application.apk" />
<!-- Where application.apk is replaced by the actual filename and path -->
<sysproperty key="apkOutput" value="application-ob.apk" />
</obfuscate>
</target>
これにより、DashO の Ant プラグインが組み込まれます。実行するには、ant obfuscate
を呼び出します。
DashO の Ant タスクがインストールされていることを前提とします。Ant タスクのインストールに関する情報は、DashO の Ant タスク ドキュメント(英語)で入手できます。
難読化された APK をエミュレーターまたはデバイスに署名またはインストールする
ビルドは新しい APK を出力します。それには署名が必要で、署名すると、エミュレーターや物理デバイスにインストールできるようになります。署名キーを作成して、この情報を DashO に提供するか、または自分で手動でアプリに署名する必要があります。この情報は、Output – Signing パネルで提供することができます。署名を構成したら、Output – APK パネルで Zipalign を有効にすることもできます。
APK の署名の詳細については、http://developer.android.com/tools/publishing/app-signing.html を参照してください。
署名すれば、標準の Android ツールを使用してそれをインストールできます。
adb install {filename}.apk
これにより、実行中のエミュレーターまたは接続されたデバイスに APK がインストールされます。その後、アプリケーション一覧へ移動して、アプリケーションにアクセスすることができます。インストールしたアプリケーションは、デバイスにインストールされている他の Android アプリケーションと同様に表示されます。
別のマシンで実行する
APK と project.dox
ファイルをあるマシンから別のマシンへコピーしても、DashO と Android SDK が他のマシン上で利用可能である限りは正常に動作します。Android SDK の新しい場所を指すように、ANDROID_BUILD_TOOLS_HOME
を更新する必要があるかもしれません。
最善の解決策は、上記のさまざまなツールを 1 つのビルド マシンから利用できるように、前もって環境を準備しておくことです。