$30 off During Our Annual Pro Sale. View Details »

マルチモジュールでandroidアプリを救う | Scramble Tech #0

Mori Atsushi
December 18, 2019

マルチモジュールでandroidアプリを救う | Scramble Tech #0

https://scramble.connpass.com/event/157710/

tags: android, multi module, OPENREC, java, kotlin

Mori Atsushi

December 18, 2019
Tweet

More Decks by Mori Atsushi

Other Decks in Programming

Transcript

  1. ϚϧνϞδϡʔϧͰ
    BOESPJEΞϓϦΛ
    ٹ͏
    ৿ಞ࢙c4DSBNCMF5FDIc

    View Slide

  2. ৿ಞ࢙
    .PSJ"UTVTIJ
    ೥໌ੴߴઐ
    ೥ஜ೾େֶ
    ೥גࣜձࣾαΠόʔΤʔδΣϯτגࣜձࣾ$ZCFS;01&/3&$
    ܦྺ
    BOESPJEXFCJPTDBNFSB
    εΩϧ
    ୈճશࠃߴઐϓϩάϥϛϯάίϯςετ,"/";"8"ΦʔϓϯσʔλΞϓϦίϯςετ
    -0%νϟϨϯδୈճશࠃߴઐϓϩάϥϛϯάίϯςετ
    ฏ੒೥౓ىۀՈߕࢠԂ*NBHJOF$VQ.BTIVQ"XBSET
    .BTIVQ"XBSET(6(&/
    ίϯςετ

    View Slide

  3. ήʔϜ࣮گ΍ϓϨΠಈըɺ

    ϥΠϒ഑৴ָ͕͠ΊΔɺ

    ಈըίϛϡχςΟ

    ϓϥοτϑΥʔϜ

    View Slide

  4. σβΠϯϦχϡʔΞϧ ࡁ

    ೥݄೔ ݄

    View Slide

  5. ೖࣾc೥݄̐
    ೉ؔ+BWB
    ೉ؔ.7$
    ೉ؔ$BMMCBDL஍ࠈ
    ۀքతͰ͸LPUMJOͰͷ։ൃ͕ओྲྀ
    (PPHMF͸.77.Λਪ঑
    3Y+BWB౳͸ར༻͍ͯ͠ͳ͍

    View Slide

  6. BOESPJE೥ද





    01&/3&$
    ϦϦʔε
    ,PUMJOΛ
    ਖ਼ࣜ։ൃݴޠʹ
    ,PUMJOpSTU
    +FU1BDLͷൃද
    "OESPJEΞϓϦͷ։ൃΛՃ଎ͤ͞Δ࣍ੈ୅ͷ

    ίϯϙʔωϯτɺπʔϧɺΞʔΩςΫνϟΨΠμϯε
    .77.͕ڧ͘ਪ঑͞Εɺ.7$͸ඇਪ঑ͱ͞Εͨ
    ,PUMJOͰͷ։ൃΛ(PPHMF͕ਖ਼ࣜʹαϙʔτ
    ͢ΔΑ͏ʹͳͬͨɻKBWBͱ޷͖ͳํ͕બ΂Δɻ
    ৽نػೳɾ৽نϥΠϒϥϦΛ,PUMJO༏ઌͰϦϦʔε͠
    ͍ͯ͘ͱએݴɻ
    +BWBͩͱ࠷৽ػೳͷԸܙ͕ड͚ΒΕͳ͍Մೳੑ͕
    +BWBͰͷ։ൃ͕ओྲྀɻ
    .7$.71.77.౳ɺ

    ༷ʑͳΞʔΩςΫνϟ͕ཚཱ͍ͯͨ͠

    View Slide


  7. ࠓ෩ʹॻ͖׵͍͑ͨʙʂ

    View Slide

  8. ઈରʹͳ͘ͳΒͳ͍΋ͷ

    View Slide

  9. ػೳ௥Ճ
    ઈରʹͳ͘ͳΒͳ͍΋ͷ

    View Slide


  10. ܧଓతʹ։ൃͭͭ͠
    ৽ઃܭʹҠߦͰ͖Δ࢓૊Έ

    View Slide

  11. ͍͋Ͱ͌͋
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    ৽ΞʔΩςΫνϟΛ࡞ͬͯঃʑʹͦͪΒʹҠߦ͍ͯ͘͠
    ঃʑʹҠߦ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  12. ༧૝͞ΕΔ͜ͱ
    +BWBͷ6UJMॆ࣮ͯ͠Δͦͬͪ͠࢖͓͏ʜ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  13. ༧૝͞ΕΔ͜ͱ
    ݹ͍ը໘Ͱ΋৽͍͠ػೳʹΞΫηε͠ͳ͚Ε͹ʜ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  14. ༧૝͞ΕΔ͜ͱ
    6TF$BTFҎԼ࡞ΔͷϝϯυΫαΠ͠ɺ+BWBͷ$POUSPMMFS΁ʜ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  15. ༧૝͞ΕΔ͜ͱ
    ґଘؔ܎͕ΊͪΌΊͪΌʹʜ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  16. ৽-FHBDZ
    ༧૝͞ΕΔ͜ͱ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  17. ৽-FHBDZ
    ༧૝͞ΕΔ͜ͱ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  18. ͳʹ͕͍͚ͳ͔͔ͬͨ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    ૄ݁߹Ͱ͋Δ͜ͱ͕ॏཁ
    ಛʹɿ৽ΞʔΩςΫνϟ͸چΞʔΩςΫνϟʹґଘͯ͠͸͍͚ͳ͍
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  19. ͳʹ͕͍͚ͳ͔͔ͬͨ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    ૄ݁߹Ͱ͋Δ͜ͱ͕ॏཁ
    ಛʹɿ৽ΞʔΩςΫνϟ͸چΞʔΩςΫνϟʹґଘͯ͠͸͍͚ͳ͍
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide


  20. ؾΛ͚ͭͯ։ൃ͠Α͏ʂ
    ͓ΘΓ

    View Slide


  21. ຊ౰ʹେৎ෉Ͱ͔͢ʁ

    View Slide

  22. ਓؒ͸͠͹͠
    աͪΛى͜͢

    View Slide

  23. "OESPJE
    .VMUJ
    .PEVMF

    View Slide

  24. ϚϧνϞδϡʔϧ
    ҰͭͷϓϩδΣΫτ಺ͰίϯύΠϧ୯ҐΛ෼ׂ͢Δ͜ͱ͕Ͱ͖Δ
    Ϟδϡʔϧؒͷґଘؔ܎Λ໌ࣔతʹఆٛ͢Δ
    ॥؀ͨ͠ґଘ͸ఆٛͰ͖ͳ͍
    Ϟδϡʔϧ" Ϟδϡʔϧ#

    View Slide

  25. ࠓճͷྫ
    ৽ΞʔΩςΫνϟ چΞʔΩςΫνϟ
    ࢓૊ΈͰ༧ظͤ͵ґଘΛ๷͙
    "DUJWJUZ'SBHNFOU
    7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    6UJM

    View Slide

  26. ۩ମతʹ͸
    GFBUVSFEJTDPWFS
    BQQ
    GFBUVSFXBUDI GFBUVSFTFUUJOH
    MFHBDZ
    EBUBVTFDBTF
    EBUBSFQPTJUPSZ
    EBUBTPVSDFBQJ EBUBTPVSDFMPDBM
    DPSF
    ˞؆ུԽͷͨΊҰ෦NPEVMFґଘ͸লུ͞Ε͍ͯΔ
    ˞VTFDBTFSFQPTJUPSZEBUBTPVSDFͷJOUFSGBDFͱ

    ͦͷ࣮૷͸ɺ࣮ࡍʹ͸ผNPEVMFʹͳ͍ͬͯΔ

    View Slide

  27. ܧଓతʹ։ൃͭͭ͠Ҡߦ͢Δ޻෉
    ᶃ'SBHNFOU୯ҐͰҠߦ͢Δ
    ᶄԼҐϨΠϠʔ͔ΒੵۃతʹҠߦ͢Δ
    ᶅ#BTF"DUJWJUZͷҠߦ͸݁ہྗͮ͘
    BDUJWJUZ୯ҐͰ͸େ͖͗͢ΔNPEVMFΛ௒͑ͯ'SBHNFOUΛ౉͢ʹ͸ʁ
    ԼҐϨΠϠʔ͸ೖΕସ͑΍͍͢
    ΍Δؾͱࠜؾ

    View Slide

  28. 'SBHNFOU୯ҐͰҠߦ͢Δ
    Α͠ʂ͜ͷ"DUJWJUZʢը໘ʣΛ
    Ҡߦ͢Δͧʂ
    ͋Εɺͳ͔ͳ͔ऴΘΒͳ͍ʜ
    ͖͋ΒΊ·ͨ͠

    View Slide

  29. 'SBHNFOU୯ҐͰҠߦ͢Δ
    Α͠ʂ͜ͷ"DUJWJUZʢը໘ʣΛ
    Ҡߦ͢Δͧʂ
    ͋Εɺͳ͔ͳ͔ऴΘΒͳ͍ʜ
    ͖͋ΒΊ·ͨ͠
    Ҡߦ͸যΒͣ
    গͣͭ͠

    View Slide

  30. 'SBHNFOU୯ҐͰҠߦ͢Δ
    ҠߦࡁΈ ະҠߦ
    λϒ୯ҐͰҠߦத
    Ұ౓ͷσόοάϦϦʔεΛখ͘͞
    Ϟνϕʔγϣϯҡ࣋

    View Slide

  31. 'SBHNFOU୯ҐͰҠߦ͢Δ
    GFBUVSFOFX MFHBDZ
    BQQ
    MFHBDZͷ'SBHNFOUΛ

    औಘ͍͕ͨ͠औΕͳ͍

    View Slide

  32. GFBUVSFOFX MFHBDZ
    BQQ
    DPSFOBWJHBUJPO
    'SBHNFOU୯ҐͰҠߦ͢Δ
    *OUFSGBDFΛఆٛ
    *OUFSGBDFΛ࣮૷
    %*Ͱ*NQMΫϥεΛ഑Δ

    View Slide

  33. 'SBHNFOU୯ҐͰҠߦ͢Δ
    λϒλοϓͰ

    Ұ൪্·ͰεΫϩʔϧ
    BDUJWJUZ͔Β
    GSBHNFOUΛૢ࡞͍ͨ͠

    View Slide

  34. GFBUVSFOFX MFHBDZ
    BQQ
    DPSFOBWJHBUJPO
    'SBHNFOU୯ҐͰҠߦ͢Δ
    *OUFSGBDFΛఆٛ
    'SBHNFOUʹ*OUFSGBDFΛ࣮૷ͤ͞Δ
    'SBHNFOUʹ*OUFSGBDFΛνΣοΫ͢Δ

    View Slide

  35. GFBUVSFOFX MFHBDZ
    BQQ
    DPSFOBWJHBUJPO
    'SBHNFOU୯ҐͰҠߦ͢Δ
    *OUFSGBDFΛఆٛ
    *OUFSGBDFΛ࣮૷
    *OUFSGBDFΛνΣοΫ͢Δ
    ந৅ʹґଘͤΑ

    View Slide

  36. 'SBHNFOU୯ҐͰҠߦ͢Δ
    ৽ը໘͸TDSPMMBCMFͳGSBHNFOUͰ͋Δ
    ͜ͱ͔͠஌Βͳ͍
    TDSPMMBCMFͳGSBHNFOUʹଈ࠲ʹ

    ஔ͖׵͑Մೳ
    ந৅ʹґଘͤ͞ΔͱԿ͕ྑ͍͔

    View Slide

  37. ԼҐϨΠϠʔ͔ΒੵۃతʹҠߦ͢Δ
    %BUB4PVSDF
    ৽ΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM
    چΞʔΩςΫνϟ
    ύλʔϯᶃ%BUB4PVSDFʢ-PDBM%#౳ʣ͚ͩ৽ʹࠩ͠ସ͑
    ґଘ͕গͳ͘૊Έ΍͘͢ɺσʔλͷෆ੔߹౳͕ى͖ʹ͘͘ͳΔ

    View Slide

  38. ԼҐϨΠϠʔ͔ΒੵۃతʹҠߦ͢Δ
    ৽ΞʔΩςΫνϟ
    "DUJWJUZ'SBHNFOU
    چΞʔΩςΫνϟ
    ύλʔϯᶄ6TF$BTFҎԼΛ৽ʹࠩ͠ସ͑
    ৽͍͠ػೳΛ৽ΞʔΩςΫνϟͰ࡞Γɺچ"DUJWJUZ͔Βݺͼग़͢
    ৽"DUJWJUZʹҠߦ͢Δͱ͖΋ָʑ
    6TF$BTF
    3FQPTJUPSZ
    %BUB4PVSDF

    View Slide

  39. ԼҐϨΠϠʔ͔ΒੵۃతʹҠߦ͢Δ
    ৽ΞʔΩςΫνϟ
    چΞʔΩςΫνϟ
    ൪֎ฤ6UJMΛNPEVMFҠߦ
    ڞ௨NPEVMFʹ࢖͑ͦ͏ͳVUJM͸ͲΜͲΜҠ͍ͯ͘͠
    ϦϑΝΫλ͢Δ͍͍λΠϛϯάʂ
    6UJM
    "DUJWJUZ'SBHNFOU
    $POUSPMMFS
    .PEFM

    View Slide

  40. #BTF"DUJWJUZͷҠߦ
    #BTF"DUJWJUZ͸ංେԽ͕ͪ͠ʜ

    ϩάܥॲཧͷڞ௨ԽݖݶपΓΞϓϦͷόοΫάϥ΢ϯυɾ
    ϑΥΞάϥ΢ϯυݕ஌1*1੍ޚڧ੍Ξοϓσʔτڧ੍ϩάΞ
    ΢τϓϨϛΞϜձһνΣοΫʜ

    View Slide

  41. #BTF"DUJWJUZͷҠߦ
    جຊઓུ
    ᶃࠓ·Ͱͷ#BTF"DUJWJUZΛ-FHBDZ#BTF"DUJWJUZʹ

    ϦωʔϜ͠ɺ-FHBDZNPEVMF಺ʹ͓͘
    ᶄڞ௨NPEVMFʹਅ#BTF"DUJWJUZΛ࡞Γɺ

    ຊ౰ʹඞཁͳ΋ͷ͚ͩΛҠ͢
    ᶅ-FHBDZ#BTF"DUJWJUZʹऔΓ࢒͞ΕͨॲཧΛ

    Α͠ͳʹ෼ղ͢Δ

    View Slide

  42. #BTF"DUJWJUZͷҠߦ
    #BTF"DUJWJUZͷ෼ղϓϥϯ
    ॲཧͷڞ௨ԽΛ͍ͨ͠
    6UJM΍*OUFSGBDFʹ੾Γग़͢
    'SBHNFOUͱ"DUJWJUZɺ'SBHNFOUؒͰσʔλͷ΍ΓऔΓ͕͍ͨ͠
    "DUJWJUZTDPQFͷ7JFX.PEFMΛ࢖͏
    ΞϓϦͷCBDLHSPVOE GPSFHSPVOEΛݕ஌͍ͨ͠
    1SPDFTT-JGFDZDMF0XOFSΛ࢖͏
    Ͳ͏ʹ΋෼཭Ͱ͖ͳ͍͚Ͳɺ৽ΞʔΩςΫνϟͰ͸࢖͍ͨ͘ͳ͍
    *OUFSGBDFʹ੾ͬͯ!%FQSFDBUFEΛ͚ͭΔ

    View Slide

  43. #BTF"DUJWJUZͷҠߦ
    #BTF"DUJWJUZͷ෼ղϓϥϯ
    ॲཧͷڞ௨ԽΛ͍ͨ͠
    6UJM΍*OUFSGBDFʹ੾Γग़͢
    'SBHNFOUͱ"DUJWJUZɺ'SBHNFOUؒͰσʔλͷ΍ΓऔΓ͕͍ͨ͠
    "DUJWJUZTDPQFͷ7JFX.PEFMΛ࢖͏
    ΞϓϦͷCBDLHSPVOE GPSFHSPVOEΛݕ஌͍ͨ͠
    1SPDFTT-JGFDZDMF0XOFSΛ࢖͏
    Ͳ͏ʹ΋෼཭Ͱ͖ͳ͍͚Ͳɺ৽ΞʔΩςΫνϟͰ͸࢖͍ͨ͘ͳ͍
    *OUFSGBDFʹ੾ͬͯ!%FQSFDBUFEΛ͚ͭΔ

    View Slide

  44. ·ͱΊ
    ϚϧνϞδϡʔϧΛ࢖ͬͯ৽ઃܭͱچઃܭΛ੾Γ෼͚Δͱ
    ґଘؔ܎͕ڧ੍Ͱ͖ͯྑ͍
    ϞδϡʔϧΛ௒͑Δ৔߹͸ந৅ʹґଘͤ͞ΔΑ͏ʹ͢Δ
    ݁ߏͰ৐Γ੾Βͳ͍ͱ͍͚ͳ͍ͱ͜Ζ΋ଟ͍

    View Slide