背景
マルチプロジェクトビルドに挑戦しているので記録を残す。
C, C++, Javaのネイティブ環境である。
ndk-buildはコマンドをgradleから直叩きする形。
Androidライブラリとテスト用のAndroidアプリケーションをそれぞれ複数含む。
執筆時点の環境情報
$ gradle -version
------------------------------------------------------------
Gradle 2.14
------------------------------------------------------------
Build time: 2016-06-14 07:16:37 UTC
Revision: cba5fea19f1e0c6a00cc904828a6ec4e11739abc
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_60 (Oracle Corporation 25.60-b23)
OS: Mac OS X 10.11.5 x86_64
Gradleについて
クロージャの扱い
task hello {
// これだとタスク実行前(評価時)に実行されてしまう
println "hello world"
}
task hello {
doLast {
println "hello world"
}
}
task hello << {
println "hello world"
}
まずはGradle単体でのマルチプロジェクトの設定
構成を設定する
settings.gradle
rootProject.name = 'water'
include 'bluewhale:bluemoon'
include 'bluewhale:redmine'
include 'krill'
include 'tropicalFish'
include '123'
include 'アイウエオ'
$ gradle projects
Root project 'water'
+--- Project ':123'
+--- Project ':bluewhale'
| +--- Project ':bluewhale:bluemoon'
| \--- Project ':bluewhale:redmine'
+--- Project ':krill'
+--- Project ':tropicalFish'
\--- Project ':アイウエオ'
ディレクトリ自体は作成しなくても良い。
以降この節ではプロジェクトを例として解説。
サブプロジェクトのタスクは親からでも設定できる
Closure cl = { task -> println "I'm $task.project.name" }
task hello << cl
project(':bluewhale') {
task hello << cl
}
子供からでも親のタスクを設定できる
/build.gradle
task ok << {
println "ok I'm water."
}
bluewhale/build.gradle
// rootProjectにokというタスクがない場合はエラーになる
rootProject.ok << {
println "ok! man!"
}
$ gradle ok
Configuration on demand is an incubating feature.
:ok
ok I'm water.
ok! man!
BUILD SUCCESSFUL
実行時のタスクの順番を指定する
bluewhale/build.gradle
task hello(dependsOn: ":krill:hello") << {
println "hello bluewhale"
}
プロジェクト単位では指定できない。
評価の順番を指定する
他のプロジェクトに依存
evaluationDependsOn(':producer')
全部逆順にする場合はこう
evaluationDependsOnChildren()
task単位では指定できない。
何も指定しない場合はalnum
Configuration on Demand
関係あるプロジェクトだけ評価する
そのうちこれがデフォルトの挙動になるだろうと書いてありました。
こうしないと関係ないプロジェクトも全部評価して設定してしまう。
詳しくはこちら
gradle.properties
org.gradle.configureondemand=true
Android Studio
一般的な構造
android-unsplash $ tree -L 2
.
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── android-unsplash.iml
├── app
│ ├── app.iml
│ ├── build
│ ├── build.gradle
│ └── src
├── build.gradle
├── gradle
│ └── wrapper
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
Note: app/ はandroid-unsplash/ の単なるサブプロジェクトである
To Be Continued
とりあえず今日はここまで (2016/6/21)