Slide 1

Slide 1 text

build.gradle.kts KotlinConf 2018 報告会

Slide 2

Slide 2 text

About Me ● Matthew Vern / Panini ● Twitter: @callipan Github: panpanini ● Mercari, Inc ● Android Engineer (US) ● Kotlin可愛い

Slide 3

Slide 3 text

Summary ● build.gradle → build.gradle.kts に書き換えた結果 ○ autocompleteなどを使える ○ 書き換えるところでちょっと苦労する ● 99% 問題なくうごく

Slide 4

Slide 4 text

kotlin-dsl

Slide 5

Slide 5 text

kotlin-dsl ● build.gradleをKotlinで書けるplugin ○ https://github.com/gradle/kotlin-dsl ○ https://blog.gradle.org/kotlin-meets-gradle

Slide 6

Slide 6 text

How to ● No auto-convert ● Almost the same as Groovy, so can copy-paste, or write by hand

Slide 7

Slide 7 text

tips

Slide 8

Slide 8 text

Tips ● buildSrc/src/main/java ○ 普通のkotlinファイルおける → compileTaskでコンパイルされる ○ Build.gradle.ktsで使える ● Dependency managementに良い

Slide 9

Slide 9 text

buildSrc/Credentials.kt object Credentials { val hogeUsername = System.getProperty("hoge_username") val hogePassword = System.getProperty("hoge_password") }

Slide 10

Slide 10 text

buildSrc/Dependencies.kt object Versions { val supportLibrary = "27.1.0" ... } object Dependencies { // support val supportV4 = "com.android.support:support-v4:${Versions.supportLibrary}" }

Slide 11

Slide 11 text

buildSrc/Dependencies.kt object Dependencies { ... } object DebugDependencies { ... } object ReleaseDependencies { ... }

Slide 12

Slide 12 text

buildSrc/Dependencies.kt object Plugins { val unusedResourceRemover = "com.github.konifar.gradle.unused-resources-remover" }

Slide 13

Slide 13 text

app/build.gradle.kts plugins { id(Plugins.unusedResourceRemover) } repositories { maven("https://hoge.com/gradle/gradle-release/") { credentials.username = Credentials.hogeUsername credentials.password = Credentials.hogePassword } } dependencies { implementation(Dependencies.supportV4) releaseImplementation(ReleaseDependencies.hoge) }

Slide 14

Slide 14 text

pain points

Slide 15

Slide 15 text

app/build.gradle buildScript { dependencies { classpath(BuildScriptDependencies.removeResourcesPlugin) } } plugins { id(Plugins.unusedResourceRemover) }

Slide 16

Slide 16 text

app/build.gradle FAILURE: Build failed with an exception. * Where: Build file '/app/build.gradle.kts' line: 4 * What went wrong: Script compilation error: Line 4: classpath(BuildScriptDependencies.removeResourcesPlugin) ^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public final fun DependencyHandler.classpath(dependencyNotation: Any): Dependency? defined in org.gradle.kotlin.dsl.ScriptHandlerScope

Slide 17

Slide 17 text

app/build.gradle buildScript { dependencies { classpath(BuildScriptDependencies.removeResourcesPlugin) } } plugins { id(Plugins.unusedResourceRemover) }

Slide 18

Slide 18 text

app/build.gradle buildScript { dependencies { classpath(BuildScriptDependencies.removeResourcesPlugin) } } plugins { id(Plugins.unusedResourceRemover) }

Slide 19

Slide 19 text

app/build.gradle ● Gradle: buildscript { } → 追加 ● Kotlin: buildscript { } → 上書き

Slide 20

Slide 20 text

app/build.gradle ● Gradle: buildscript { } → 追加 ● Kotlin: buildscript { } → 上書き ↳ buildscriptはroot/build.gradle.ktsで書く

Slide 21

Slide 21 text

app/build.gradle ● Gradle: buildscript { } → 追加 ● Kotlin: buildscript { } → 上書き ↳ buildscriptはroot/build.gradle.ktsで書く 本当にこれでいいのか分からないので 他にいいアイデアあれば是非聞かせて ください!

Slide 22

Slide 22 text

app/build.gradle buildscript { classpath(BuildScriptDependencies.fabricPlugin) } plugins { id(Plugins.androidApplication) id(Plugins.fabric) ... }

Slide 23

Slide 23 text

app/build.gradle FAILURE: Build failed with an exception. IllegalStateException: 'android' or 'android-library' plugin required.

Slide 24

Slide 24 text

app/build.gradle FAILURE: Build failed with an exception. IllegalStateException: 'android' or 'android-library' plugin required. plugins { } を使うと同時にapplyされるっぽい

Slide 25

Slide 25 text

app/build.gradle FAILURE: Build failed with an exception. IllegalStateException: 'android' or 'android-library' plugin required. plugins { } を使うと同時にapplyされるっぽい この問題gradle-4.10.2で 治ってるっぽい!

Slide 26

Slide 26 text

まとめ

Slide 27

Slide 27 text

まとめ ● build.gradleはKotlinで書こう! ● 動くよ! ● そんなに罠がないよ!

Slide 28

Slide 28 text

Have a nice Kotlin!