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
Androidアプリケーションのビルド体験をリモートインスタンスで改善する
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yagi
February 01, 2017
Technology
710
4
Share
Androidアプリケーションのビルド体験をリモートインスタンスで改善する
Enjoy Android Application Development !
yagi
February 01, 2017
More Decks by yagi
See All by yagi
医療現場の解像度を上げるために 開発チームが行っている取り組み
sys1yagi
0
870
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.4k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
32k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
19k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
14k
Kotlin コルーチンを 理解しよう
sys1yagi
41
25k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.4k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
24k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
11k
Other Decks in Technology
See All in Technology
"SQLは書けません"から始まる データドリブン
kubell_hr
2
470
ネットワーク運用を楽にするAWS DevOps Agent活用法!! / 20260421 Masaki Okuda
shift_evolve
PRO
2
190
No Types Needed, Just Callable Method Check
dak2
1
190
Eight Engineering Unit 紹介資料
sansan33
PRO
3
7.2k
ハーネスエンジニアリングの概要と設計思想
sergicalsix
9
4.3k
こんなアーキテクチャ図はいやだ / Anti-pattern in AWS Architecture Diagrams
naospon
1
430
AI時代にデータ基盤が持つべきCapabilityを考える + Snowflake Data Superheroやっていき宣言 / Considering the Capabilities Data Platforms Should Have in the AI Era + Declaration of Commitment as a Snowflake Data Superhero
civitaspo
0
120
みんなで作るAWS Tips 100連発 (FinOps編)
schwrzktz
1
280
Code Interpreter で、AIに安全に コードを書かせる。
yokomachi
0
7k
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」ご紹介資料
laysakura
0
4k
Introduction to Bill One Development Engineer
sansan33
PRO
0
410
AI時代 に増える データ活用先
takahal
0
170
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
320
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
210
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Designing for Timeless Needs
cassininazir
0
190
It's Worth the Effort
3n
188
29k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
330
Side Projects
sachag
455
43k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Transcript
"OESPJEΞϓϦέʔγϣϯ ͷϏϧυମݧΛϦϞʔτΠϯ ελϯεͰվળ͢Δ 2017/02/01 ୈ2ճελʔτΞοϓAndroidษڧձ Toshihiro Yagi
ࣗݾհ w 5PTIJIJSP:BHJ !TZTZBHJ w DPPLQBE w "OESPJEΤϯδχΞ ٕज़෦
"OESPJEΞϓϦέʔγϣϯ ͷϏϧυͷ՝ w Ϗϧυʹ͕͔͔࣌ؒΔ w ϏϧυΛͭؒ$16ϝϞϦΛઐ༗ ͞Εͯ͠·ͬͯଞͷ࡞ۀ͕Ͱ͖ͳ͍
"OESPJEΞϓϦέʔγϣϯ ͷϏϧυͷ՝ w Ϗϧυʹ͕͔͔࣌ؒΔ w ϏϧυΛͭؒ$16ϝϞϦΛઐ༗ ͞Εͯ͠·ͬͯଞͷ࡞ۀ͕Ͱ͖ͳ͍
None
ରࡦ w CVJMEHSBEMFΛνϡʔχϯά w *OTUBOU3VOΛ͏ w ϋΠεϖοΫϚγϯΛௐୡ
ରࡦ w CVJMEHSBEMFΛνϡʔχϯά w *OTUBOU3VOΛ͏ w ϋΠεϖοΫϚγϯΛௐୡ w ϦϞʔτϏϧυΛ͏OFX
ϦϞʔτϏϧυͷงғؾ Local Machine ᶃ sync code Remote Machine ᶄ build
ᶅ get apk ᶆ install apk & launch activity Ϗϧυͷ෦ΛϦϞʔτϚγϯʹҕৡ͢Δ͜ͱͰ ϩʔΧϧϚγϯͷϦιʔεΛઐ༗͠ͳ͍
ϦϞʔτϏϧυͷར w ϩʔΧϧϚγϯͷϦιʔεΛѹഭ͠ͳ͍ w ෳͷϚγϯ͔Β͑ΔڥΛͭ͘ΕΔ w ϦϞʔτϚγϯͷεϖοΫ࣍ୈͰύϑΥʔ Ϛϯεແݶେ w ΫϥυΛ͏߹
ࣗ༝ʹࣺͯΒΕΔ
ϦϞʔτϏϧυڥߏஙखॱ w ϦϞʔτϚγϯΛ༻ҙ͢Δ w ϦϞʔτϚγϯͷڥΛ࡞Δ w ϦϞʔτϏϧυ༻ͷεΫϦϓτΛ༻ҙ͢Δ w ͏ɻշదɻ࠷ߴ?P? w
ίετͱ
ϦϞʔτϚγϯΛ༻ҙ͢Δ w ༨ͬͨϚγϯ w ϦϞʔτΠϯελϯε ($1 "84 "[VSFʜ
ϦϞʔτϚγϯΛ༻ҙ͢Δ w ༨ͬͨϚγϯ w ϦϞʔτΠϯελϯε ($1 "84 "[VSFʜ
ϦϞʔτϚγϯͷڥΛ࡞Δ w "84 ($1ͳͲͰΠϯελϯεΛ࡞Δ w ϦϞʔτϚγϯͷ੩త*1Λઃఆ͢Δ w BOESPJEͷϏϧυڥΛߏங͢Δ w ϩʔΧϧϚγϯͰTTILFZΛൃߦͯ͠ొ͢Δ
ϦϞʔτϚγϯͷڥΛ࡞Δ http://sys1yagi.hatenablog.com/entry/2016/11/13/162400
ϦϞʔτϏϧυ༻ͷ εΫϦϓτΛ༻ҙ͢Δ 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")
͏ɻշదɻ࠷ߴ?P?
ίετͱ w େମշదͳεϖοΫ w ($1OIJHIDQV ถࠃ I w "84DYMBSHF ౦ژ
I w ͣͬͱىಈͬ͠ͺͳ͠ͷ߹ֹ݄ w ($1 w "84
ࣗಈγϟοτμϯ w $MPVE8BUDIΛͬͨࣗಈγϟοτμϯ "84 w ͖͍͠Λz࣌ؒʹର͢Δ$166UJMJ[BUJPO $166UJMJ[BUJPO zͰઃఆ w
ΞΫγϣϯͱͯ͠γϟοτμϯΛઃఆ w ىಈGBCSJDͰCPUPΛͬͯϏϧυ࣌ʹ"1* Λୟ͘ w ($1DSPOࠐΉͱ͔ʹͳΓͦ͏ɻHDMPVEͰىಈ
ϲ݄ͷར༻࣌ؒͱίετ w ΤϯδχΞ໊ w ߹ܭར༻࣌ؒd࣌ؒ w ֹ݄d w Ұਓ͋ͨΓd
ମݧ͕͍͍͘͢͝ͷͰੋඇ͓ࢼ͍ͩ͘͠͞ɻ
ͱΓ͋͑ͣؾܰʹࢼͯ͠Έ͍ͨͱ ͍͏࣌
$ZCPSH#VJME http://cyborg-build.com/
$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ͷΈ͕ιʔείʔυʹ৮ΕΔߏ
"MQIB1SFWJFX w ࠓͷͱ͜Ζແྉ w HDMPVE GBCSJDͰར༻Մೳ w CVJMEMBVODIͷ΄͔UFTUMJOU݁Ռͷอଘͳ Ͳαϙʔτ w
*%&"QMVHJOԽ༧ఆ w ͥͻ͓ࢼ͍ͩ͘͠͞ϑΟʔυόοΫ͍ͩ͘͞
&OKPZ "OESPJE"QQMJDBUJPO %FWFMPQNFOU