コマンドなしでぼくはAndroid開発できない話 文字起こし https://github.com/operando/DroidKaigi/blob/master/2017/no_command_no_life/README.md
DroidKaigi 2017 Day2 https://droidkaigi.github.io/2017/timetable.html#session-60
ίϚϯυͳ͠Ͱ ΅͘Android։ൃ Ͱ͖ͳ͍DroidKaigi 2017 Day2
View Slide
About MeShinobu Okano@operandoOSMercari, Inc.Souzoh, Inc.
ࢿྉͷίϚϯυʹpackageName ͱॻ͔Ε͍ͯΔ෦ ΞϓϦͷύοέʔδ໊ʹ ஔ͖͓͑ͯࢼ͍ͩ͘͠͞ʂ
࣭͋Εhttps://github.com/operando/DroidKaigiʹissueͱ্͔͍͛ͯͩ͘͞ʂ
AndroidͰίϚϯυʁ
AndroidͰίϚϯυ ͑ΔΑ͏ʹͳΓͨʔ͍
Ͱ͖·͢
͑ΔΑ͏ʹͳΔͨΊʹ• Android SDK·ΘΓʹͪΐͬͱPathΛ ௨͚ͩ͢• جຊɺͦΕ͚ͩʂ
• sdk/tools• sdk/tools/bin• sdk/platform-tools• sdk/build-tools/• sdk/platform-tools/systrace (͓·͚)Android SDKपΓͷ Ͳ͜ʹPath௨͍͍ͤͷ͔
ίϚϯυ ͍͘͢͢Δͧ
adb-peco• ෳͷAndroidΛಉ࣌ܨ͍ͰΔ࣌ʹศར• alias adb='adb-peco'• https://github.com/tomorrowkey/adb-peco
adb-peco• ෳͷAndroidΛಉ࣌ʹͭͳ͍Ͱ ࠔͬͯ·ͤΜ͔ʁͦΕadb-pecoͰબͰ͖ΔΑʂ• http://techlife.cookpad.com/entry/2014/09/09/172449
adb-peco• adb-pecoΛॻ͖͠·ͨ͠ by tomorrowkey• http://tomorrowkey.hatenablog.jp/entry/2016/07/31/adb-peco%E3%82%92%E6%9B%B8%E3%81%8D%E7%9B%B4%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F
աڈʹͬͨίϚϯυΛ ΠϯλϥΫςΟϒʹௐͯ͏https://gist.github.com/operando/250da59cc97d89c33337fe5b129e09f5peco select adb history
adb
adbAndroid Debug Bridge
adbhttps://developer.android.com/studio/command-line/adb.html
࣮ػͱΤϛϡϨʔλͰ ࣮ߦͰ͖ΔίϚϯυҧ͏• ࣮ػʹͳ͍͚ͲΤϛϡϨʔλʹ ೖͬͯΔίϚϯυͦͦ͋͜͜Δ• ηΩϡϦςΟ্ͷཧ༝ͳͷ͔ͳʁ
ωοτϫʔΫӽ͠ͰίϚϯυΛ࣮ߦ͢Δ• adb shell ip addr show wlan0 | grep 'inet ' |cut -d' ' -f6|cut -d/ -f1• ip෦͚ͩऔΓग़͢• adb tcpip 5555• adb connect ip:5555
AndroidWiFiADB• Android StudioͷPlugin• https://github.com/pedrovgs/AndroidWiFiADB• ·͋ͬͪ͜ͷํָ͕
input
input textจࣈೖྗΊͬͪΌ؆୯ʹͳΔ࠷ڧίϚϯυ✨
input textadb shell input text droidkaigi2017
input keyeventKey eventΛൃߦͰ͖Δ
input keyevent• adb shell input keyevent KEYCODE_POWER• ిݯΩʔԡ͢• adb shell input keyevent KEYCODE_SLEEP• εΫϦʔϯOFF
adb shell inputͷίʔυhttp://tools.oesf.biz/android-7.1.1_r1.0/xref/frameworks/base/cmds/input/src/com/android/commands/input/Input.java
reboot• ࠶ىಈίϚϯυ• adb shell reboot
am
am start• ActivityΛελʔτͤ͞Δͷ• adb shell am start -a android.intent.action.VIEW -d https://google.com
am broadcastBroadcastΛ࣮ߦ͢ΔίϚϯυ
am broadcast• adb shell am broadcast -acom.android.systemui.BATTERY_LEVEL_TEST• ిྔ0ʙ100%ͷը૾ΛΞχϝʔγϣϯ Ͱ֬ೝͰ͖Δʂ• Θͳ͍ͩΖʔ
am hang• ࠓΒͳ͍Α͏ʹͶ͆• hang͢ΔͷͰ• hangͯ͠Ͳ͏͠Α͏ͳ͘ͳͬͨΒ adb shell rebootͰ͢Αʂ
am Source Code• http://tools.oesf.biz/android-7.1.1_r1.0/xref/frameworks/base/cmds/am/src/com/android/commands/am/Am.java• http://tools.oesf.biz/android-7.1.1_r1.0/xref/frameworks/base/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
pm
pmPackageManager
pm path• ࢦఆͨ͠ύοέʔδ໊ͷapkͷॴΛ ڭ͑ͯ͘ΕΔ• adb shell pm path packageName
pm clear• ΞϓϦέʔγϣϯͷσʔλΛΫϦΞ͢Δ• adb shell pm clear packageName
pm list• adb shell pm list packages• adb shell pm list packages -e• adb shell pm list packages -d• adb shell pm list packages -s• adb shell pm list packages -3
pm source code• http://tools.oesf.biz/android-7.1.1_r1.0/xref/frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java• http://tools.oesf.biz/android-7.1.1_r1.0/xref/frameworks/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
dumpsys
dumpsys• γεςϜαʔϏεͷঢ়ଶΛμϯϓ• ৭ʑؚΊͯಈ࡞νΣοΫ͍ͨ࣌͠ʹΊͬͪΌศར
dumpsys• adb shell dumpsys -l• ͜ΕͰsystem serviceͷҰཡ͕ݟ͑Δ• ؾʹͳΔSystem ServiceΛ୳͢
dumpsys activity• ActivityͷใΛdump͢Δ• adb shell dumpsys activity
dumpsys activity top• adb shell dumpsys activity top• ࠓදࣔͯ͠ΔActivityͷใ͕ݟ͑Δʂ• ϨΠΞτͷߏݟΕΔʂ• FragmentManagerͷใdump͞ΕΔ
dumpsys activity top• ৽͍͠ϓϩδΣΫτݟΒ͵ίʔυΛಡΉ࣌ʹཱͭ• ͜ͷը໘ͬͯͲͷActivity? ͲͷFragment? Έ͍ͨͳ͜ͱΛௐΔͷʹ࠷ద• ਓ༷ͷΞϓϦͷViewͷߏΛௐΔͷʹ࠷ద
dumpsys usagestats• adb shell dumpsys usagestats
adb shell dumpsys dbinfo• adb shell dumpsys dbinfo• adb shell dumpsys dbinfo packageName• ࣮ߦͨ͠SQLͱ͔ͷཤྺ͕ݟ͑Δ• ςʔϒϧߏؙད
log
log• logcatʹҙͷlogΛଧͪࠐΉ• shell log DroidKaigi2017ͬͯͧ͘ʂ• ͱ͋Δૢ࡞ͷൣғͷlogcatΛݟ͍ͨ࣌ͳͲʹ ૢ࡞ͷ࢝ΊͱऴΘΓʹlogΛଧͭͱ͔ʹศར
run-as
run-as• ࣮ߦ͢ΔϓϩηεΛม͑Δ?• adb shell run-as packageName• /data/data/packageNameͷϑΝΠϧΛݟ͍ͨ࣌ʹศར
run-as source codehttp://tools.oesf.biz/android-7.1.1_r1.0/xref/system/core/run-as/
bugreport
bugreportadb bugreport
bugreportz✨
bugreportz• adb shell bugreportz• bugreportΛzipԽͨ͠ͷ͕࡞ΕΔ• bugreportͷ͘͢͝Ͱ͔͍
bugreportz• ҎԼʹॻ͖ग़͞ΕΔ• /data/user_de/0/com.android.shell/files/bugreports• OK:/data/user_de/0/com.android.shell/files/bugreports/bugreport-NPG05D-2017-03-10-07-41-37.zip• ੜ͞ΕͨΒadb pullͯ͠औΓग़͢
bugreportz Source Codehttps://android.googlesource.com/platform/frameworks/native/+/refs/heads/master/cmds/bugreportz/
adb uninstall• adb uninstall packageName• ΞϓϦΛΞϯΠϯετʔϧ͢Δ
σʔλͱΩϟογϡΛ ͨ͠··ΞϯΠϯετʔϧ͢Δ• adb shell cmd package uninstall -kpackageName
ͦͷଞ͍ͬͺ͍͋Γ·͢Αʂ
ίϚϯυԠ༻͍ͯͧ͘͠
ಛఆͷΞϓϦͷSettingը໘Λ ίϚϯυͰҰൃͰग़͢!!• shell am start -aandroid.settings.APPLICATION_DETAILS_SETTINGS -d package:packageName
Πϯετʔϧ͞Ε͍ͯΔ ύοέʔδ໊Λιʔτͯ͠ग़͢ʂ• adb shell pm list packages | sed'[email protected]^package:@@g' | sort
apkҾͬ͜ൈ͘͜ͱʹ શྗΛਚͨ͘͠ʂ• adb shell dumpsys activity activities | grep apkΛվͯ͠pecoͱ߹Θͤͯ બͯ͠pull͢Δͭ࡞Δ
apkҾͬ͜ൈ͘͜ͱʹ શྗΛਚͨ͘͠ʂ• adb shell dumpsys activity activities | grepapk | sed -e 's/ *baseDir=//g' | peco | xargsadb pull
apkҾͬ͜ൈ͘͜ͱʹ શྗΛਚͨ͘͠ʂ• dumpsys activity activitiesͱpecoͰΰχϣΰχϣ͔ͯ͠ΒapkΛ؆୯ʹҾͬ͜ൈ͘• http://qiita.com/operandoOS/items/6fa77037560e52d11352
dryrun• gem install dryrun• dryrun ϦϙδτϦͷURL
dryrunhttps://github.com/cesarferreira/dryrun
ίϚϯυपΓͷsource code• http://tools.oesf.biz/android-7.0.0_r1.0/xref/frameworks/base/cmds/• http://tools.oesf.biz/android-7.0.0_r1.0/xref/system/core/
ίϚϯυͷ࣮ମΛௐΔํ๏• logcatΛݟΔ• ίϚϯυͷग़ྗ݁Ռ͔ΒݻఆͬΆ͍ͷΛݟ͚ͭͯɺͦΕΛग़ྗͯ͠ΔॲཧΛ୳͢• ͔ͦ͜ΒͲΜͲΜ۷ΓԼ͍͛ͯ͘• ιʔείʔυ͔Βؤுͬͯ୳͢ʂ
ίϚϯυϥΠϯπʔϧΛ ৭ΜͳݴޠͰ࡞ΔͨΊͷૉࡐ• DeviceAPI-Android• https://github.com/bbc/device_api-android• ruby• adbkit• https://github.com/openstf/adbkit• node.js
Android Command Notehttps://github.com/operando/Android-Command-Noteհͨ͠ίϚϯυͱ͔·ͱΊͯ·͢ʂ
Thanks!!