2014/10/31にAndroid Gradle Plugin 0.14.0がリリースされていましたので、変更点を確認してみました。
http://tools.android.com/tech-docs/new-build-system
(ただ訳しただけのものもありますが)
※(2014/11/4追記) 早速、0.14.1がリリースされています。(詳細未確認)
0.14.0の変更点
Android Studio 0.9が必要
そのままですが、現在β版として下記ページからダウンロードできるのは、
つい先日までCanary Channelでリリースされていた0.8.14です。
https://developer.android.com/sdk/installing/studio.html
Android Studio 0.9はCanary Channelでリリースされています。
http://tools.android.com/download/studio/canary/latest
ProGuardとコードカバレッジ計測が連携可能
ProGuardを有効にしていてもカバレッジ計測できるようです。
おそらく以下の問題だと思われます。
https://code.google.com/p/android/issues/detail?id=76609
Android 5.0の端末からでもカバレッジデータをpull可能
これはAndroid L Previewを使っていて困っていたことですが
カバレッジ計測を有効にした場合テストが失敗する問題がありました。
今回のアップデートでカバレッジデータを取れるようになったようです。
自作のライブラリのテストで試したところ、確かにpullは成功し下記のようなエラーは出なくなりました。
Error during Sync: Remote object doesn't exist!
null
java.io.IOException: Failed to pull /data/data/com.simplealertdialog.test/coverage.ec from device
…ですが、肝心のカバレッジが全くとれなくなっていました。
(テストは実行できているのにカバレッジ0%。coverage.ec
ファイルが空でした)
テストカバレッジを計測しているプロジェクトでは、このバージョンを適用する前に
正しく計測できているか確認した方が良さそうです。
※類似の問題が見当たらなかったので、バグレポートしました。
https://code.google.com/p/android/issues/detail?id=78556
※(2014/11/4追記) 0.14.1がリリースされ、この問題は修正されたようです。
環境変数ANDROID_SERIALで端末を制限
環境変数ANDROID_SERIALが定義されている場合は、そのシリアルナンバーの機種にインストール、テスト実行を制限することができるようです。
実際、以下のように実行してみると指定の端末のみでテストが実行されました。
$ ANDROID_SERIAL=xxxxxxx ./gradlew connectedCheck
MultiDexサポート
メソッド数が65Kを超えるとビルドが失敗する問題へのサポートです。
-
multiDexEnabled = true
でサポートされる - 有効にするにはBuild-Tools 21.1.0とSupport Repository rev8が必要
- defaultConfig, ProductFlavor, BuildTypeに記述可能
-
minSdkVersion 21+
はネイティブでサポートされ、21未満はcom.android.support:multidex:1.0.0
のdependencyが自動的に追加される
こちらに詳しく説明がありました。
Building Apps with Over 65K Methods
未使用のリソースを自動的に削除
未使用のリソースを削除する機能が追加されたようです。
(デフォルトではOFF)
以下のようにすれば有効になります。
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
試しに、あるアプリで試してみると以下のように出力されました。
もちろん内容によるのでしょうが、以下の場合では20%ほど小さくなりました。
:app:shrinkProdReleaseResources
Removed unused resources: Binary resource data reduced from 1426KB to 1141KB: Removed 19%
Note: If necessary, you can disable resource shrinking by adding
android {
buildTypes {
release {
shrinkResources false
}
}
}
DSL/APIの変更
プロパティのリネーム
- BuildType.runProguard -> minifyEnabled
- BuildType.zipAlign -> zipAlignEnabled
- BuildType.jniDebugBuild -> jniDebuggable
- BuildType.renderscriptDebug -> renderscriptDebuggable
- ProductFlavor.renderscriptSupportMode -> renderscriptSupportModeEnabled
- ProductFlavor.renderscriptNdkMode -> renderscriptNdkModeEnabled
variant/variantFilter APIで取得できるBuildType/ProductFlavor/SigningConfigは読取専用に
- これらのオブジェクトはグローバルだったため、変更すると他のVariantに副作用が生じる
- Merged flavorはVariantごとの値であり変更可能
Variant/VariantOutput APIの変更
DensityやABIを以下のAPIで取得できるようです。
output.getFilter(com.android.build.OutputFile.DENSITY)
output.getFilter(com.android.build.OutputFile.ABI)
以上