Slide 1

Slide 1 text

"OESPJEΞϓϦέʔγϣϯ ͷϏϧυମݧΛϦϞʔτΠϯ ελϯεͰվળ͢Δ 2017/02/01 ୈ2ճελʔτΞοϓAndroidษڧձ Toshihiro Yagi

Slide 2

Slide 2 text

ࣗݾ঺հ w 5PTIJIJSP:BHJ !TZTZBHJ w DPPLQBE w "OESPJEΤϯδχΞ ٕज़෦௕

Slide 3

Slide 3 text

"OESPJEΞϓϦέʔγϣϯ ͷϏϧυͷ՝୊ w Ϗϧυʹ͕͔͔࣌ؒΔ w ϏϧυΛ଴ͭؒ$16΍ϝϞϦΛઐ༗ ͞Εͯ͠·ͬͯଞͷ࡞ۀ͕Ͱ͖ͳ͍

Slide 4

Slide 4 text

"OESPJEΞϓϦέʔγϣϯ ͷϏϧυͷ՝୊ w Ϗϧυʹ͕͔͔࣌ؒΔ w ϏϧυΛ଴ͭؒ$16΍ϝϞϦΛઐ༗ ͞Εͯ͠·ͬͯଞͷ࡞ۀ͕Ͱ͖ͳ͍

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ରࡦ w CVJMEHSBEMFΛνϡʔχϯά w *OTUBOU3VOΛ࢖͏ w ϋΠεϖοΫϚγϯΛௐୡ

Slide 7

Slide 7 text

ରࡦ w CVJMEHSBEMFΛνϡʔχϯά w *OTUBOU3VOΛ࢖͏ w ϋΠεϖοΫϚγϯΛௐୡ w ϦϞʔτϏϧυΛ࢖͏OFX

Slide 8

Slide 8 text

ϦϞʔτϏϧυͷงғؾ Local Machine ᶃ sync code Remote Machine ᶄ build ᶅ get apk ᶆ install apk & launch activity Ϗϧυͷ෦෼ΛϦϞʔτϚγϯʹҕৡ͢Δ͜ͱͰ ϩʔΧϧϚγϯͷϦιʔεΛઐ༗͠ͳ͍

Slide 9

Slide 9 text

ϦϞʔτϏϧυͷར఺ w ϩʔΧϧϚγϯͷϦιʔεΛѹഭ͠ͳ͍ w ෳ਺ͷϚγϯ͔Β࢖͑Δ؀ڥΛͭ͘ΕΔ w ϦϞʔτϚγϯͷεϖοΫ࣍ୈͰύϑΥʔ Ϛϯε͸ແݶେ w Ϋϥ΢υΛ࢖͏৔߹ ࣗ༝ʹࣺͯΒΕΔ

Slide 10

Slide 10 text

ϦϞʔτϏϧυ؀ڥߏஙखॱ w ϦϞʔτϚγϯΛ༻ҙ͢Δ w ϦϞʔτϚγϯͷ؀ڥΛ࡞Δ w ϦϞʔτϏϧυ༻ͷεΫϦϓτΛ༻ҙ͢Δ w ࢖͏ɻշదɻ࠷ߴ?P? w ίετͱ޻෉

Slide 11

Slide 11 text

