序文
AndroidのサポートKotlin DSLの使用のGradleスクリプトを構築し、迅速波を習得しないように?
この記事トピック:
1. Groovyの使用KotlinのDSLを交換する方法
2.問題が発生したとソリューション
なぜ私はKotlin DSLを使用する必要があります
使用KotlinのDSLの利点:
- アンドロイドは正式推奨Kotlin言語ではありませんので、プロジェクトの全体の発展統一KotlinのGradleビルドスクリプト言語のヘルプを使用し、追加の学習Groovyの構文ので
- ソースにKotlin DSLサポートジャンプ
- コンパイル時にエラーのKotlin DSLチェック
- Kotlin DSLは、自動コード補完や構文強調表示をサポートしています
KotlinのDSLの欠点:
- Groovyのコンパイラの速度より遅いです
GroovyのからKotlin DSLへの移行
Gradleのバージョン:3.5.3
Gradleのラッパーのバージョン:5.6.4
新しいAndroidのプロジェクトを作成します。
私たちは、一例として、グルーヴィーからKotlin DSLへのステップの移行により、ステップを新たにAndroidのプロジェクトを持っています
最初のステップ:修正setting.gradleファイル
するために、setting.gradle
名前を変更setting.gradle.kts
すべてKotlin DSL文書はファイル名のサフィックス.ktsに基づいています
次に、ファイル内部の内容を変更します。
include (":app")
rootProject.buildFileName = "build.gradle.kts"
これがないと、元になる、非常に簡単です「:」に「()」これは差DSLやGroovyの構文のKotlinの一つです。
ステップ2:build.gradleのプロジェクトファイルを変更します。
するために、build.gradle
名前を変更build.gradle.kts
その後、内容を変更します。
buildscript {
val kotlin_version = "1.3.61" // #1
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.0.0-beta01") // #2
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
tasks.register("clean", Delete::class) { // #3
delete(rootProject.buildDir)
}
ここでの主な変更点は、私は、コード内で特定されている、の三点です。
- extはvalを、valはKotlin不変変数のキーワードで変更しました
- 二重引用符に単一引用符クラスパス
- タスクはKotlinの構文を変更する必要があります
第三段階:アプリケーションのbuild.gradleファイルを変更します
同様に、最初にbuild.gradle
名前変更build.gardle.kts
変更は、直接コードの変更で、あるより多くのここで実行する必要があります。
plugins { // #1
id("com.android.application")
kotlin("android")
kotlin("android.extensions")
}
android {
compileSdkVersion(29) // #2
buildToolsVersion("29.0.3")
defaultConfig {
applicationId = "com.bluelzy.kotlindsldemo"
minSdkVersion(21)
targetSdkVersion(29)
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") { // #3
isMinifyEnabled = false
proguardFiles (getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
}
dependencies {
implementation(
fileTree( // #4
mapOf(
"dir" to "libs", "include" to listOf("*.jar")
)
)
)
implementation (kotlin(
"stdlib-jdk7",
org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION
))
implementation("androidx.core:core-ktx:1.2.0")
implementation("androidx.appcompat:appcompat:1.1.0")
implementation("androidx.constraintlayout:constraintlayout:1.1.3")
testImplementation("junit:junit:4.12")
androidTestImplementation("androidx.test.ext:junit:1.1.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0")
}
ノートの外にもある注意が必要な領域を特定します
- プラグインを変更する必要が適用されます
- オリジナル:セッター構文kotlinすべてに変更文言()または=、
- 変更buildTypesとfileTreeに注意してください。
これらの手順を完了した後、我々は予期しない何も起こらない場合は、次に我々は、成功する必要があります実際には、これまでのところ、我々は成功しKotlin DSLへのGroovyから移行された、同期プロジェクトをクリックすることができます。しかし、私は、それを管理し、これらの変数が一箇所に統一されて置くことができ、build.gradle.ktsファイルに直接書き込まれTargetSDKなどバージョン依存の問題、今すべての私たちのバージョンを、発見していません?特定のAの複数のモジュールでは、我々だけで場所を変更したい、すべての依存関係を同期させることができます。
実際には、当局者がソリューションを提供してくれているし、それが使用することですBUILDSRCを
四ステップ:フォルダBUILDSRCを作成します。
BUILDSRCは同じレベルとアプリファイルフォルダで、ルートディレクトリにフォルダを作成します。結果を作成すると、次のようになります。
あなたは3つのファイル内の最初のKotlinフォルダを無視することができます。長いそれに作成のsrc /メイン/ kotlinとbuild.gradle.ktsファイルのように。
次のステップは変更することですbuild.gradle.kts
ファイル:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
このBUILDSRCフォルダの役割はそれが何であるかを説明して?
公式には、私たちが言っているプロジェクトの依存関係を管理するには、このフォルダを使用して、我々はクラスに関連付けられているロードキングと依存性以上のものを定義することができますお勧めします。
ファイルを作成しますDependencies.kt
object Apps {
const val compileSdk = 29
const val minSdk = 21
const val targetSdk = 29
const val versionCode = 1
const val versionName = "1.0.0"
}
object Versions {
const val gradle = "3.5.3"
const val kotlin = "1.3.61"
const val appcompat = "1.0.2"
/* test */
const val junit = "4.12"
}
object Libs {
const val kotlin = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}"
const val appcompat = "androidx.appcompat:appcompat:${Versions.appcompat}"
}
object TestLibs {
const val junit = "junit:junit:${Versions.junit}"
}
例えば、我々は、App依存関連するバージョン番号、および名前の依存関係を関連付けられているバージョン番号を格納するために、それぞれ、3つのシングルトンをKT、この文書で定義されています
その後、我々は、Appのbuild.gradle.kts内で過ごすことができ、これらの定数を定義します
更新build.gradle.kts:
// 省略代码
android {
compileSdkVersion(Apps.compileSdk)
defaultConfig {
applicationId = "com.bluelzy.kotlindsldemo"
minSdkVersion(Apps.minSdk)
targetSdkVersion(Apps.targetSdk)
versionCode = Apps.versionCode
versionName = Apps.versionName
}
// 省略代码
}
dependencies {
// android supports
implementation(Libs.appcompat)
// test
testImplementation(TestLibs.junit)
}
上記の書類は、あなたがDependencies.ktファイルに自分自身を追加することができ、完全なものではなく、ファイルは、プロジェクトの依存関係に従ってbuild.gradle.ktsを更新することができます。
このプロジェクトは、より多くのModlueよりも、だけでなく、関係にある場合は、我々は応じて異なる管理のためのBUILDSRC / srcに/メイン/ kotlinディレクトリにいくつかのカラットのマルチファイルを定義することができますので、非常に複雑です。ここでは行われません。
概要
実際には、手順は、それが3つのGradleの関連改名.ktsにファイルがあるGroovyのは比較的簡単である代わりにKotlin DSLを使用して、構文Kotlinを修正し、最終的にBUILDSRCは、ディレクトリ内のファイルの依存関係のカラットを作成します。
しかし、あなたはまた、例として、私の個人的な経験を疑問視し、その過程でいくつかの問題が発生します
1.プロジェクトは、成功した構築します正常に動作することができますが、アプリケーションのbuild.gradle.ktsファイルのandroid
ラベルとimplementation
エラーとなっているが、同様の問題を解決することはできませんキャッシュをクリアし、AS、クリーンなプロジェクトを再起動します。
この問題が発生した場合、その後、あなたはGradleのバージョンを変更しようとすることができ、バージョンのGradleは、私が使用して作成したプロジェクトを開始しました:
Gradleでは:4.0.0-beta01
のGradleラッパー:https://services.gradle.org/distributions/gradle-6.1.1-all.zip
これは、バグの新しいバージョンであってもよいし、見つけることができませんどのようにandroid
私はGradleのにダウングレードされますバック:
Gradleのバージョン:3.5.3
Gradleのラッパーのバージョン:5.6.4
そして、それを
2. [変更build.gradle.ktsファイルは、プロセスで見つかった、それはGradleのパネルを開くことができ、この時、文句を言うでしょうbuild setup
実行するオプションをinit
最後に、build.gradle.ktsファイルの使用を添付Kotlin DSLのスクリーンショットは、それ以前よりもずっと明確ではないでしょうか?