Androidの開発をしていると、コードを書いているよりビルドに四苦八苦する時間が多い…ぐらいな気もしてしまいます。
Androidが利用しているビルドツールであるGradleのことについては、大体はAndroid Studioさんがやってくれるので、プログラマの日常業務としてはライブラリの読み込みを編集したり、SDKのバージョンを変更したり、Flavorごとの設定を変更したり…ぐらいなことをやっていて、あんまり理解が進んでいなかったなという気がします。
これにはきっかけがあって、Open Street MapのAndroid組み込み用のサンプルプログラムを自分で使ってみて参考にしようと思ったんですが、Gradle Furyというプラグインを使っていて、結局ビルドできなかったんですよね。Gradle Furyは「Gradleに怒っている人が使う」wwwらしく、POMでいろんなことを定義しちゃおうぜーという試みだったらしいです。
ただ、Gradleのことを全部わかろうというのもちょっと時間の無駄な気がしますね。なので、今回は階層関係と、settings.gradleについて書いておきます。詳しくは、下記の公式サイトで見てみてください。
ビルドの設定
https://developer.android.com/studio/build?hl=JA
Android Studioでプロジェクトを作ると、図のように階層やフォルダができていると思います。(私はWindows 10で開発しています。)
こんな風に表示されてないよー、という場合は、赤丸してあるところがAndroidになっていると思います。クリックして、「Project Files」にすると、ファイルシステムと同じビューで見れます。この方が、今回はわかりやすいので、この「Project Files」ビューで進めます。
さて、今回最初に話題にしたいのは、下記の水色でマルしたsettings.gradleとbuild.gradleです。
settings.gradleから。中身は下記の一文だけ。
include ':app'
appをつかってビルドしましょうね~って意味でして、これがないと何も始まらないw
今回、一個だけのアプリケーションを使ってビルドするので、一文だけですが、ほかのアプリケーションをモジュールとして利用したい場合、ここにincludeするものが増えていきます。
build.gradleは次の通り。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ここでは、全部のアプリケーションに共通のビルドの設定を書いておきます。さっきも書きましたが、今回は一つのアプリケーションだけなので、あまり意味がありませんが、2つ、3つと増えてくると、一つ一つのアプリケーションのGradleファイルにbuildscriptとか書くのは「ええい、面倒!」と思ってくると思いますので、意味があります。
次に、図の紫で囲った、一個下のappフォルダ内のファイルbuild.gradleの説明です。中身は
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "smart.location.admin.sampleapp"
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
で、こっちは見慣れた感じだと思います。こっちで利用するライブラリやビルドタイプなどを決めていきます。
今回は本当に触りだけですが、以上です。