Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
build.gradle.ktsの内容を モジュール間で共有化する
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takafumi Kanda
April 12, 2019
Technology
950
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
build.gradle.ktsの内容を モジュール間で共有化する
Takafumi Kanda
April 12, 2019
More Decks by Takafumi Kanda
See All by Takafumi Kanda
FlutterでのMaterial You対応の状況と今後の展望 / The status and plan of Flutter's Material You support
kafumi
2
5.4k
Other Decks in Technology
See All in Technology
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
370
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
1k
書籍『生成AIの安全性入門』の入門
wataoka
0
220
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
240
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
240
Webとヘルスデータ
yukukotani
0
190
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
160
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
130
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
240
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
830
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
110
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
KATA
mclloyd
PRO
35
15k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
A Soul's Torment
seathinner
7
3.5k
Practical Orchestrator
shlominoach
191
12k
Statistics for Hackers
jakevdp
799
230k
Producing Creativity
orderedlist
PRO
348
41k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
Deep Space Network (abreviated)
tonyrice
0
290
Transcript
build.gradle.ktsͷ༰Λ ϞδϡʔϧؒͰڞ༗Խ͢Δ @kafumi
ࣗݾհ • ਆా ਸ࢙ (͔Μͩ ͔ͨ;Έ) • Twitter: @kafumi__ •
GitHub: @kafumi • ࢈ࣗಈंגࣜձࣾ @ தࠇ • όοΫΤϯυɾiOSɾAndroidΤϯδχΞઈࢍืूத
ࠓͷ • ϚϧνϞδϡʔϧϓϩδΣΫτͰ • GradleεΫϦϓτͷهड़ʹKotlin DSLΛ͍ͬͯΔ߹ʹ • GradleεΫϦϓτͷ༰ΛϞδϡʔϧؒͰͲ͏ͬͯ ڞ௨Խ͢Δ͔
αϯϓϧίʔυ • https://github.com/kafumi/android-kotlin-gradle-sample • ํ๏1: Kotlin֦ுؔΛ͏ํ๏ kotlin-extϒϥϯν • ํ๏2: precompiled
script pluginΛ͏ํ๏ precompiled-scriptϒϥϯν
ఆ͢ΔϓϩδΣΫτ :app :featureA :featureB :data :model • τοϓϨϕϧͷΞϓϦϞδϡʔϧ • ApplicationΫϥεɺDIͷઃఆͳͲΛ͢Δ
• ػೳ͝ͱʹׂ͞ΕͨػೳϞδϡʔϧ • ͍ΘΏΔPresentationͷΫϥεؚ͕·ΕΔ • σʔλI/OΛ࣮͢Δ • ϞδϡʔϧؒͰڞ༗͍ͨ͠σʔλΫϥεΛ ఆٛ͢Δ
ఆ͢ΔϓϩδΣΫτ :app :featureA :featureB :data :model • τοϓϨϕϧͷΞϓϦϞδϡʔϧ • ApplicationΫϥεɺDIͷઃఆͳͲΛ͢Δ
• ػೳ͝ͱʹׂ͞ΕͨػೳϞδϡʔϧ • ͍ΘΏΔPresentationͷΫϥεؚ͕·ΕΔ • σʔλI/OΛ࣮͢Δ • ϞδϡʔϧؒͰڞ༗͍ͨ͠σʔλΫϥεΛ ఆٛ͢Δ
buildSrcΛ͏ • buildSrc • ࣗಈతʹίϯύΠϧ͞Εͯɺશ ϞδϡʔϧͷGradleεΫϦϓτ ͷґଘઌͱͯ͠ΘΕΔ • ͭ·ΓɺbuildSrcͰఆٛͨ͠ ͷɺશϞδϡʔϧͷGradle
εΫϦϓτ͔Β͑Δ
ྫ: DependencyఆٛΛ ఆͱͯ͠ڞ௨Խ͢Δ object Versions { !// … !//
Google libraries const val appCompat = "1.0.2" const val constraintLayout = "1.1.3" const val lifecycle = "2.0.0" !// 3rd-party libraries const val timber = "4.7.1" } object Deps { !// … object AndroidX { const val appCompat = "androidx.appcompat:appcompat:${Versions.appCompat}" const val constraintLayout = "androidx.constraintlayout:constraintlayout:$ {Versions.constraintLayout}" const val lifecycle = "androidx.lifecycle:lifecycle-extensions:${Versions.lifecycle}" } !// … } buildSrc/src/main/kotlin/Dependencies.kt
ྫ: DependencyఆٛΛ ఆͱͯ͠ڞ௨Խ͢Δ dependencies { implementation(project(":featureA")) !// Kotlin implementation(Deps.Kotlin.stdlibJdk) !//
Debug utilities implementation(Deps.Debug.timber) } app/build.gradle.kts featureA/build.gradle.kts dependencies { implementation(project(":data")) implementation(project(":model")) !// Kotlin implementation(Deps.Kotlin.stdlibJdk) !// AndroidX implementation(Deps.AndroidX.appCompat) implementation(Deps.AndroidX.constraintLayout) implementation(Deps.AndroidX.lifecycle) !// Debug utilities implementation(Deps.Debug.timber) }
None
ͬͱڞ௨Խ͍ͨ͠
buildSrcΛͬͱ͏ • ํ๏1: ڞ༗෦ΛbuildSrcʹ֦ுؔͱͯ͠ఆٛ͢Δ • ํ๏2: ڞ༗෦ΛPrecompiled script pluginͱͯ͠ఆٛ͢ Δ
ํ๏1: ֦ுؔ https://inside.pixiv.blog/makun/6409
ํ๏1: ֦ுؔ fun KotlinBuildScript.applyAndroidLibrary() { androidLibrary { compileSdkVersion(Versions.compileSdk) buildToolsVersion(Versions.buildTools) defaultConfig
{ minSdkVersion(Versions.minSdk) targetSdkVersion(Versions.targetSdk) } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } buildTypes { getByName("release") { isMinifyEnabled = false consumerProguardFile(file("proguard-rules.pro")) } } libraryVariants.all { generateBuildConfigProvider!?.configure { isEnabled = false } } } buildSrc/src/main/kotlin/AndroidConfigurations.kt GradleεΫϦϓτ KotlinBuildScriptΫϥεͷϝ ιουͱ࣮ͯ͠ߦ͞Ε͍ͯΔ ͷͰɺಉΫϥεͷ֦ுؔͱ ͯ͠ڞ༗෦Λఆٛ
ํ๏1: ֦ுؔ fun KotlinBuildScript.applyAndroidLibrary() { androidLibrary { compileSdkVersion(Versions.compileSdk) buildToolsVersion(Versions.buildTools) defaultConfig
{ minSdkVersion(Versions.minSdk) targetSdkVersion(Versions.targetSdk) } compileOptions { … buildSrc/src/main/kotlin/AndroidConfigurations.kt ϓϥάΠϯ͕ఏڙ͢ΔΫϥε ͷΞΫηα͕ࣗಈੜ͞Ε ͳ͍ͷͰɺࣗͰఆٛ͢Δඞ ཁ͕͋Δ internal fun Project.android(configure: BaseAppModuleExtension.() !-> Unit): Unit = (this as ExtensionAware).extensions.configure("android", configure) internal fun Project.androidLibrary(configure: LibraryExtension.() !-> Unit): Unit = (this as ExtensionAware).extensions.configure("android", configure) internal fun Project.kotlin(configure: KotlinProjectExtension.() !-> Unit): Unit = (this as ExtensionAware).extensions.configure("kotlin", configure) buildSrc/src/main/kotlin/Accessors.kt
ڞ༗෦Λ applyAndroidLibrary() ݺͼग़͠ʹஔ͖͑ΒΕΔ
͕ࠩ͋Δͱ͜Ζ͚ͩɺ֤ϞδϡʔϧͷεΫϦϓτʹॻ͚Α͘ͳΔ
͕ࠩ͋Δͱ͜Ζ͚ͩɺ֤ϞδϡʔϧͷεΫϦϓτʹॻ͚Α͘ͳΔ plugins෦ ڞ༗ԽͰ͖ͳ͍͔
ํ๏2: Precompiled script plugin • buildSrcͷ *.gradle.kts ֦ுࢠͷϑΝΠϧɺϓϥάΠ ϯͱͯ͠ίϯύΠϧ͞ΕΔ •
௨ৗͷ build.gradle.kts ͱಉ͡ه๏͕͑Δ • plugins (ଞͷϓϥάΠϯͷ apply) ఆٛͰ͖Δ • Gradle 5.3͔Β (͖ͬͨ͞͠Α͏ͳ) ΞΫηα͕ࣗಈੜ ͞ΕΔΑ͏ʹͳͬͨʂ
ํ๏2: Precompiled script plugin import org.gradle.api.JavaVersion plugins { id("com.android.library") id("kotlin-android")
} android { compileSdkVersion(Versions.compileSdk) buildToolsVersion(Versions.buildTools) defaultConfig { minSdkVersion(Versions.minSdk) targetSdkVersion(Versions.targetSdk) } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } buildTypes { getByName("release") { isMinifyEnabled = false consumerProguardFile(file("proguard-rules.pro")) } } ↗ ʹଓ͘ ↙ ͔Βଓ͘ libraryVariants.all { generateBuildConfigProvider!?.configure { isEnabled = false } } } kotlin { sourceSets.all { languageSettings.progressiveMode = true } } buildSrc/src/main/kotlin/ android-library.gradle.kts
ڞ༗෦Λ `android-library` ϓϥάΠϯͷ apply ʹஔ͖͑ΒΕΔ
·ͱΊ • ϞδϡʔϧؒͰbuild.gradle.ktsͷ༰Λڞ௨Խ͢Δʹओ ʹ2ͭͷํ๏͕͋Δ • ํ๏1: ڞ༗෦ΛbuildSrcʹ֦ுؔͱͯ͠ఆٛ͢Δ • ํ๏2: ڞ༗෦ΛPrecompiled
script pluginͱͯ͠ఆٛ ͢Δ • Gradle 5.3Ҏ߱Ͱ͋Εɺํ๏2ͷ΄͏͕Αͦ͞͏