Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コマンドなしでぼくはAndroid開発できない話

operandoOS
March 10, 2017

 コマンドなしでぼくはAndroid開発できない話

コマンドなしでぼくは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

operandoOS

March 10, 2017
Tweet

More Decks by operandoOS

Other Decks in Technology

Transcript

  1. ίϚϯυͳ͠Ͱ

    ΅͘͸Android։ൃ

    Ͱ͖ͳ͍࿩
    DroidKaigi 2017 Day2

    View Slide

  2. About Me
    Shinobu Okano
    @operandoOS
    Mercari, Inc.
    Souzoh, Inc.

    View Slide

  3. ࢿྉ಺ͷίϚϯυʹ
    packageName

    ͱॻ͔Ε͍ͯΔ෦෼͸

    ΞϓϦͷύοέʔδ໊ʹ

    ஔ͖׵͓͑ͯࢼ͍ͩ͘͠͞ʂ

    View Slide

  4. ࣭໰౳͋Ε͹
    https://github.com/
    operando/DroidKaigi
    ʹissueͱ্͔͍͛ͯͩ͘͞ʂ

    View Slide

  5. AndroidͰίϚϯυʁ

    View Slide

  6. AndroidͰίϚϯυ

    ࢖͑ΔΑ͏ʹͳΓͨʔ͍

    View Slide

  7. Ͱ͖·͢

    View Slide

  8. ࢖͑ΔΑ͏ʹͳΔͨΊʹ
    • Android SDK·ΘΓʹͪΐͬͱPathΛ

    ௨͚ͩ͢
    • جຊɺͦΕ͚ͩʂ

    View Slide

  9. • sdk/tools
    • sdk/tools/bin
    • sdk/platform-tools
    • sdk/build-tools/
    • sdk/platform-tools/systrace (͓·͚)
    Android SDKपΓͷ

    Ͳ͜ʹPath௨ͤ͹͍͍ͷ͔

    View Slide

  10. ίϚϯυ

    ࢖͍΍͘͢͢Δͧ

    View Slide

  11. adb-peco
    • ෳ਺ͷAndroid୺຤Λಉ࣌ܨ͍ͰΔ࣌ʹศར
    • alias adb='adb-peco'
    • https://github.com/tomorrowkey/adb-peco

    View Slide

  12. adb-peco
    • ෳ਺ͷAndroid୺຤Λಉ࣌ʹͭͳ͍Ͱ

    ࠔͬͯ·ͤΜ͔ʁͦΕadb-pecoͰબ୒Ͱ͖ΔΑʂ
    • http://techlife.cookpad.com/entry/
    2014/09/09/172449

    View Slide

  13. 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

    View Slide

  14. աڈʹ࢖ͬͨίϚϯυΛ

    ΠϯλϥΫςΟϒʹௐ΂ͯ࢖͏
    https://gist.github.com/operando/
    250da59cc97d89c33337fe5b129e09f5
    peco select adb history

    View Slide

  15. adb

    View Slide

  16. adb
    Android Debug Bridge

    View Slide

  17. adb
    https://developer.android.com/
    studio/command-line/adb.html

    View Slide

  18. ࣮ػͱΤϛϡϨʔλͰ͸

    ࣮ߦͰ͖ΔίϚϯυ͸ҧ͏
    • ࣮ػʹ͸ͳ͍͚ͲΤϛϡϨʔλʹ͸

    ೖͬͯΔίϚϯυ͸ͦͦ͋͜͜Δ
    • ηΩϡϦςΟ্ͷཧ༝ͳͷ͔ͳʁ

    View Slide

  19. ωοτϫʔΫӽ͠ͰίϚϯυΛ
    ࣮ߦ͢Δ
    • adb shell ip addr show wlan0 | grep 'inet ' |
    cut -d' ' -f6|cut -d/ -f1
    • ip෦෼͚ͩऔΓग़͢
    • adb tcpip 5555
    • adb connect ip:5555

    View Slide

  20. AndroidWiFiADB
    • Android StudioͷPlugin
    • https://github.com/pedrovgs/
    AndroidWiFiADB
    • ·͋ͬͪ͜ͷํָ͕

    View Slide

  21. input

    View Slide

  22. input text
    จࣈೖྗΊͬͪΌ؆୯ʹͳΔ
    ࠷ڧίϚϯυ✨

    View Slide

  23. input text
    adb shell input text droidkaigi2017

    View Slide

  24. input keyevent
    Key eventΛൃߦͰ͖Δ

    View Slide

  25. input keyevent
    • adb shell input keyevent KEYCODE_POWER
    • ిݯΩʔԡ͢
    • adb shell input keyevent KEYCODE_SLEEP
    • εΫϦʔϯOFF

    View Slide

  26. 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

    View Slide

  27. reboot
    • ࠶ىಈίϚϯυ
    • adb shell reboot

    View Slide

  28. am

    View Slide

  29. am start
    • ActivityΛελʔτͤ͞Δ΋ͷ
    • adb shell am start 

    -a android.intent.action.VIEW 

    -d https://google.com

    View Slide

  30. am broadcast
    BroadcastΛ࣮ߦ͢ΔίϚϯυ

    View Slide

  31. am broadcast
    • adb shell am broadcast -a
    com.android.systemui.BATTERY_LEVEL_TEST
    • ి஑࢒ྔ0ʙ100%ͷը૾ΛΞχϝʔγϣϯ

    Ͱ֬ೝͰ͖Δʂ
    • ࢖Θͳ͍ͩΖʔ

    View Slide

  32. am hang
    • ࠓ΍Βͳ͍Α͏ʹͶ͆
    • hang͢ΔͷͰ
    • hangͯ͠Ͳ͏͠Α͏΋ͳ͘ͳͬͨΒ

    adb shell rebootͰ͢Αʂ

    View Slide

  33. 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

    View Slide

  34. pm

    View Slide

  35. pm
    PackageManager

    View Slide

  36. pm path
    • ࢦఆͨ͠ύοέʔδ໊ͷapkͷ৔ॴΛ

    ڭ͑ͯ͘ΕΔ
    • adb shell pm path packageName

    View Slide

  37. pm clear
    • ΞϓϦέʔγϣϯͷσʔλΛΫϦΞ͢Δ
    • adb shell pm clear packageName

    View Slide

  38. 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

    View Slide

  39. 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

    View Slide

  40. dumpsys

    View Slide

  41. dumpsys
    • γεςϜαʔϏεͷঢ়ଶΛμϯϓ
    • ৭ʑؚΊͯಈ࡞νΣοΫ͍ͨ࣌͠ʹΊͬͪΌ
    ศར

    View Slide

  42. dumpsys
    • adb shell dumpsys -l
    • ͜ΕͰsystem serviceͷҰཡ͕ݟ͑Δ
    • ؾʹͳΔSystem ServiceΛ୳͢

    View Slide

  43. dumpsys activity
    • Activityͷ৘ใΛdump͢Δ
    • adb shell dumpsys activity

    View Slide

  44. dumpsys activity top
    • adb shell dumpsys activity top
    • ࠓදࣔͯ͠ΔActivityͷ৘ใ͕ݟ͑Δʂ
    • ϨΠΞ΢τͷߏ଄΋ݟΕΔʂ
    • FragmentManagerͷ৘ใ΋dump͞ΕΔ

    View Slide

  45. dumpsys activity top
    • ৽͍͠ϓϩδΣΫτ΍ݟ஌Β͵ίʔυΛಡΉ࣌ʹ໾ཱͭ
    • ͜ͷը໘ͬͯͲͷActivity? ͲͷFragment? 

    Έ͍ͨͳ͜ͱΛௐ΂Δͷʹ࠷ద
    • ਓ༷ͷΞϓϦͷViewͷߏ଄Λௐ΂Δͷʹ࠷ద

    View Slide

  46. dumpsys usagestats
    • adb shell dumpsys usagestats

    View Slide

  47. adb shell dumpsys dbinfo
    • adb shell dumpsys dbinfo
    • adb shell dumpsys dbinfo packageName
    • ࣮ߦͨ͠SQLͱ͔ͷཤྺ͕ݟ͑Δ
    • ςʔϒϧߏ଄ؙད໰୊

    View Slide

  48. log

    View Slide

  49. log
    • logcatʹ೚ҙͷlogΛଧͪࠐΉ
    • shell log DroidKaigi2017΍ͬͯͧ͘ʂ
    • ͱ͋Δૢ࡞ͷൣғͷlogcatΛݟ͍ͨ࣌ͳͲʹ

    ૢ࡞ͷ࢝ΊͱऴΘΓʹlogΛଧͭͱ͔ʹศར

    View Slide

  50. run-as

    View Slide

  51. run-as
    • ࣮ߦ͢ΔϓϩηεΛม͑Δ?
    • adb shell run-as packageName
    • /data/data/packageName഑؅ͷϑΝΠϧΛ
    ݟ͍ͨ࣌ʹศར

    View Slide

  52. run-as source code
    http://tools.oesf.biz/android-7.1.1_r1.0/
    xref/system/core/run-as/

    View Slide

  53. bugreport

    View Slide

  54. bugreport
    adb bugreport

    View Slide

  55. bugreportz✨

    View Slide

  56. bugreportz
    • adb shell bugreportz
    • bugreportΛzipԽͨ͠΋ͷ͕࡞ΕΔ
    • bugreport͸΋ͷ͘͢͝Ͱ͔͍

    View Slide

  57. 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ͯ͠औΓग़͢

    View Slide

  58. bugreportz Source Code
    https://android.googlesource.com/platform/
    frameworks/native/+/refs/heads/master/
    cmds/bugreportz/

    View Slide

  59. adb uninstall
    • adb uninstall packageName
    • ΞϓϦΛΞϯΠϯετʔϧ͢Δ

    View Slide

  60. σʔλͱΩϟογϡΛ

    ࢒ͨ͠··ΞϯΠϯετʔϧ͢Δ
    • adb shell cmd package uninstall -k
    packageName

    View Slide

  61. ͦͷଞ͍ͬͺ͍͋Γ·͢Αʂ

    View Slide

  62. ίϚϯυԠ༻͍ͯͧ͘͠

    View Slide

  63. ಛఆͷΞϓϦͷSettingը໘Λ

    ίϚϯυͰҰൃͰग़͢!!
    • shell am start -a
    android.settings.APPLICATION_DETAILS_SE
    TTINGS -d package:packageName

    View Slide

  64. Πϯετʔϧ͞Ε͍ͯΔ

    ύοέʔδ໊Λιʔτͯ͠ग़͢ʂ
    • adb shell pm list packages | sed
    '[email protected]^package:@@g' | sort

    View Slide

  65. apkҾͬ͜ൈ͘͜ͱʹ

    શྗΛਚͨ͘͠ʂ
    • adb shell dumpsys activity activities | 

    grep apkΛվ଄ͯ͠pecoͱ߹Θͤͯ

    બ୒ͯ͠pull͢Δ΍ͭ࡞Δ

    View Slide

  66. apkҾͬ͜ൈ͘͜ͱʹ

    શྗΛਚͨ͘͠ʂ
    • adb shell dumpsys activity activities | grep
    apk | sed -e 's/ *baseDir=//g' | peco | xargs
    adb pull

    View Slide

  67. apkҾͬ͜ൈ͘͜ͱʹ

    શྗΛਚͨ͘͠ʂ
    • dumpsys activity activitiesͱpecoͰΰχϣΰ
    χϣͯ͠୺຤͔ΒapkΛ؆୯ʹҾͬ͜ൈ͘
    • http://qiita.com/operandoOS/items/
    6fa77037560e52d11352

    View Slide

  68. dryrun
    • gem install dryrun
    • dryrun ϦϙδτϦͷURL

    View Slide

  69. dryrun
    https://github.com/
    cesarferreira/dryrun

    View Slide

  70. ίϚϯυपΓͷ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/

    View Slide

  71. ίϚϯυͷ࣮ମΛௐ΂Δํ๏
    • logcatΛݟΔ
    • ίϚϯυͷग़ྗ݁Ռ͔Βݻఆ஋ͬΆ͍΋ͷΛ
    ݟ͚ͭͯɺͦΕΛग़ྗͯ͠ΔॲཧΛ୳͢
    • ͔ͦ͜ΒͲΜͲΜ۷ΓԼ͍͛ͯ͘
    • ιʔείʔυ͔Βؤுͬͯ୳͢ʂ

    View Slide

  72. ίϚϯυϥΠϯπʔϧΛ

    ৭ΜͳݴޠͰ࡞ΔͨΊͷૉࡐ
    • DeviceAPI-Android
    • https://github.com/bbc/device_api-android
    • ruby
    • adbkit
    • https://github.com/openstf/adbkit
    • node.js

    View Slide

  73. Android Command Note
    https://github.com/operando/
    Android-Command-Note
    ঺հͨ͠ίϚϯυͱ͔·ͱΊͯ·͢ʂ

    View Slide

  74. Thanks!!

    View Slide