Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
CVJMEHSBEMFLUTʹҠߦ͠Α͏ !UOK :VLJ'VKJTBLJ %FQMPZ(BUF*OD %SPJE,BJHJ %BZ 3PPN
Slide 2
Slide 2 text
ର build.gradleΛ,PUMJOԽͯ͠Έ͍ͨ (SBEMF (SPPWZ ͳΜͱͳ͘ॻ͍͍ͯΔ ,PUMJOͩͬͨΒॻ͚ͦ͏
Slide 3
Slide 3 text
͜ͷͷΰʔϧ ,PUMJOԽͷϝϦοτΛΔ build.gradle.ktsʹҠߦ͢Δ࠶ݱՄೳͳखॱΛΔ Α͋͘ΔͱରԠࡦΛΔ ͞ͳ͍͜ͱ ߴԽʢߏճආ"1*ͳͲʣϦϑΝΫλϦϯά
Slide 4
Slide 4 text
ΞδΣϯμ (SBEMF,PUMJO%4-ʹ͍ͭͯ ,PUMJOԽͰخ͍͜͠ͱ ࣮ࡍͷҠߦ جૅฤ ࣮ફฤ
Slide 5
Slide 5 text
ڥ "OESPJE4UVEJP "OESPJE(SBEMF1MVHJO (SBEMF (SBEMF,PUMJO%4-3$ ݱ࣌Ͱ࠷৽3$ (SBEMF,PUMJO%4- ͬͯΔϓϥάΠϯ͕(SBEMFܥରԠͯ͠Ε࠷৽͕Φεεϝ ࡢ ϦϦʔε
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
(SBEMF,PUMJO%4-ʹ͍ͭͯ (SBEMFͰϦϦʔε (SBEMFϏϧυεΫϦϓτΛ,PUMJOεΫϦϓτ LUT Ͱॻ͚Δ (SBEMFຊମػೳͷҰ෦ͱͯ͠ఏڙ͞ΕΔ ,PUMJOεΫϦϓτͷίϯύΠϥࣗମຒΊࠐΈ (SPPWZ͕%FQSFDBUFEʹͳΔ༧ఆͳ͍
Slide 8
Slide 8 text
,PUMJOʹͳͬͯخ͍͜͠ͱ %FWFMPQFS&YQFSJFODF͕ߴ͍ ίʔυิ͕ޮ͘ɺΤϥʔݕ͕ࠪಇ͍ͯ͘ΕΔ ॻ͍ͯΔίʔυͷϑΟʔυόοΫ͕ߴ ϝϯς͍͢͠ ܕ͕͋ΔɺϦϑΝΫλ͕Ͱ͖Δ
Slide 9
Slide 9 text
ͭ·Γ*%&͕ͪΌΜͱࣄ͢Δ
Slide 10
Slide 10 text
ઓུ ४උ·ͣΛ͑Δ "(1ରԠ (SPPWZͷ··Ұ୴εΫϦϓτΛཧ ҠߦϏϧυ͕௨Δঢ়ଶΛҡ࣋͠ͳ͕ΒҠߦ શ෦ΛҰʹΒͳ͍(SPPWZͱ,PUMJOڞଘՄ
Slide 11
Slide 11 text
جૅฤ ·ͣϓϨʔϯͳϓϩδΣΫτͰޭମݧΛੵΉ
Slide 12
Slide 12 text
ର "OESPJE4UVEJPͰ#BTJD"DUJWJUZϓϩδΣΫτ σϑΥϧτઃఆ -BOHVBHF,PUMJO ͷ··࡞Δ
Slide 13
Slide 13 text
ͭͷ(SBEMFεΫϦϓτ "OESPJE(SBEMF1MVHJOΛͬ ͨΫϦʔϯͳϓϩδΣΫτ ·ͣϏϧυ͕௨ΓɺΞϓϦΛ ىಈͰ͖Δ͜ͱΛ֬ೝ
Slide 14
Slide 14 text
༨ஊ 6TF"OESPJE9BSUJGBDUTΛ༗ޮʹͯ͠ΔͱΞϓϦ͕ଈࢮ͠·͢ // ͍͕ͭ͜൜ਓɺ1.1.3ʹ্͛·͠ΐ͏ implementation "androidx.constraintlayout:constraintlayout:1.1.2"
Slide 15
Slide 15 text
ॻ͖͑ͯΈΑ͏ ⾣TFUUJOHTHSBEMF ⌛ CVJMEHSBEMF ⌛ BQQCVJMEHSBEMF
Slide 16
Slide 16 text
TFUUJOHTHSBEMFߦ include ':app' จࣈྻϦςϥϧ(SPPWZ'ͱ"ͷ྆ํɺ,PUMJO"ͷΈ ϝιουݺͼग़͠(SPPWZ()ΛলུՄɺ,PUMJOͰඞਢ "..."ʹͯ͠()Λ͚ΕͲͪΒͰಈ͘
Slide 17
Slide 17 text
(SPPWZͷ·· ‑ ฤूͨ͠ΒҰ୴ Sync ͠·͢
Slide 18
Slide 18 text
4ZODͷํ๏ ώϯτతʹग़ͯ͘Δ4ZOD/PXϦϯΫ
Slide 19
Slide 19 text
4ZODͷํ๏ πʔϧόʔͷ4ZOD1SPKFDUXJUI(SBEMF'JMFT ͜ͷϘλϯΛ͓͖֮͑ͯ·͠ΐ͏
Slide 20
Slide 20 text
௨ͬͨΒɺϑΝΠϧ໊Λมߋͯ͠ΈΔ 1SPKFDUπϦʔ͔Βsettings.gradleΛϦωʔϜ 4IJGU' build.gradle.ktsʹม͑·͢ Ҿ໊ώϯτ͕ग़͖ͯͯಥવ*%&ͷཧղ͕͏ͳ͗ొΓ
Slide 21
Slide 21 text
ࢼ͠ʹଘࡏ͠ͳ͍ࣝผࢠΛॻ͍ͯΈΔ (SPPWZWT,PUMJO ͘ͳΔʂؒҧͬͯΔ͜ͱΛͦͷͰࢦఠͯ͘͠ΕΔ τϥΠΞϯυΤϥʔ͕രԽ
Slide 22
Slide 22 text
ॻ͖͍͑ͯ͘ ✅ TFUUJOHTHSBEMF ⾣CVJMEHSBEMF ⌛ BQQCVJMEHSBEMF
Slide 23
Slide 23 text
ϓϩδΣΫτϧʔτͷbuild.gradle
Slide 24
Slide 24 text
ػցతͳमਖ਼ ਖ਼نදݱνʔτγʔτ จࣈྻϦςϥϧ'([^']+)'"$1" ϝιουݺͼग़͠(classpath|delete) (\S+)$1($2)
Slide 25
Slide 25 text
4ZOD௨ͬͨΒϑΝΠϧ໊Λมߋ 1SPKFDUπϦʔ͔Β1SPKFDUͷbuild.gradleΛϦωʔϜ
Slide 26
Slide 26 text
ౖΒΕΔ ͦ͏қʑͱ,PUMJOͩͱೝΊͯ͘Εͳ͍ ͕ɺϦωʔϜ࣌ͰԿ͕ѱ͍ͷ͔ڭ͑ͯ͘ͳ͍
Slide 27
Slide 27 text
ΤϥʔΛΔ 4ZOD͢ΔͱίϯιʔϧʹΤϥʔ͕ग़Δ ҰґଘؔΛධՁͰ͖Δ·Ͱίʔυʹ৭͕͔ͳ͍
Slide 28
Slide 28 text
࠷ॳͷนext buildscript { ext.kotlin_version = "1.3.20" // => Unresolved reference: ext } extͳΜͯఆٛ͞Εͯͳ͍ͧͱݴΘΕΔ
Slide 29
Slide 29 text
ͦͦextͬͯ ΞυϗοΫʹ͖ͳΛಥͬࠐΊΔ,FZ7BMVF4UPSF Project ˺build.gradle ͕ࣗಈతʹ͍࣋ͬͯΔ extʹηοτͨ͠ޙProjectͷείʔϓͰࢀরՄೳ rootProjectͰηοτͨͯ͢͠ͷࢠProject͔Β ݟ͑Δ ࣮ߦॱংͷ্ؔbuildscript {}Ͱఆٛ͢Δඞཁ͕͋Δ
Slide 30
Slide 30 text
ಁաੑ buildscript { ext.kotlin_version = "1.3.20" } // ext είʔϓͰɺ Project είʔϓͰࢀরͰ͖Δ println ext.kotlin_version // => "1.3.20" println kotlin_version // => "1.3.20" SPPU1SPKFDUͰఆٛͨ͠ଞͷ1SPKFDU͔ΒࢀরͰ͖Δ // app/build.gradle println kotlin_version // => "1.3.20" println rootProject.kotlin_version // => "1.3.20"
Slide 31
Slide 31 text
Ұํ,PUMJO੩తܕ͚ݴޠ ͍͖ͳΓೖ͠Α͏ͱͯ͠ະఆٛͷϓϩύςΟͱݟ၏͞ΕΔ
Slide 32
Slide 32 text
ٹੈओextra ExtraPropertiesExtensionsͰఏڙ͞ΕΔҕৡϓϩύςΟ มͱͯ͠ࢀরͭͭ͠ɺ෦ͰextͷTFUHFUΛҕৡ ܕਪ͕ޮ͘
Slide 33
Slide 33 text
͜͜Λॻ͖͑Δ͚ͩͰੈքʹ৭͕ʂ
Slide 34
Slide 34 text
࣍ͷนtasksͷमਖ਼ taskͷఆٛͷߏจมߋ // Groovy task clean(type: Delete) {} ɹɹɹɹɹɹ‑ // Kotlin tasks.create("clean", type = Delete::class) {} // or task("clean") {}
Slide 35
Slide 35 text
#&'03&CVJMEHSBEMF
Slide 36
Slide 36 text
"'5&3CVJMEHSBEMFLUT !
Slide 37
Slide 37 text
ॻ͖͍͑ͯ͘ ✅ TFUUJOHTHSBEMF ✅ CVJMEHSBEMF ⾣BQQCVJMEHSBEMF
Slide 38
Slide 38 text
BQQCVJMEHSBEMF
Slide 39
Slide 39 text
ಉ͡Α͏ʹԼ͝͠Β͑ จࣈྻ '([^']+)'ˠ"$1" ϝιουݺͼग़͠ ()Λ͚͍ͨɺΜ͚ͩͲʜ
Slide 40
Slide 40 text
͜Εೖ ϝιουݺͼग़͠ applicationId "sh.nothing.myapplication" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" ϝιουݺͼग़͠ͷ()ΛলུͰ͖Δ ϓϩύςΟೖͷ=ΛলུͰ͖Δ ݟͨͷ۠ผ͕͔ͳ͍ʂ
Slide 41
Slide 41 text
ެࣜҠߦΨΠυͷઓུ ʮ໎ͬͨΒҰ୴ೖʹͯ͠ɺౖΒΕͨΒݺͼग़͠ʹ͢͠ʯ
Slide 42
Slide 42 text
͘͠*%&ͷྗʹཔΔ ϝιουͩͬͨΒ$PNNBOE͘͠$USMΛԡ͠ͳ͕Β ϚεΧʔιϧΛ߹ΘͤΔͱఆ͕ٛҾ͚Δ ͜ͷ߹setMinifyEnabled(false)
Slide 43
Slide 43 text
νʔτγʔτ (\w+(?:ion|Files)) (.+)$$1($2) ϓϩδΣΫτॳظઃఆͷ··Ͱ͋Ε͜ΕͰย͖·͢
Slide 44
Slide 44 text
ՃͷԼ͝͠Β͑ จࣈྻͱϝιουݺͼग़͠ʹՃ͑ͯ apply plugin:ʹखΛೖΕ͓͖͍ͯͨ
Slide 45
Slide 45 text
apply plugin:͔Βplugins {}ʹҠߦ // apply plugin: ܈Λ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' ɹɹɹɹɹɹ‑ // plugins ߏจʹॻ͖͑Δ plugins { id("com.android.application") id("kotlin-android") id("kotlin-android-extensions") }
Slide 46
Slide 46 text
plugins {}Ҡߦͷഎܠ (SBEMFϓϥάΠϯίʔυͰ࣮ߦ࣌ʹՃ͞ΕΔΈ ྫ"OESPJE(SBEMF1MVHJOͷandroid {}ϒϩοΫ project.extensions.add('android', BaseAppModuleExtension) 2Ͳ͏ͬͯ͜ΕΛ੩తʹղܾ͢Δͷ͔
Slide 47
Slide 47 text
"ΞΫηα͕ੜ͞ΕΔ ,PUMJO%4-͕&YUFOTJPO͔Β,PUMJOίʔυΛࣗಈੜ ͨͩ͠QMVHJOTͰఆٛ͞Εͨͷ͚ͩ ͳ͓(SBEMFݩʑ(SPPWZͰplugins {}Λਪ͍ͯ͠Δ
Slide 48
Slide 48 text
4ZOD௨ͬͨΒϑΝΠϧ໊Λมߋ 1SPKFDUπϦʔ͔Β.PEVMFBQQͷbuild.gradleΛϦωʔϜ
Slide 49
Slide 49 text
4ZODͯ͠ΤϥʔΛ֬ೝ ্͔Βॱʹ͍ͯ͘͠ ͨ͘͞Μग़Δ͚ͲɺͭͤෳݮΓ·͢ ࠓճͷ߹࣮࣭ͭ
Slide 50
Slide 50 text
MapͷҾ fileTree(dir: "libs", include: ["*.jar"]) ͬͯͳ͍ͷͰҰ୴ίϝϯτΞτͰΑͦ͞͏ ,PUMJOԽ fileTree("dir" to "libs", "include" to listOf("*.jar"))
Slide 51
Slide 51 text
buildTypes {}ͷఆٛ releasegetByName("release")ʹ ͠not foundͱݴΘΕͨΒɺcreate("release")ʹ ͪΐͬͱ໘͍͘͞
Slide 52
Slide 52 text
kotlin_version ͖ͬ͞Γ·ͨ͠ͶrootProjectͷextʜ // ͯ͢ͷ Project είʔϓͰݟ͑Δ val kotlin_version: String by project // ͘͠ `rootProject.extra` ͔Βऔಘ͍͍ͯ͠Ͱ͢ val kotlin_version: String by rootProject.extra
Slide 53
Slide 53 text
͜ΕͰLUTԽྃ !
Slide 54
Slide 54 text
جૅฤͷ ॱংTFUUJOHTHSBEMFˠCVJMEHSBEMFˠBQQCVJMEHSBEMF (SPPWZͷ··ઌʹԼ͝͠Β͑ จࣈྻΫΦʔτɺϝιουݺͼग़͠ɺplugins (SBEMFͷ֓೦ͱ(SPPWZͷ,PUMJOԽ extͱextra taskͷఆٛ getByNameͱcreate
Slide 55
Slide 55 text
جૅฤͷײ ׂͱ୯७ͳஔ͖͕͑ଟ͍ײ͡ ࢥͬͯͨΑΓɺ͍͚ͦ͏ͳײ͡ʁ ૣɺࣗͷϓϩδΣΫτͰࢼͯ͠ΈΑ͏
Slide 56
Slide 56 text
࣮ફฤ ࣮ࡍͷϓϩδΣΫτʹಋೖ͢Δ߹ͷোนͱରԠࡦͷհ
Slide 57
Slide 57 text
ࢼͯ͠ΈΑ͏ͱࢥͬͨɺΜ͚ͩͲͶ
Slide 58
Slide 58 text
͍͍ͩͨ͜͜ͰఘΊΔ ಀ͍͛ͨ .gradleϑΝΠϧͬͯؾ͕ͭ͘ͱ૿͑ͯΔΑͶ Ͱʂ࣮ࡍͷҠߦͷྲྀΕجૅฤͱ·ͬͨ͘ಉ͡ ࣮ફฤ్தͷোนͱͯ͋͠Γ͕ͪͳ՝ΛऔΓ্͛ͯհ
Slide 59
Slide 59 text
࣮ફฤτϐοΫ "OESPJE(SBEMF1MVHJOʹ্͛Δ ڊେextΛͳΜͱ͔͍ͨ͠ ࣮,PUMJOεΫϦϓτ͔Β(SPPWZεΫϦϓτΛݺΔ ϑΝΠϧͷඌʹapply plugin:͕͋Δ ͜ͷهड़ಈ͔ͳ͍ɺͲ͏͢Ε
Slide 60
Slide 60 text
࣮ફฤτϐοΫ "OESPJE(SBEMF1MVHJOʹ্͛Δ ڊେextΛͳΜͱ͔͍ͨ͠ ࣮,PUMJOεΫϦϓτ͔Β(SPPWZεΫϦϓτΛݺΔ ϑΝΠϧͷඌʹapply plugin:͕͋Δ ͜ͷهड़ಈ͔ͳ͍ɺͲ͏͢Ε
Slide 61
Slide 61 text
"(1Λʹ্͛Δ 3.3.1ʹͯ͠4ZOD
Slide 62
Slide 62 text
(SBEMF্͛ͯͶͱݴΘΕΔ (SBEMFҎ্͕ඞཁ Fix Gradle wrapper and re-import project͢Δ
Slide 63
Slide 63 text
͜͜ͰϏϧυ͕௨Βͳ͘ͳΔ߹ جຊ֤छϓϥάΠϯͷόʔδϣϯΛ্͛ͯղܾ ./gradlew --stacktrace͋ͨΓ͕ࢀߟʹͳΔͣ
Slide 64
Slide 64 text
࣌ͰͷҾ͔͔ͬΓϙΠϯτ google-servicesҎ্͕ඞਢ Ϗϧυ௨ͬͯΞϓϦ͕མͪͨΓɺ'BCSJD͕͏·͘ಈ͔ͳ ͔ͬͨΓ͢Δ android-junit5jacoco-android લऀ͕࠷৽ͷ1.3.2.0ͩͱಈ͔ͳ͍ɺ1.3.1.0ͳΒେৎ *TTVF
Slide 65
Slide 65 text
8"3/*/(͕ফ͑ͳ͍ ઃఆ͕ѱ͍Α͏ʹݟ͑Δ͚ͲɺରϓϥάΠϯͷ࣮ ϓϥάΠϯ։ൃऀͷΈΜͳ"(1ରԠͯ͘͠ΕཔΉ શͳΔϒʔϝϥϯ
Slide 66
Slide 66 text
"(1ʹ্͕ͬͨΒ settings.gradle͔ΒҠߦ͠͡ΊͯΈ·͠ΐ͏ جຊฤͱಉ͡Ͱॠࡴ include ['"]([^'"]+)['"]ˠinclude("$1")
Slide 67
Slide 67 text
࣮ફฤτϐοΫ "OESPJE(SBEMF1MVHJOʹ্͛Δ ڊେextΛͳΜͱ͔͍ͨ͠ ࣮,PUMJOεΫϦϓτ͔Β(SPPWZεΫϦϓτΛݺΔ ϑΝΠϧͷඌʹapply plugin:͕͋Δ ͜ͷهड़ಈ͔ͳ͍ɺͲ͏͢Ε
Slide 68
Slide 68 text
ڊେextΛͳΜͱ͔͍ͨ͠
Slide 69
Slide 69 text
extͷ··ͩͱׂͱਏ͍ ࢀর͕໘͍͘͞ val by extra࿈ൃ͠ΜͲ͍ΑͶ (SPPWZͷ··ׂͬͯͯͱෆศ ίʔυδϟϯϓͰ͖ͳ͍
Slide 70
Slide 70 text
ެࣜͷΦεεϝCVJME4SDʹΓग़ ͠·͠ΐ͏ CVJME4SDσΟϨΫτϦ ϏϧυεΫϦϓτ༻ͷಛผͳϓ ϩδΣΫτ தʹஔ͍ͨεΫϦϓτɺશͯ ͷ1SPKFDU͔ΒࢀরՄೳ ֤छఆࣗ࡞ͷϓϥάΠϯஔ ͖ʹ࠷ద
Slide 71
Slide 71 text
CVJME4SDࣄ࢝Ί σΟϨΫτϦΛ࡞Δ buildSrc/ ࠷ݶͷϑΝΠϧΛ࡞ buildSrc/settings.gradle.kts தۭ buildSrc/build.gradle.kts
Slide 72
Slide 72 text
CVJME4SDCVJMEHSBEMFLUT // kotlin-dslΛ༗ޮʹ͢Δ࠷ݶͷఆٛ plugins { `kotlin-dsl` } repositories { jcenter() }
Slide 73
Slide 73 text
extͷதΛҠ͢ buildSrc/src/main/kotlinʹDeps.ktΛ࡞ object Depsʹvalͱ֤ͯ͠छఆΛఆٛ
Slide 74
Slide 74 text
ར༻Օॴͷॻ͖͑ $kotlinVersion${Deps.kotlinVersion} Ұׅஔͱ͔ͰؤுΔ \$(\w+Version)ˠ\$\{Deps.$1\} rootProject\.ext\.(\w+)ˠDeps.$1
Slide 75
Slide 75 text
ࢀরͰ͖ΔΑ͏ʹͳͬͯศར
Slide 76
Slide 76 text
ͳΜ͔໘ͦ͘͞͏ͳͷ͕͋Δʜͬͯ࣌ ྫڥมgitͷใΛextʹಥͬࠐΉ ,PUMJOͰॻ͖͑Ε͍͍Μ͚ͩͲɺޙճ͠ʹ͍ͨ͠
Slide 77
Slide 77 text
ผϑΝΠϧʹΓग़ͯ͠͠·͏ ྫ͑ͦͷ··ci_vars.gradleͱͯ͠Γग़͢ ݩͷॴʹapply from: "ci_vars.gradle" ,PUMJOԽͯͦ͠ͷ··Ͱ͍͍ apply(from="ci_vars.gradle") ,PUMJO͔Β(SPPWZͷ(SBEMFϑΝΠϧΛݺΔʂ
Slide 78
Slide 78 text
࣮ફฤτϐοΫ "OESPJE(SBEMF1MVHJOʹ্͛Δ ڊେextΛͳΜͱ͔͍ͨ͠ ࣮,PUMJOεΫϦϓτ͔Β(SPPWZεΫϦϓτΛݺΔ ϑΝΠϧͷඌʹapply plugin:͕͋Δ ͜ͷهड़ಈ͔ͳ͍ɺͲ͏͢Ε
Slide 79
Slide 79 text
Ұ୴·ΔͬͱΓग़ͯ͠͠·͏ͱ͍͏େͳઓུՄೳ // app/build.gradle.kts apply(from="original.build.gradle") // ͜ͷ1ߦ͚ͩ ͦͷޙplugins {}ͱରԠ͢ΔઃఆΛҰͭͣͭҠ͍ͯ͘͠
Slide 80
Slide 80 text
ྫkapt {}͚ͩҠߦ // app/build.gradle.kts plugins { kotlin("kapt") } apply(from="original.build.gradle") kapt { useBuildCache = true }
Slide 81
Slide 81 text
Γग़͢ͱ͖ͷ੍ buildscript {} Γग़ͤͳ͍ ୯७ʹJODMVEFͯ͠ΔΘ͚Ͱͳ͘ϓϥάΠϯѻ͍ ϑΝΠϧ͝ͱʹผͷDMBTTMPBEFSʹͳΔ it instanceOf AppPlugin తͳఆ͕ਖ਼͘͠ಈ࡞͠ͳ͍ hasPlugin("com.android.application") 0,
Slide 82
Slide 82 text
࣮ફฤτϐοΫ "OESPJE(SBEMF1MVHJOʹ্͛Δ ڊେextΛͳΜͱ͔͍ͨ͠ ࣮,PUMJOεΫϦϓτ͔Β(SPPWZεΫϦϓτΛݺΔ ϑΝΠϧͷඌʹapply plugin:͕͋Δ ͜ͷهड़ಈ͔ͳ͍ɺͲ͏͢Ε
Slide 83
Slide 83 text
ඌʹ͋Δ͜Ε apply plugin: "com.google.gms.google-services" plugins {}ʹॻ͘ͱͦͷ࣌Ͱapply͞Εͯ͠·͏ ਖ਼͘͠ಈ࡞͠ͳ͍
Slide 84
Slide 84 text
idએݴʹapply falseΛ༩ apply plugin:ݩͷҐஔʹஔ͍ͨ·· plugins { // Groovy id "com.google.gms.google-services" apply false } plugins { // Kotlin id("com.google.gms.google-services") apply false }
Slide 85
Slide 85 text
࣮ફฤτϐοΫ "OESPJE(SBEMF1MVHJOʹ্͛Δ ڊେextΛͳΜͱ͔͍ͨ͠ ࣮,PUMJOεΫϦϓτ͔Β(SPPWZεΫϦϓτΛݺΔ ϑΝΠϧͷඌʹapply plugin:͕͋Δ ͜ͷهड़ಈ͔ͳ͍ɺͲ͏͢Ε
Slide 86
Slide 86 text
repositories {}ฤ ଟਅͬઌʹҾ͔͔ͬΔͭ maven { url "https://plugins.gradle.org/m2/" } ɹɹɹɹɹɹɹɹ‑ maven("https://plugins.gradle.org/m2/") RepositoryHandlerExtensions Ͱ֦ு͞Ε͍ͯΔ maven ivy
Slide 87
Slide 87 text
sourceSets {}ฤ sourceSets { // Groovy main.java.srcDirs += 'src/main/kotlin' } ɹɹɹɹɹɹɹɹ‑ sourceSets { // Kotlin getByName("main").java.srcDirs("src/main/kotlin") } (SPPWZ·ͬͨ͘ಉ͡ίʔυ͕௨Δ
Slide 88
Slide 88 text
testOptions {} testOptions { unitTests { /* Closure Λظ͞ΕͯΔ */ } }
Slide 89
Slide 89 text
ίʔυδϟϯϓͯ͠ΈΔ UnitTestOptions ܕͷઃఆΛ͢Δ$MPTVSFΒ͍͠ ͜ͷܕใΛ,PUMJO%4-ʹ༩͑Δඞཁ͕͋Δ
Slide 90
Slide 90 text
delegateClosureOf Ͱғͬͯ͋͛Δͱ unitTests( delegateClosureOf {} ) ແࣄઃఆͰ͖ΔΑ͏ʹ
Slide 91
Slide 91 text
ઃఆ͕·ͬͨ͘ॻ͚ͳ͍ &YUFOTJPO͕ෆՄࢹͳέʔε ྫHSBEMFBOESPJESJCCPOJ[FSQMVHJO this: Anyʜͩͱʜ
Slide 92
Slide 92 text
&YUFOTJPOʹQVCMJD͕໌ࣔ͞Εͯͳ͍ͭ ribbonizerJTOPUBDDFTTJCMFJOBUZQFTBGFXBZCFDBVTF RibbonizerExtensionJTOPUQVCMJD (SPPWZͩͱΞΫηεͰ͖ΔΜ͚ͩͲͶʜ
Slide 93
Slide 93 text
࠷ޙͷखwithGroovyBuilderΛ͏ จࣈྻͰઃఆʹΞΫηεʢܕҾͷݕ͕ࠪޮ͔ͳ͍ʣ ribbonizer { forcedVariantsNames("release") } ɹɹɹɹɹɹɹɹɹ‑ ribbonizer { withGroovyBuilder { "forcedVariantsNames"("release") } }
Slide 94
Slide 94 text
༨ஊΓӽ͑ͯࡉ͔͍ઃఆ͕Ͱ͖ͳ͔ͬͨͷͰ gradle-android-ribbonizer-pluginʹγϡοͱ1VMM3FRVFTU Λ͛·ͨ͠
Slide 95
Slide 95 text
࣮ફฤ·ͱΊ ·ͣ"(1ʹ্͛Δ ڊେextΑΓCVJME4SDʹ͢Δͱศར applyԆͤ͞ΒΕΔ େ͖ͳεΫϦϓτΓग़ͤΔ Α͋͘Δهड़ͷॻ͖͑ύλʔϯΛѲ
Slide 96
Slide 96 text
େମ͜͜·ͰཧղͰ͖ͯΕ ΄ͱΜͲͷbuild.gradleΛ,PUMJOԽͰ͖Δͣ Ͳ͏ͯ͠μϝͳ(SPPWZʹ͢
Slide 97
Slide 97 text
͓·͚ෆ۩߹ͬΆ͍ͷରԠࡦ ಥવkaptౖ͕Γग़͢ 'BCSJD1MVHJOͷalwaysUpdateBuildId্͕ख͘ಈ͔ͳ͍
Slide 98
Slide 98 text
ಥવLBQUౖ͕Γग़͢ ݱ4ZODͰ͖͕ͨɺΞϓϦΛϏϧυ͢ΔͱLBQUౖ͕Γग़͠ ͯϏϧυ͕௨Βͳ͍ error: incompatible types: NonExistentClass cannot be converted to Annotation @error.NonExistentClass() ^ ݪҼandroid-extensionsͷઃఆ͕ө͞Εͳ͍ isExperimental = trueͬͯॻ͍ͯΔͷʹө͞Εͯͳ͍
Slide 99
Slide 99 text
ճආࡦ configure(delegateClosureOf {}) Ͱғ͏
Slide 100
Slide 100 text
,5 IUUQTHJUIVCDPNHSBEMFLPUMJOETMJTTVFT LPUMJOBOESPJEͷઃఆมߋϋϯυϦϯάपΓͷෆ۩߹
Slide 101
Slide 101 text
'BCSJDͷalwaysUpdateBuildId্͕ख͘ಈ͔ͳ͍ ϏϧυߴԽͷ5JQTͰग़ͯ͘Δͭ buildTypes { debug { ext.alwaysUpdateBuildId = false } } by extraͰઃఆͯ͠ө͞Εͳ͍
Slide 102
Slide 102 text
ճආࡦʮͲ͏ͯ͠μϝͳͷʯύλʔϯ ͜ͷߦ͚ͩผϑΝΠϧʹΓग़ͯ͠BQQMZGSPN͢Δ // fabric.gradle android.buildTypes.debug.ext.alwaysUpdateBuildId = false // build.gradle.kts apply(file="fabric.gradle") BuildTypeʹઃఆ͞ΕͨextͷΛݟ͍ͯΔ͕ɺ ,PUMJO%4-͔ΒΞΫηεͰ͖ͳ͍
Slide 103
Slide 103 text
·ͱΊ
Slide 104
Slide 104 text
ͨ͜͠ͱ ,PUMJOԽͷϝϦοτ ! ଈ࠲ͷϑΟʔυόοΫɺ ϝϯςφϯεੑ্ build.gradle.ktsʹҠߦ͢Δ࠶ݱՄೳͳखॱ ڞ௨ͷखॱ Α͋͘ΔͱରԠࡦ
Slide 105
Slide 105 text
෭࣍తޮՌ ! ϏϧυεΫϦϓτʹखΛೖΕΔ৺ཧతোนͷԼ (SBEMFŧŔŕŪũƄŝſײ
Slide 106
Slide 106 text
ࢀߟࢿྉ ,PUMJO$POG5ZQF4BGF#VJME-PHJDXJUI(SBEMF,PUMJO %4-CZ1BVM.FSMJO .JHSBUJOHCVJMEMPHJDGSPN(SPPWZUP,PUMJO (SBEMF,PUMJO%4-1SJNFS ެࣜͷ(SBEMF,PUMJO%4-ೖυΩϡϝϯτ ެࣜͷҠߦΨΠυɺ(SPPWZͱ,PUMJO྆ํͰهड़͞ΕͯͯࢀߟʹͳΔ ,PUMJO%4-ͷதͷਓͷηογϣϯɺεϥΠυ