DashO™ Gradle プラグイン(Android 用)を使用するには、まずそれを Gradle ビルドに追加し、その追加したものを buildscript で構成します。
プラグインの追加
DashO Gradle プラグイン(Android 用)を適用するには、buildscript 内にお使いのビルドへの依存関係として追加する必要があります。この依存関係により、さらに、buildscript のリポジトリとして PreEmptive Maven リポジトリを追加する必要が生じます。
buildscript {
repositories {
maven { url 'https://maven.preemptive.com' }
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
classpath 'com.preemptive.dasho:dasho-android:1.4.+'
}
}
また、本プラグインは、該当する Android プラグイン(つまり com.android.application または com.android.library)の後に追加することも必要になってきます。
apply plugin: 'com.android.application'
apply plugin: 'com.preemptive.dasho.android'
または
plugins {
id 'com.android.application'
id 'com.preemptive.dasho.android'
}
プラグインの構成
本プラグインは、buildscript 内で、com.preemptive.dasho.android プラグインの適用箇所より後なら任意のポイントで dasho クロージャによって構成できます。
dasho {
debug false
doxFilename "project.dox"
enabledBuildVariants "release"
excludeFromProtection null
home "/Applications/PreEmptive Protection DashO 12.5.0 x.y/Contents/Java"
javaOptions "-Xmx128m", "-Xms96m"
libraryAssetDirs "../lib/src/main/assets"
libraryResourceDirs "../lib/src/main/res"
searchVersion "11"
verbose false
}
dasho クロージャに使用できるプロパティは次のとおりです。
| 名前 | 機能 | 既定値 |
|---|---|---|
debug |
有効にすると、本プラグインにより、DashO が --debug および --printStackTraces オプションを使って実行され、DashO を呼び出すのに使用されたコマンドが出力されます。 |
false |
doxFilename |
Android プロジェクトを保護する際に DashO に使用させる DashO 構成ファイルの名前を設定します。このファイルは、プロジェクト ディレクトリ内のファイルである必要があります。このパス内の円記号(\)は、エスケープする(\\)か、スラッシュ)(/)に置き換える必要があります。 |
既定の DashO 構成ファイルを参照 |
enabledBuildVariants |
本プラグインに保護させるビルド バリアントを設定します。正規表現が使用可能です。バリアント名に正規表現との一致箇所(大文字と小文字の区別はなし)が含まれる場合に、本プラグインによりビルド バリアントが保護されます。空白値("")はすべてのバリアントに一致します。 |
release(すべての release バリアントと一致します) |
excludeFromProtection |
保護対象から除外すべき入力を設定します。正規表現が使用可能です。正規表現との一致箇所(大文字と小文字の区別はなし)が含まれる名前を持つ入力はすべて、入力でなく依存関係として DashO に渡されます。 | ヌル値(ドキュメントを参照) |
protectProjectFilesOnly |
DashO 難読化で、プロジェクト ディレクトリの外部にあるすべての jar/クラスをスキップするかどうかを定義します。true または false を指定できます。既定値は false ですが、true に設定すると、プロジェクト ディレクトリの外部にあるすべての jar/クラスが DashO の保護対象から除外されます。 | false |
home |
DashO ホーム。DashOPro.jar の検索先。searchVersion を指定する場合、またはそうしないで本プラグインで DashO を自動的に特定できるようにする場合は、設定しないでください。 |
既定値なし |
javaOptions |
DashO を実行するために、Java を呼び出す際に使用する追加の JVM オプション。1 つまたは複数の文字列が使用可能です。 | 追加オプションなし |
libraryAssetDirs |
暗号化される、参照ライブラリの Asset または関連ライブラリの Asset の任意の場所。v1.2.0 で追加されました。1 つまたは複数のパスが使用可能です。 | ライブラリの Asset を暗号化しない |
libraryResourceDirs |
暗号化される、参照ライブラリのリソースまたは関連ライブラリのリソースの任意の場所。現在、raw サブディレクトリにあるリソースのみが暗号化されます。v1.2.0 で追加されました。1 つまたは複数のパスが使用可能です。 |
ライブラリの Raw リソースを暗号化しない |
searchVersion |
{major}[.{minor}] の形式の文字列(例:11、11.2)を指定した場合に DashO ホームが検索されるように本プラグインを構成します。home を指定する場合は設定しないでください。 |
既定値なし |
verbose |
有効にすると、本プラグインにより、DashO が --verbose および --printStackTraces オプションを使って実行され、DashO を呼び出すのに使用されたコマンドが出力されます。 |
false |
runtimeJars |
有効にすると、DashO は、Android AAR に必要なランタイム .jar の依存関係を明示的に読み込むよう指示されます。これにより、外部ライブラリのクラスが不足している場合に、難読化/ビルド プロセス中に ClassNotFoundException エラーが発生するのを防ぎます。 |
false |
includeAutoGeneratedModules |
有効にすると、DashO は、protectProjectFilesOnly が有効であっても、自動生成されたクラス(Dagger/Hilt、Room、データ バインディングなど)を ProjectFiles として扱い、DashO の処理に含めるよう指示されます。このオプションは protectProjectFilesOnly が true に設定されている場合にのみ適用され、そうでない場合は影響しません。 |
false |
dasho クロージャは、そのプロパティを設定する必要がない場合には、プロパティがすべて省略可能であるため、記述する必要はありません。
既定の DashO 構成ファイル
DashO 構成ファイルを指定する際に、dasho クロージャの doxFilename プロパティも指定しない場合、DashO Gradle プラグイン(Android 用)により、最新のバリアントに一致するプロジェクト ファイルが検索されます。
たとえば、以下のビルド フレーバーとビルド タイプを構成したとします。
android {
buildTypes {
debug { }
release { }
}
flavorDimensions 'monetization', 'deviceType'
productFlavors {
free { dimension 'monetization' }
paid { dimension 'monetization' }
phone { dimension 'deviceType' }
tablet { dimension 'deviceType' }
}
}
ビルド バリアント freePhoneDebug に対し、DashO Gradle プラグイン(Android 用)により、アプリケーション レベルの build.gradle と同じディレクトリからプロジェクト ファイルが検索されます。検索対象として使用されるプロジェクト ファイルは、以下のリストにあるプロジェクト ファイルのうち、最初に見つかったプロジェクト ファイルです。
freePhoneDebug.doxfreePhone.doxfree.doxphone.doxdebug.doxproject.dox
保護対象からの除外
dasho クロージャには、入力を DashO による保護対象から除外できるようにする excludeFromProtection プロパティを記述します。 このプロパティの設定では、正規表現が使用可能です。 正規表現との一致箇所が含まれる名前を持つ入力はすべて、依存関係として DashO に渡されます。 既定では、何も保護対象から除外されません。
たとえば、プロジェクトに以下のような依存関係がある場合を考えます。
dependencies {
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation project(':imageViewerLibrary')
}
この場合、excludeFromProtection "androidx" を設定すると、androidx jar が依存関係として DashO に渡されます。
この設定が役に立つのは、単一ビルドを実行することで、ライブラリ(AAR)とアプリケーション(APK)の両方を配布する場合です。 ライブラリとアプリケーションを共に保護しておきながら、その後、アプリケーションの build.gradle ファイル内に excludeFromProtection ":library" を設定するように、DashO を構成することもできます。 アプリケーションのみを配布する場合は、ライブラリを独立して保護しないでください。ライブラリは、保護対象から除外されない限り、アプリケーションと一緒に保護されるためです。
リソースの暗号化
このプラグインは、リソースの暗号化に対応する DashO にリソース情報を渡します。 Gradle の構成に基づいて、Asset およびリソース ディレクトリを自動的に見つけます。 アプリケーションとリソースの両方をビルドしており、ライブラリの Asset と Raw リソースを暗号化させたい場合、クロージャで libraryAssetDirs および libraryResourceDirs プロパティを構成します。
Android ライブラリ
runtimeJars フラグとは?
runtimeJars フラグは、DashO における Android ライブラリのサポートを強化するために使用されるオプションの設定です。
既定では、runtimeJars は false に設定されます。
このフラグを有効(true)にすると、DashO は、Android AAR に必要なランタイム .jar の依存関係を明示的に読み込むよう指示されます。これにより、外部ライブラリのクラスが不足している場合に、難読化/ビルド プロセス中に ClassNotFoundException エラーが発生するのを防ぎます。
このフラグが導入された理由
このフラグは、Android の依存関係またはサードパーティのライブラリに含まれるランタイム クラスを DashO が見つけられないケースに対処するために導入されました。.aar ファイルにはコードとリソースの両方が含まれていることが多く、必要なクラスすべてが直接公開されているわけではありません(一部はランタイム .jar に含まれています)。このフラグを有効にすると、そのような .jar ファイルが確実に解決され DashO 処理中に使用されるようになります。
DashO 構成でフラグを有効にする:
dasho {
runtimeJars = true
}本プラグインと Android プラグインとの連携
適用した本プラグインは、自動的に Android プラグインと統合されます。 本プラグインの完全なバージョンを表示するには、gradlew dashOPluginVersion を実行します。
サポートされているプロパティ
本プラグインでは、Gradle プロジェクト プロパティ、Java システム プロパティ、または環境変数として設定できる、以下のプロパティがサポートされています。
-
DASHO_HOME- DashO ホームを指定します。 -
DASHO_LICENSE- DashO で使用されるライセンスを指定します。 v1.3.0 以降でサポートされます。 -
DISABLE_DASHO- このプロパティが存在する場合は、DashO によりクラスが処理されなくなります。 値は不要です。false以外の値はすべてtrueとして解釈されます。 -
GENERATE_DASHO_CONFIG- 既定の Android モード構成ファイルを生成するように DashO に指示します。 値は不要です。false以外の値はすべてtrueとして解釈されます。 -
SHOW_DASHO_CMD- このプロパティが存在する場合は、DashO を起動する際に使用されるコマンド ライン引数が表示されます。 値は不要です。false以外の値はすべてtrueとして解釈されます。
これらのプロパティは、gradlew コマンド ラインで -P{name}[={value}] または -D{name}[={value}] を使って渡すか、あるいは環境で設定することができます。
Gradle プロジェクト プロパティは、gradle.properties ファイル内、コマンド ラインで -P 引数として(例:-PDASHO_LICENSE={key[:email]})、または、ORG_GRADLE_PROJECT_ を先頭に付けたシステム環境変数で設定できます(例:ORG_GRADLE_PROJECT_DASHO_LICENSE={key[:email]})。 Java プロパティはコマンド ラインで -D 引数として設定できます(例:-DDASHO_LICENSE={key[:email]})。
ライセンスの構成
DashO で使用されるライセンスを構成する必要がある場合は、上述の DASHO_LICENSE でライセンス文字列を指定できます。