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 {}ͷఆٛ  release‎getByName("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-junit5 jacoco-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-ͷதͷਓͷηογϣϯɺεϥΠυ