とにかくやるブログ

とにかくやるブログ

プログラムの備忘録とその他雑記を適当にやるブログ

【Androidプログラム】Androidのgradleを歩いてみる

f:id:tewow:20190513223410j:plain
※関係ないアイキャッチ






Androidのgradleについて
なんとなーくで、なんとなーく使っている感じなのでこれを機にざっとまとめる。






そもそもgradleとは

Java環境におけるビルドシステムのこと。
Groovyという言語で構築を記述することが可能。


JavaのビルドシステムはJavaではなく別の言語とのこと
正直しんどいと思ったけど、記述方法はかなりJavaに似ているらしくそこまでハードルは高くはないとのこと。



gradleとはなんぞやということについては以下が詳しい。


mixi-inc.github.io


ここに大体のことは書いてあるが、今回は勉強の意味もあり自分で歩いてみたいと思うので
以下に自分が前に触った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 23buildToolVersion “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 false

signingConfig signingConfigs.debug

   applicationIdSuffix ".debug"

testCoverageEnabled true
}

release {
debuggable false
minifyEnabled true
shrinkResources true
testCoverageEnabled false
signingConfig signingConfigs.release

proguardFiles( 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窓で使うことができる。






早足でしたがざっと以上。




今回はザックリでもいいから全部読むのが目的でしたが
今後は個々に見る機会も作れればと思う。