Gradle プラグイン vc-android-sdk-manager 0.1.0 をリリースしました
このプラグインの目的
Android プロジェクトの Gradle ビルドスクリプトから Android SDK の android update sdk を実行することです。
通常、既存の Android プロジェクトの開発に携わるとき、最初に次のようなことを行う必要があります。
- Android SDK (と IDE など) をダウンロードしてくる。 (まだしていない場合。)
- 既存の Android プロジェクトを手元に持ってくる。 (git clone とか。)
- Android SDK アップデートを行い、プロジェクトで必要なコンポーネントをダウンロードする。 (← これ)
- 開発を始める。
上の流れの中の、「これ」 と書かれた部分を自動化します。 (ビルドスクリプトの実行時に行うようにする。)
使い方
GitHub 上に Maven リポジトリを展開していますので、次のようにビルドスクリプトの依存を記述すれば使用できるようになります。 これはルートプロジェクトにのみ記述すればよいです。
buildscript { repositories { maven { url 'https://raw.githubusercontent.com/nobuoka/vc-gradle-android-sdk-manager/mvn-staging/m2repo/' } } dependencies { classpath 'info.vividcode.android.build:android-sdk-manager:0.1.+' } }
次に、プラグインを使用するプロジェクトにプラグインを適用します。
apply plugin: 'vc-android-sdk-manager'
そうすると、そのプロジェクトでは androidSdkManager
という変数が使えるようになります。 androidSdkManager
は updateSdkComponents
メソッドや updateSdkPlatformAndBuildToolsAfterEvaluate
メソッドを持っていて、次のように実行することで、Android SDK のコンポーネントのインストールや更新を行います。 (まだ最新のリビジョンがインストールされていない場合。)
// このメソッド呼び出し時に、指定のコンポーネントをインストールする。 // コンポーネントの指定は、android update sdk コマンドの filter オプションに指定する値。 androidSdkManager.updateSdkComponents(['tools', 'platform-tools', 'extra-android-m2repository']) // プロジェクトの評価後に 'build-tools-XXX' と 'android-XXX' をインストールする。 // プロジェクトの `android` extension に設定された値を見て、どのバージョンをインストールするか決定する。 androidSdkManager.updateSdkPlatformAndBuildToolsAfterEvaluate()
また、上のように実行すると、インストール時のライセンスに同意するかどうかの入力はユーザーに委ねますが、次のように acceptLicenseAutomatically
オプションを使うと、自動でライセンスに同意します。 自動でライセンスに同意しますので、使用する際には自身の責任でもって使用してください。
androidSdkManager.updateSdkComponents(['tools', 'platform-tools'], acceptLicenseAutomatically: true) androidSdkManager.updateSdkPlatformAndBuildToolsAfterEvaluate( acceptLicenseAutomatically: true)
必要な場合にのみ実行するようにする
Android SDK の更新は毎回のビルド時にする必要はないので、次のように指定の Gradle プロパティがある場合にのみ実行するようにすれば良いでしょう。
// `setupAndroidSdk` プロパティがある場合にのみ SDK の更新を行う。 if (project.hasProperty('setupAndroidSdk')) { apply plugin: 'vc-android-sdk-manager' androidSdkManager.updateSdkComponents(['tools', 'platform-tools']) androidSdkManager.updateSdkPlatformAndBuildToolsAfterEvaluate() }
上のようにビルドスクリプトに書いておくと、通常時は Android SDK の更新は実行されず、次のように setupAndroidSdk
プロパティを設定したときには Android SDK の更新が実行されます。
./gradlew -PsetupAndroidSdk assembleDebug
内部でやっていること
内部的には次のことを行います。
android list sdk --extended
を実行し、指定されたコンポーネントが含まれているかどうか確認する。- 含まれているもののみをカンマで連結し、文字列
filters
生成。
- 含まれているもののみをカンマで連結し、文字列
android update sdk --no-ui --all --filter filters
を実行し、コンポーネントをインストール。
ただし、build-tools に関しては、未インストールでも android list sdk
の出力に現れないため、インストール先ディレクトリが存在するかどうかを見てインストール済みかどうか判別しています。
類似のプロジェクト
Cookpad による類似のプロジェクトがあります。