Slide 1

Slide 1 text

ίϚϯυͳ͠Ͱ
 ΅͘͸Android։ൃ
 Ͱ͖ͳ͍࿩ DroidKaigi 2017 Day2

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

ࢿྉ಺ͷίϚϯυʹ packageName
 ͱॻ͔Ε͍ͯΔ෦෼͸
 ΞϓϦͷύοέʔδ໊ʹ
 ஔ͖׵͓͑ͯࢼ͍ͩ͘͠͞ʂ

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

AndroidͰίϚϯυʁ

Slide 6

Slide 6 text

AndroidͰίϚϯυ
 ࢖͑ΔΑ͏ʹͳΓͨʔ͍

Slide 7

Slide 7 text

Ͱ͖·͢

Slide 8

Slide 8 text

࢖͑ΔΑ͏ʹͳΔͨΊʹ • Android SDK·ΘΓʹͪΐͬͱPathΛ
 ௨͚ͩ͢ • جຊɺͦΕ͚ͩʂ

Slide 9

Slide 9 text

• sdk/tools • sdk/tools/bin • sdk/platform-tools • sdk/build-tools/ • sdk/platform-tools/systrace (͓·͚) Android SDKपΓͷ
 Ͳ͜ʹPath௨ͤ͹͍͍ͷ͔

Slide 10

Slide 10 text

ίϚϯυ
 ࢖͍΍͘͢͢Δͧ

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

adb-peco • ෳ਺ͷAndroid୺຤Λಉ࣌ʹͭͳ͍Ͱ
 ࠔͬͯ·ͤΜ͔ʁͦΕadb-pecoͰબ୒Ͱ͖ΔΑʂ • http://techlife.cookpad.com/entry/ 2014/09/09/172449

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

աڈʹ࢖ͬͨίϚϯυΛ
 ΠϯλϥΫςΟϒʹௐ΂ͯ࢖͏ https://gist.github.com/operando/ 250da59cc97d89c33337fe5b129e09f5 peco select adb history

Slide 15

Slide 15 text

adb

Slide 16

Slide 16 text

adb Android Debug Bridge

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

࣮ػͱΤϛϡϨʔλͰ͸
 ࣮ߦͰ͖ΔίϚϯυ͸ҧ͏ • ࣮ػʹ͸ͳ͍͚ͲΤϛϡϨʔλʹ͸
 ೖͬͯΔίϚϯυ͸ͦͦ͋͜͜Δ • ηΩϡϦςΟ্ͷཧ༝ͳͷ͔ͳʁ

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

input

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

input text adb shell input text droidkaigi2017

Slide 24

Slide 24 text

input keyevent Key eventΛൃߦͰ͖Δ

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

am

Slide 29

Slide 29 text

am start • ActivityΛελʔτͤ͞Δ΋ͷ • adb shell am start 
 -a android.intent.action.VIEW 
 -d https://google.com

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

am broadcast • adb shell am broadcast -a com.android.systemui.BATTERY_LEVEL_TEST • ి஑࢒ྔ0ʙ100%ͷը૾ΛΞχϝʔγϣϯ
 Ͱ֬ೝͰ͖Δʂ • ࢖Θͳ͍ͩΖʔ

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

pm

Slide 35

Slide 35 text

pm PackageManager

Slide 36

Slide 36 text

pm path • ࢦఆͨ͠ύοέʔδ໊ͷapkͷ৔ॴΛ
 ڭ͑ͯ͘ΕΔ • adb shell pm path packageName

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

dumpsys

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

dumpsys activity top • ৽͍͠ϓϩδΣΫτ΍ݟ஌Β͵ίʔυΛಡΉ࣌ʹ໾ཱͭ • ͜ͷը໘ͬͯͲͷActivity? ͲͷFragment? 
 Έ͍ͨͳ͜ͱΛௐ΂Δͷʹ࠷ద • ਓ༷ͷΞϓϦͷViewͷߏ଄Λௐ΂Δͷʹ࠷ద

Slide 46

Slide 46 text

dumpsys usagestats • adb shell dumpsys usagestats

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

log

Slide 49

Slide 49 text

log • logcatʹ೚ҙͷlogΛଧͪࠐΉ • shell log DroidKaigi2017΍ͬͯͧ͘ʂ • ͱ͋Δૢ࡞ͷൣғͷlogcatΛݟ͍ͨ࣌ͳͲʹ
 ૢ࡞ͷ࢝ΊͱऴΘΓʹlogΛଧͭͱ͔ʹศར

Slide 50

Slide 50 text

run-as

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

bugreport

Slide 54

Slide 54 text

bugreport adb bugreport

Slide 55

Slide 55 text

bugreportz✨

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

σʔλͱΩϟογϡΛ
 ࢒ͨ͠··ΞϯΠϯετʔϧ͢Δ • adb shell cmd package uninstall -k packageName

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

ίϚϯυԠ༻͍ͯͧ͘͠

Slide 63

Slide 63 text

ಛఆͷΞϓϦͷSettingը໘Λ
 ίϚϯυͰҰൃͰग़͢!! • shell am start -a android.settings.APPLICATION_DETAILS_SE TTINGS -d package:packageName

Slide 64

Slide 64 text

Πϯετʔϧ͞Ε͍ͯΔ
 ύοέʔδ໊Λιʔτͯ͠ग़͢ʂ • adb shell pm list packages | sed 's@^package:@@g' | sort

Slide 65

Slide 65 text

apkҾͬ͜ൈ͘͜ͱʹ
 શྗΛਚͨ͘͠ʂ • adb shell dumpsys activity activities | 
 grep apkΛվ଄ͯ͠pecoͱ߹Θͤͯ
 બ୒ͯ͠pull͢Δ΍ͭ࡞Δ

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

ίϚϯυϥΠϯπʔϧΛ
 ৭ΜͳݴޠͰ࡞ΔͨΊͷૉࡐ • DeviceAPI-Android • https://github.com/bbc/device_api-android • ruby • adbkit • https://github.com/openstf/adbkit • node.js

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

Thanks!!