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
930
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
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
160
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
0
110
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
0
340
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
240
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
0
790
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
700
product engineering with qa
nealle
0
140
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
140
AI駆動開発におけるQAエンジニアの役割事例 〜AI駆動開発の現場から〜
kobayashiyorimitsu
0
320
Mastraエージェント、どのクラウドにデプロイする?
minorun365
PRO
2
170
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
140
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
55k
New Earth Scene 8
popppiees
3
2.4k
First, design no harm
axbom
PRO
2
1.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
エンジニアに許された特別な時間の終わり
watany
107
250k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Discover your Explorer Soul
emna__ayadi
2
1.2k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Everyday Curiosity
cassininazir
0
250
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
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ͷ΄͏͕Αͦ͞͏