Groovyをモジュールレベルでビルドする
導入
Gradleは何ですか?
Gradleはビルドオートメーションツールです.Gradleのおかげで、Androidファイル、クラス、リソース、その他すべてがコンパイルされ、エミュレータやハードウェアデバイス上で動作することができます.Gradleはビルドしたファイルとプラグインのパワーを通してこのすべての善を行います.
Groovyとは
compileSdkVersion 30
は、我々のアプリケーションに影響を与えるだけでなく、Gradleに特有の何かではなく、Android SDKバージョンのようなファイルをビルドすることを意味します.Module level build files
ファイルからコードに飛び込むことができます.plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.example.criminalintent"
minSdkVersion 23
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
println(getDelegate())
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
何が起こっているのか
DSLは何ですか?
レッツトークプラグイン
我々が動かす前に、
プラグイン構文についてのクイックメモ
build.gradle
(ドメイン固有の言語)と呼ばれます.プラグインを宣言するときには、この特別な構文を使用して、gradleとusを使ってプラグインが使用されているかをすばやく判断できます.私は十分に強調することはできません、構文はコードの残りの部分に似ていますが、それはありません!この点から、プラグインコードブロックを
plugin DSL
と呼びます.plugins {
id 'com.android.application'
}
plugin DSL
と呼ばれています.バイナリプラグインには一意のIDが定義されています.このidなしではgradleはどのプラグインを参照しているかを知りません.グルービー・ウォーニング.
android {
compileSdkVersion 30
println(getDelegate())
defaultConfig {
applicationId "com.example.criminalintent"
minSdkVersion 23
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
println(getDelegate())
}
}
Binary plugin
です.印刷コードはもっとグルーヴィーなので、ドキュメントを読んで、自由に言語で快適になる感じ.Gradleログファイルを見ると、奇妙なオブジェクトがコンソールに印刷されていることがわかります.それらのオブジェクトはprintln(getDelegate())
オブジェクトです.代表は何ですか.
閉鎖とは
Gloovyのクロージャの
これはどういう意味ですか.
delegate
の隠された構文について話を始めることができます.それのように見えないにもかかわらず、その構文は実際にgroovyメソッド呼び出しです、そして、メソッドはパラメタとして閉鎖をとります.したがって、android{ }
はandroid{ }
になり、Android {}ブロック内で宣言されたすべては、参照のクロージャのデリゲートオブジェクトに見えるメソッド呼び出しです.この構造体に続く{{ } }がすぐに続くすべての文.Hereは、より完全にこの考えを越える関連です.さて、この代表的なオブジェクトはどこから来ますか、そして、なぜそれはAndroidについてそんなに知っていますか?それはandroid(closure){}
の中で定義するバイナリプラグインを通して私たちに提供されます.私たちも、Androidのプラグインを削除し、ビルドファイルの同期によってこれを証明することができます.あなたは、州、plugin DSL
、これは2つのことを証明するエラーに気づくでしょう:1)Androidの{ }は、実際にメソッドと2)Androidのプラグインはすべてを可能にするものです.行く前に
参考文献
Groovy closures
Build files
Gradle build language
Gradle and Groovy
Android and Groovy
結論
Reference
この問題について(Groovyをモジュールレベルでビルドする), 我々は、より多くの情報をここで見つけました https://dev.to/theplebdev/getting-groovy-in-android-with-module-level-build-files-in-gradle-54fdテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol