【Androidプログラム】Androidのgradleを歩いてみる
※関係ないアイキャッチ
Androidのgradleについて
なんとなーくで、なんとなーく使っている感じなのでこれを機にざっとまとめる。
そもそもgradleとは
Java環境におけるビルドシステムのこと。
Groovyという言語で構築を記述することが可能。
JavaのビルドシステムはJavaではなく別の言語とのこと
正直しんどいと思ったけど、記述方法はかなりJavaに似ているらしくそこまでハードルは高くはないとのこと。
gradleとはなんぞやということについては以下が詳しい。
ここに大体のことは書いてあるが、今回は勉強の意味もあり自分で歩いてみたいと思うので
以下に自分が前に触ったgradleをベースに上からなぞっていく。
歩き始める
apply plugin: ‘com.xxxx.xxxxxxxxx’
プラグインの宣言を行う。
kotlinなどの一部ライブラリを使う際にプラグインが必要な場合は、ここにも記述。
repositories{
jcenter()maven{url ‘https://maven.google.com’}
mavenCentral()
}
使用するリポジトリの記述。
jcenter()やmavenCentral()はライブラリを提供してくれるリポジトリの名前。
これを記述することでjcenterやmavenCentralで公開されているライブラリが使えるようになる。
なお、ライブラリによってはCentralの方で公開されていない場合があるので
maven{url ‘https://maven.google.com’}のようにURLを指定してやる必要もある。
android{
compileSdkVersion 23
buildToolVersion “23.0.1”flavorDimensions ”default”
testOptions.unitTests.includeAndroidResources true
kapt{
generateStubs = true
}
androidのビルドの設定を行うところ
compileSdkVersion 23、buildToolVersion “23.0.1”ではcompile>build するのに必要なSDKやビルドツールのバージョン指定。
flavorDimensions ”default”でBuildValiantの設定を行う。
”BuildValiant”については以下が詳しい。
qiita.com
”default”だと単純に buildType*flavor で設定されるっぽい。
testOptions.unitTests.includeAndroidResources true
Robolectricというユニットテストをするツールを使うための設定。
Robolectricについては以下が詳しい。
qiita.com
kapt{
generateStubs = true
}
kaptとはkotlinでJavaのアノテーションを使うのをサポートするツールで、ここはその設定を行っている。
generateStubをtrueにしておくことでannotation processingで生成されたクラスからのエラーを回避できる。
しかし、trueの場合ビルドが遅くなるのでデフォルトはfalseになっている。
defaultConfig{
//端末やストアにおいてアプリを認識する一意のID、アプリ公開後は変更不可
//https://developer.android.com/studio/build/application-id?hl=ja
applicationId “jp.sample”//最低SDKバージョン
minSdkVersion 23
//推奨SDKバージョン
targetSdkVersion 23//アプリのバージョン設定
//https://developer.android.com/studio/publish/versioning?hl=JA
versionCode 1
versionName “1.0”//マニフェストに埋め込まれる変数の値を設定
// =[変数名 : 値]
manifestPlaceholders = [scheme_name:”sampleApp”]
buildConfigField “String”, “SAMPLE”, “\”sample\””testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”
}
defaultConfigで各フレーバーで適応されるデフォルト設定を行う。
manifestPlaceholders でマニフェストに埋め込まれる変数の値を設定する。
buildConfigFieldはビルドの段階から値を指定できる変数で、定義された変数は BuildConfig.java に定義され、そこから呼び出すことが出来る。
buildConfigField “型名”, “変数名”, “値” で変数を定義できる。
testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”
はJUnit4形式のテストをするために必要で詳細は以下に譲る。
y-anz-m.blogspot.com
signingConfigs {
//デバッグ時_デバッグ時のみ適応される仮の内容
debug {
storeFile rootProject.file('debug.jks')
storePassword 'storePass'
keyAlias 'aliasKey'
keyPassword 'keyPass'
}
//リリース時_キーストアの内容
release {
storeFile rootProject.file('release.jks')
storePassword 'storePass'
keyAlias 'aliasKey'
keyPassword 'keyPass'
}
signingConfigs は署名設定を記述する領域。
後述のbuildType毎に設定することができる。
buildTypes{
debug {
debuggable true
minifyEnabled false
shrinkResources falsesigningConfig signingConfigs.debug
applicationIdSuffix ".debug"testCoverageEnabled true
}release {
debuggable false
minifyEnabled true
shrinkResources true
testCoverageEnabled false
signingConfig signingConfigs.releaseproguardFiles( getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' )
}
}
buildType毎の設定。
debuggableはtrueにすると汎用のデバッグキーストアにてAndroid端末でAPK署名を設定できるようになる。
minifyEnabled はfalseにすることでコードの圧縮を有効にしている。
shrinkResources はfalseにすることでリソースの圧縮を有効にしている。
signingConfig signingConfigs.debugでは署名情報の指定をしている。
今回の場合では、デバッグ用の署名情報を指定。
applicationIdSuffix ".debug"では該当のビルドタイプでビルドした際に
アプリケーションIDに付加させるセグメントを設定。
testCoverageEnabled trueではコードカバレッジ(コード使用率の測定)を有効にしている。
proguardFiles( getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' )
ここではコードを難読化している。
リバースエンジニアリングなどのセキュリティ対策の一環として行う。
developer.android.com
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
sourceSets ではソース参照先の指定を行う。
productFlavors {
develop {
minSdkVersion 23
}
product {
minSdkVersion 23
}
}
productFlavors もbuilldTypeと同様でビルド時の設定を行う。
2つを組み合わせることでバリエーションを持ってビルドを行うことができる。
lintOptions {
//ここをfalseにすると静的なコード解析エラーが発生してもビルドを継続する
abortOnError false
}
lintOptions ではコード検査ツール"Lint"の実行時のオプションを設定できる。
abortOnError をfalseにすると静的なコード解析エラーが発生してもビルドを継続する。
jacoco {
toolVersion = "0.7.7.201606060606"
}
jacoco はJavaの単体テストでコードカバレッジのレポートが出力できるライブラリ。
ここではそのバージョンを指定している。
dependencies {
compile "com.android.support:appcompat-v7:${support_lib_version}"
・
・
・}
dependencies にはアプリケーションの依存関係を記載する。
主には使用するライブラリを記載する。
ちなみに上で使用している"compile"は廃止予定のコンフィグレーションなので"implementation"で行う。
developer.android.com
また、gradle内にはgroovyを使用してメソッドも記述可能で
それはAndroidStudioの右側のgradle窓で使うことができる。
早足でしたがざっと以上。
今回はザックリでもいいから全部読むのが目的でしたが
今後は個々に見る機会も作れればと思う。