ϦϞʔτϚγϯΛ༻ҙ͢Δ w ༨ͬͨϚγϯ w ϦϞʔτΠϯελϯε ($1 "84 "[VSFʜ

Slide 12

Slide 12 text

ϦϞʔτϚγϯΛ༻ҙ͢Δ w ༨ͬͨϚγϯ w ϦϞʔτΠϯελϯε ($1 "84 "[VSFʜ

Slide 13

Slide 13 text

ϦϞʔτϚγϯͷ؀ڥΛ࡞Δ w "84 ($1ͳͲͰΠϯελϯεΛ࡞Δ w ϦϞʔτϚγϯͷ੩త*1Λઃఆ͢Δ w BOESPJEͷϏϧυ؀ڥΛߏங͢Δ w ϩʔΧϧϚγϯͰTTILFZΛൃߦͯ͠ొ࿥͢Δ

Slide 14

Slide 14 text

ϦϞʔτϚγϯͷ؀ڥΛ࡞Δ http://sys1yagi.hatenablog.com/entry/2016/11/13/162400

Slide 15

Slide 15 text

ϦϞʔτϏϧυ༻ͷ εΫϦϓτΛ༻ҙ͢Δ GBCSJDΛ࢖ͬͨྫ @task def build(): build_dir = tmp_dir + package sync(build_dir) gradle_cmd = assemble_command() apk_name = apk_name_format() # run gradlew on remote instance with cd(build_dir): run(gradle_cmd) # get apk local("mkdir -p " + module + "/build/outputs/apk/") get(remote_path=build_dir + "/" + module + "/build/outputs/apk/" + apk_name, local_path=module + "/build/outputs/apk/") # start App local("adb" + " push ./" + module + "/build/outputs/apk/" + apk_name + " /data/local/tmp/" + package) local("adb" + " shell pm install -r '/data/local/tmp/" + package + "'") local("adb" + " shell am start -n '" + package + "/" + launch_activity + "' -a android.intent.action.MAIN -c android.intent.category.LAUNCHER")

Slide 16

Slide 16 text

࢖͏ɻշదɻ࠷ߴ?P?

Slide 17

Slide 17 text

ίετͱ޻෉ w େମշదͳεϖοΫ w ($1OIJHIDQV ถࠃ I w "84DYMBSHF ౦ژ I w ͣͬͱىಈͬ͠ͺͳ͠ͷ৔߹ֹ݄ w ($1 w "84

Slide 18

Slide 18 text

ࣗಈγϟοτμ΢ϯ w $MPVE8BUDIΛ࢖ͬͨࣗಈγϟοτμ΢ϯ "84 w ͖͍͠஋Λz࣌ؒʹର͢Δ$166UJMJ[BUJPO $166UJMJ[BUJPO zͰઃఆ w ΞΫγϣϯͱͯ͠γϟοτμ΢ϯΛઃఆ w ىಈ͸GBCSJDͰCPUPΛ࢖ͬͯϏϧυ࣌ʹ௚઀"1* Λୟ͘ w ($1͸DSPO࢓ࠐΉͱ͔ʹͳΓͦ͏ɻHDMPVEͰىಈ

Slide 19

Slide 19 text

ϲ݄ͷར༻࣌ؒͱίετ w ΤϯδχΞ໊ w ߹ܭར༻࣌ؒd࣌ؒ w ֹ݄d w Ұਓ͋ͨΓd

Slide 20

Slide 20 text

ମݧ͕͍͍͘͢͝ͷͰੋඇ͓ࢼ͍ͩ͘͠͞ɻ

Slide 21

Slide 21 text

ͱΓ͋͑ͣؾܰʹࢼͯ͠Έ͍ͨͱ ͍͏࣌͸

Slide 22

Slide 22 text

$ZCPSH#VJME http://cyborg-build.com/

Slide 23

Slide 23 text

$ZCPSH#VJMEͷ࢓૊Έ Local Machine GCS Bucket Cyborg-Build.com Remote Instance ᶃrsync code ᶄbuild request ᶅremote op ᶆrsync code ᶇbuild on docker ᶈupload artefacts ᶉdownload artefacts ᶊinstall & launch ϩάΠϯͨ͠(PPHMFΞΧ΢ϯτͱDZCPSHCVJMEDPNͷΈ͕ιʔείʔυʹ৮ΕΔߏ଄

Slide 24

Slide 24 text

"MQIB1SFWJFX w ࠓͷͱ͜Ζແྉ w HDMPVEGBCSJDͰར༻Մೳ w CVJMEMBVODIͷ΄͔UFTU΍MJOU݁Ռͷอଘͳ Ͳ΋αϙʔτ w *%&"QMVHJOԽ༧ఆ w ͥͻ͓ࢼ͍ͩ͘͠͞ϑΟʔυόοΫ͍ͩ͘͞

Slide 25

Slide 25 text

&OKPZ "OESPJE"QQMJDBUJPO %FWFMPQNFOU