Slide 1

Slide 1 text

Ͱ͖Δʂ 
 Android Framework 
 Code Reading DroidKaigi 2021 Day 3

Slide 2

Slide 2 text

• Shinobu Okano • @operandoOS / shinobu.dart • 10X, Inc. / Software Engineer • Flutter / Dart / Android / Automation ࣗݾ঺հ

Slide 3

Slide 3 text

10X, Inc. - Stailer https://stailer.jp/

Slide 4

Slide 4 text

We are waiting for YOU! https://jobs.10x.co.jp/

Slide 5

Slide 5 text

͜ͷηογϣϯͷΰʔϧ • Android Frameworkͷίʔυ͕ͳΜͱͳ͘ಡΊΔΑ͏ʹͳΔ • πʔϧΛར༻ͯ͠ಡΈ͍ͨίʔυΛݟ͚ͭΒΕΔΑ͏ʹͳΔ • Android Frameworkͷίʔυ͕ಡΈͨ͘ͳΔʂ

Slide 6

Slide 6 text

Android Framework 
 ͬͯͳʹʁ

Slide 7

Slide 7 text

Android software stack • ͬ͘͟ΓݴͬͯAndroid OSΛߏ੒͍ͯ͠Δ΋ͷ • ͍͔ͭ͘ͷLayerͰ෼͔Ε͍ͯΔ • Android system architectureͱදݱ͞ΕΔ͜ͱ΋͋Δ • ͱʹ͔͘޿͍ɾͰ͔͍ɾਂ͍ɾ΍͹͍

Slide 8

Slide 8 text

https://source.android.com/index.html https://source.android.com/setup/intro Android software stack

Slide 9

Slide 9 text

• શLayerͷιʔείʔυ͕΄΅OSSͱͯ͠ެ։͞Ε͍ͯΔͷͰಡΊΔ • Kotlin/JavaͰΞϓϦ։ൃ͍ͯ͠Δਓ͕ؾܰʹಡΊΔͷ͸ Android Framework Layer • Android Framework Layer͸͓͓͔ͨJavaͰॻ͔Ε͍ͯΔ • ͦΕΑΓԼͷLayer͸C/C++ɺRustͳͲͰॻ͔Ε͍ͯΔ Android software stack

Slide 10

Slide 10 text

ຊࢿྉʹ͓͚ΔAndroid Framework • Android Framework = Android software stack ͱ͍͏ 
 Ґஔ͚ͮͰॻ͍͍ͯ·͢ • ͨͩ͠ຊࢿྉͰ঺հ͢Δ͜ͱ͸্ҐϨΠϠʔ޲͚ͷ 
 Code ReadingΛϝΠϯλʔήοτͱ͍ͯ͠·͢

Slide 11

Slide 11 text

Android FrameworkͷίʔυΛಡΉཧ༝ • ಡΉ͜ͱͰ಺෦ͷ࢓૊ΈΛཧղ͠ɺΞϓϦ։ൃ౳ʹ໾ཱͯΔ • ͳΜͱͳ͘಺෦ͷ࢓૊Έ஌Γ͍ͨͳʔͱ͍͏ڵຯ͕༙͍ͯ 
 ͠·͏͔Β • ָ͍͔͠Β☺

Slide 12

Slide 12 text

Android Framework 
 Code ReadingΛ͢Δ্Ͱ 
 ศརͳαΠτɾπʔϧͷ঺հ

Slide 13

Slide 13 text

Android Code Search “Code Search with Cross References for the Android Open Source Project” https://android-developers.googleblog.com/2019/12/code- search-with-cross-references-for-aosp.html

Slide 14

Slide 14 text

Android Code Search https://cs.android.com/

Slide 15

Slide 15 text

Android Code Search(ACS) • ϒϥ΢β্ͰAndroid FrameworkͷίʔυΛݕࡧɾӾཡ 
 Ͱ͖ΔαΠτ • ίʔυྔ͕๲େͳAndroid FrameworkͷίʔυΛಡΉ্Ͱ ඞਢπʔϧ • Google͕ӡӦΛ͍ͯ͠Δ

Slide 16

Slide 16 text

Android Code Searchͷ͍͢͝ͱ͜Ζ • ݕࡧͷϑΟϧλʔ͕๛෋ • ߦ਺͕ଟ͍ίʔυͰ΋αΫαΫදࣔ͞ΕΔ • ϒϥϯνͷ੾Γସ͕͑Ͱ͖Δ • ૬ޓࢀরͷϦϯΫ͕షΒΕ͍ͯΔ • ϝιουͷ֊૚ݺͼग़͠ɺࢀর͕Θ͔Δ • Ξ΢τϥΠϯΊͪΌศརʂ

Slide 17

Slide 17 text

ݕࡧͷϑΟϧλʔ͕๛෋ • ໨తͷίʔυΛ୳ͨ͢Ίʹ໾ཱͭϑΟϧλʔ͕͍ͬͺ͍ • ݕࡧ૭ͰϑΟϧλʔͷSyntaxΛิ׬ͯ͘͠ΕΔ • Syntax reference • https://developers.google.com/code-search/reference

Slide 18

Slide 18 text

ߦ਺͕ଟ͍ίʔυͰ΋αΫαΫදࣔ͞ΕΔ • 1ສߦ͘Β͍ͷίʔυͳΒಡΈࠐΈ΋දࣔ΋αΫαΫ • ࢼ͠ʹIntent.javaΛ։͍ͯΈͯʂ • https://cs.android.com/android/platform/ superproject/+/master:frameworks/base/core/java/ android/content/Intent.java

Slide 19

Slide 19 text

ϒϥϯνͷ੾Γସ͕͑Ͱ͖Δ • ಛఆOSόʔδϣϯͷಈ࡞Λௐ΂͍ͨ࣌ʹศར • ݹ͍OSόʔδϣϯͷϒϥϯν΋͋Δ • ίʔυΛ։͍ͨ··ϒϥϯν੾Γସ͑Ͱɺ੾Γସ͑ઌͷ 
 όʔδϣϯͷίʔυʹมΘΔ • ͦͷ͏ͪAndroid 12ͷϒϥϯν΋ग़Δ͸ͣ

Slide 20

Slide 20 text

ϒϥϯνͷ੾Γସ͕͑Ͱ͖Δ

Slide 21

Slide 21 text

૬ޓࢀরͷϦϯΫ͕షΒΕ͍ͯΔ • ϝιουɾΫϥεͳͲ΁ͷδϟϯϓ͕Ͱ͖Δ • ίʔυʹϦϯΫ͕షΒΕ͍ͯΔͷͰͦΕΛΫϦοΫ͢Δ͚ͩ • ͢΂ͯͷίʔυʹ૬ޓࢀরͷϦϯΫ͕͋ΔΘ͚͡Όͳ͍ 
 ͷͰ஫ҙ

Slide 22

Slide 22 text

૬ޓࢀরͷϦϯΫ͕షΒΕ͍ͯΔ https://cs.android.com/android/platform/superproject/+/android-11.0.0_r40:frameworks/base/core/java/android/app/ Activity.java;l=5070

Slide 23

Slide 23 text

૬ޓࢀরͷϦϯΫ͕షΒΕ͍ͯΔ https://cs.android.com/android/platform/superproject/+/android-11.0.0_r40:frameworks/base/core/java/android/app/ Activity.java;drc=55d98d2ba142d6c35894b1092397e2b5a70bc2e8;l=3440

Slide 24

Slide 24 text

ϝιουͷ֊૚ݺͼग़͠ɺࢀর͕Θ͔Δ https://cs.android.com/android/platform/superproject/+/android-11.0.0_r40:frameworks/base/core/java/android/database/ sqlite/SQLiteDatabase.java;l=830;bpv=1;bpt=1

Slide 25

Slide 25 text

ఆ਺΋ࢀর͞Ε͍ͯΔՕॴ͕Θ͔Δ https://cs.android.com/android/platform/superproject/+/android-11.0.0_r40:frameworks/base/core/java/android/database/ sqlite/SQLiteGlobal.java;l=46;bpv=1;bpt=0

Slide 26

Slide 26 text

• Ϋϥεʹఆٛͯ͋͠Δ 
 ఆ਺ɺϝιουͳͲ͕ 
 ҰཡͰݟΕΔ Ξ΢τϥΠϯΊͪΌศརʂ

Slide 27

Slide 27 text

• ϑΟϧλʔ΋Ͱ͖Δʂ Ξ΢τϥΠϯΊͪΌศརʂ

Slide 28

Slide 28 text

• ΩʔϘʔυૢ࡞͚ͩͰ΋ ͋Δఔ౓࢖͑ΔΑ͏ʹ 
 ߟྀ͞Εͯͦ͏ ΩʔϘʔυγϣʔτΧοτ

Slide 29

Slide 29 text

• ৭ʑม͑ΒΕΔ • ݕࡧ݁Ռ݅਺૿΍͢ͷ 
 ͓͢͢Ί • ࣗ෼ʹ߹ͬͨίʔυͷ 
 ϑΥϯταΠζʹมߋ͢Δ Android Code Searchͷઃఆ

Slide 30

Slide 30 text

Android Code Search ૢ࡞σϞ • ࣮ࡍʹૢ࡞ͯ͠Δͱ͜ΖΛσϞ͠·͢ • ͥͻΈͳ͞Μ΋͓ࢼ͍ͩ͘͠͞ʂʂ • https://cs.android.com/

Slide 31

Slide 31 text

“Code Search for Google open source projects” https://opensource.googleblog.com/2020/04/code-search-for- google-open-source.html Code Search͸Android͚ͩ͡Όͳ͍ʂ

Slide 32

Slide 32 text

͜Μͳʹ͍ͬͺ͍ʂʂ https://cs.opensource.google/

Slide 33

Slide 33 text

Chromium΋͋Δ https://source.chromium.org/chromium

Slide 34

Slide 34 text

AOSP WebαΠτ • AOSP(Android Open Source Project) • https://source.android.com/index.html • Androidͷ৭Μͳ͜ͱ͕υΩϡϝϯτͰ·ͱ·ͬͯΔ • ڵຯ͋ΔςʔϚΛݟ͚ͭͯಡΜͰΈΔͷ͕͓͢͢Ί

Slide 35

Slide 35 text

adb(Android Debug Bridge) • ৭ʑศརͳadbίϚϯυ • ୺຤ͷঢ়ଶΛ೺Ѳɾૢ࡞͢Δ্Ͱඞਢͳπʔϧ • ࠓճ͸Code Reading͢Δࡍʹɺݸਓతʹར༻ස౓͕ 
 ߴ͍ίϚϯυͷΈ঺հ

Slide 36

Slide 36 text

adb(Android Debug Bridge) • adbͷৄࡉ΍ઃఆͳͲ͸ҎԼͷϦϯΫΛݟ͍ͯͩ͘͞ • https://developer.android.com/studio/command-line/ adb

Slide 37

Slide 37 text

Logcat • AndroidγεςϜ͕ॻ͖ग़ͨ͠ϩάΛग़ྗ͢Δπʔϧ • ϩά͸Code Readingʹ໾ཱͭૉࡐͷҰͭ

Slide 38

Slide 38 text

“Android Logging System” https://elinux.org/Android_Logging_System Logcat

Slide 39

Slide 39 text

• جຊ͜ΕɻΦϓγϣϯ͸ඞཁʹͳͬͨΒ࢖͏ɻ Α͘࢖ͬͯΔLogcatίϚϯυྫ > ~ adb logcat -v time

Slide 40

Slide 40 text

• mainҎ֎ͷϩά͕ݟ͍ͨ৔߹ʹ͸ -b Α͘࢖ͬͯΔLogcatίϚϯυྫ > ~ adb logcat -v time -b system

Slide 41

Slide 41 text

LogcatΛදࣔͭͭ͠ϑΝΠϧʹॻ͖ࠐΉ • ϩάΛޙʑ·ͨݟ͍ͨ৔߹ʹศར • aliasʹ͓ͯ͘͠ͱ͍͍ > ~ adb logcat -v time | tee logcat_main_$ (date +"%Y%m%d-%H%M%S").log

Slide 42

Slide 42 text

“Logcat command-line tool” https://developer.android.com/studio/command-line/logcat LogcatͷΦϓγϣϯʹ͍ͭͯৄ͘͠

Slide 43

Slide 43 text

• ϩάόοϑΝͷαΠζΛ 
 େ͖͘͢Δ • ϩά͕ྲྀΕͯফ͑ͯ͠·͏ ͷΛܰݮͰ͖Δ • ։ൃऀ޲͚Φϓγϣϯ͔Β มߋͰ͖Δ Logcatͷ͓͢͢Ίઃఆ

Slide 44

Slide 44 text

Logcatͷ࣮૷ • ͜͜ • https://cs.android.com/android/platform/ superproject/+/master:system/logging/logcat/

Slide 45

Slide 45 text

dumpsys • γεςϜαʔϏεͷঢ়ଶΛग़ྗ͢Δπʔϧ • γεςϜαʔϏεؔ࿈ͷCode ReadingΛ͢Δࡍʹศར • ΞϓϦ։ൃ࣌ʹ΋໾ཱͭ • https://developer.android.com/studio/command-line/ dumpsys

Slide 46

Slide 46 text

dumpsys • جຊతʹग़ྗ͍ͨ͠γεςϜαʔϏεΛࢦఆ͢Δ > ~ adb shell dumpsys

Slide 47

Slide 47 text

“pecoΛ࢖ͬͯಛఆͷγεςϜαʔϏεͷ dumpsysΛ؆୯ʹ͢Δ” https://qiita.com/operandoOS/items/ 15bc6d1053d3ab31b300 dumpsys

Slide 48

Slide 48 text

bugreport • ৭Μͳϩά͔ΒCode ReadingͷώϯτΛಘΔ৔߹ʹศར • औಘͰ͖Δϩάͷ਺͸ΊͬͪΌଟ͍ > ~ adb bugreport

Slide 49

Slide 49 text

“Reading Bug Reports” https://source.android.google.cn/setup/contribute/read-bug- reports bugreport

Slide 50

Slide 50 text

• DroidKaigi 2017Ͱͻͨ͢ Βadbʹ͍ͭͯ࿩ͨ͠ͷͰ ڵຯ͋Δํ͸ͥͻʂ • https://speakerdeck.com/ operando/ komantonasitehokuhaan droidkai-fa-tekinaihua-1 ͦͷଞͷadbίϚϯυʹ͍ͭͯ

Slide 51

Slide 51 text

ಡΈ͍ͨ໨తͷίʔυʹ 
 ͨͲΓணٕ͘ज़

Slide 52

Slide 52 text

ಡΈ͍ͨ໨తͷίʔυʹͨͲΓணٕ͘ज़ • Android Framework͸ίʔυྔ͕๲େͳͷͰద౰ʹ୳ͯ͠ ΋ಡΈ͍ͨ໨తͷίʔυʹͨͲΓண͚ͳ͍😭 • ͖͞΄Ͳ঺հͨ͠αΠτ΍πʔϧΛར༻ͯ͠ 
 ಡΈ͍ͨ໨తͷίʔυʹͨͲΓண͘ํ๏ͷྫΛ঺հ

Slide 53

Slide 53 text

ಡΈ͍ͨ໨తͷίʔυʹͨͲΓணٕ͘ज़ • Android Code SearchͷݕࡧΛ࢖͏ • LogcatͳͲγεςϜ͕ग़ྗ͢ΔϩάΛ࢖͏ • ΞϓϦ্ʹදࣔ͞ΕΔจࣈྻΛ࢖͏

Slide 54

Slide 54 text

ಡΈ͍ͨ໨తͷίʔυʹͨͲΓணٕ͘ज़ • Android Code SearchͷݕࡧΛ࢖͏ • LogcatͳͲγεςϜ͕ग़ྗ͢ΔϩάΛ࢖͏ • ΞϓϦ্ʹදࣔ͞ΕΔจࣈྻΛ࢖͏

Slide 55

Slide 55 text

Android Code SearchͷݕࡧΛ࢖͏ • ಡΈ͍ͨ໨తͷίʔυʹؔ࿈ͦ͠͏ͳϫʔυͰݕࡧ͢Δ • ͳΜͱͳ͘໨తͷίʔυͷ໨੕͕෇͍ͯΔ৔߹͸ 
 ͜Ε͕Ұ൪ૣ͍͔΋ • ݕࡧ݁Ռ͕ଟ͗͢Δ৔߹͸ɺݕࡧϑΟϧλʔΛ׆༻ͯ͠ 
 ݅਺Λߜ͍ͬͯ͘

Slide 56

Slide 56 text

• ͖͞΄Ͳ঺հͨ͠Logcat ͷϩάόοϑΝαΠζΛ 
 ม͑Δ࣮૷Λ୳ͨ͠ྫ • languageϑΟϧλʔ͸ 
 ͓͢͢Ί ݕࡧϑΟϧλʔΛ׆༻ͯ݅͠਺ΛߜΔ

Slide 57

Slide 57 text

“Rust in the Android platform” https://security.googleblog.com/2021/04/rust-in-android- platform.html AndroidͷRustͬͯͲ͜Ͱ࢖ΘΕͯΔͷʁ

Slide 58

Slide 58 text

AndroidͷRustͬͯͲ͜Ͱ࢖ΘΕͯΔͷʁ

Slide 59

Slide 59 text

ಡΈ͍ͨ໨తͷίʔυʹͨͲΓணٕ͘ज़ • Android Code SearchͷݕࡧΛ࢖͏ • LogcatͳͲγεςϜ͕ग़ྗ͢ΔϩάΛ࢖͏ • ΞϓϦ্ʹදࣔ͞ΕΔจࣈྻΛ࢖͏

Slide 60

Slide 60 text

LogcatͳͲγεςϜ͕ग़ྗ͢ΔϩάΛ࢖͏ • खࠒͳͷ͸Logcatͷग़ྗΛ࢖͏΍Γํ • γεςϜ͕ग़ྗ͢Δϩά = ϩάग़ྗͷίʔυ͕ଘࡏ͢Δ • ग़ྗ͍ͯ͠ΔίʔυʹͨͲΓண͖ɺͦͷपลͷίʔυ͔Β ໨తͷίʔυ΁ͨͲΓண͚Δ͔୳͢

Slide 61

Slide 61 text

͜ΜͳखॱͰϩάΛ࢖ͬͯίʔυΛ୳͢ 1. ಡΈ͍ͨ໨తͷίʔυʹؔ࿈͢Δૢ࡞Λߦ͏ 2. ૢ࡞1ʹΑΓग़ྗ͞ΕͨLogcat͔ΒಡΈ͍ͨίʔυʹ 
 ؔ࿈͢ΔϩάΛ୳͢ 3. ݟ͚ͭͨϩά͔ΒݻఆจࣈྻΛ୳͢ 4. ݟ͚ͭͨจࣈྻΛAndroid Code Search(ACS)Ͱݕࡧ͢Δ

Slide 62

Slide 62 text

͜ΜͳखॱͰϩάΛ࢖ͬͯίʔυΛ୳͢ • ʮΞϓϦ͕ΞϯΠϯετʔϧ͞ΕΔ࣌ʹߦΘΕ͍ͯΔ͜ͱʯ ΛಡΈ͍ͨ໨తͷίʔυͱͯ͠ɺ۩ମతʹखॱΛઆ໌ • ࢿྉΛݟͳ͕ΒΈͳ͞ΜͷखݩͰ࣮ࡍʹ΍ͬͯΈΔ͜ͱΛ 
 ͓͢͢Ί͠·͢

Slide 63

Slide 63 text

1. ಡΈ͍ͨ໨తͷίʔυʹؔ࿈͢Δૢ࡞Λߦ͏ • ૢ࡞࣌ͷϩά͕ݟ͍ͨͷͰɺLogcatίϚϯυΛ࣮ߦ͓ͯ͘͠ > ~ adb logcat -v time

Slide 64

Slide 64 text

• ʮΞϓϦ͕ΞϯΠϯετʔϧ͞ ΕΔ࣌ʹߦΘΕ͍ͯΔ͜ͱʯΛ ஌Γ͍ͨͷͰɺ୺຤͔Βద౰ʹ ΞϓϦΛΞϯΠϯετʔϧ͢Δ • ͜Ε͕ʮಡΈ͍ͨ໨తͷίʔυ ʹؔ࿈͢Δૢ࡞ʯͰ͢ 1. ಡΈ͍ͨ໨తͷίʔυʹؔ࿈͢Δૢ࡞Λߦ͏

Slide 65

Slide 65 text

2. ಡΈ͍ͨίʔυʹؔ࿈͢ΔϩάΛ୳͢ • ૢ࡞1ʹΑΓग़ྗ͞ΕͨLogcat͔ΒಡΈ͍ͨίʔυʹ 
 ؔ࿈͢ΔϩάΛ୳͢ • ஍ຯʹ໨grepྗ͕໰ΘΕΔ • ϩάग़ྗͷྔ͕ଟ͍ૢ࡞ͷ৔߹͸ϑΝΠϧʹॻ͖ग़্ͨ͠Ͱ ୳͢ํ͕͍͍

Slide 66

Slide 66 text

• ؔ࿈ͦ͠͏ͳϩάൃݟ 2. ಡΈ͍ͨίʔυʹؔ࿈͢ΔϩάΛ୳͢

Slide 67

Slide 67 text

UninstallerActivity(19960):Uninstallingextras=Bundle[{com.an droid.packageinstaller.extra.APP_LABEL=DroidKaigi2021,com. android.packageinstaller.applicationInfo=ApplicationInfo{5f5c cecio.github.droidkaigi.feeder.debug},android.intent.extra.UN INSTALL_ALL_USERS=false, com.android.packageinstaller.extra.UNINSTALL_ID=-2147483 643}] 
 I/ActivityManager( 1424): Force stopping io.github.droidkaigi.feeder.debug appid=10666 user=0: deletePackageX I/ActivityManager( 1424): Killing 23256:io.github.droidkaigi.feeder.debug/u0a666 (adj 940): stop io.github.droidkaigi.feeder.debug due to deletePackageX • ԫ৭෦෼͸ݻఆจࣈྻͬΆ͍ งғؾ • tagʢUninstallerActivityͷ ෦෼ʣ͸ݻఆจࣈྻͰίʔυ ্ʹఆٛ͞Ε͍ͯΔ͜ͱ͕ଟ ͍ͷͰݕࡧʹ࢖͍΍͍͢ 3. ݟ͚ͭͨϩά͔ΒݻఆจࣈྻΛ୳͢

Slide 68

Slide 68 text

• ظ଴Ͳ͓Γ͍͍ײ͡ʹݕࡧ ʹҾ͔͔ͬΓ·ͨ͠ • ݕࡧʹώοτͨ͠ίʔυΛ ى఺ʹಡΈ͍ͨ໨తͷ 
 ίʔυΛ஍ಓʹ୳͢ 4. ݟ͚ͭͨจࣈྻΛACSͰݕࡧ͢Δ

Slide 69

Slide 69 text

γεςϜ͕ग़ྗ͢ΔϩάͰ࢖͑ͦ͏ͳ΋ͷ • γεςϜαʔϏεͷίʔυΛಡΉͳΒdumpsysͷϩάΛ 
 ࢖͏ͷ͕͓͢͢Ί • ৭Μͳϩά͔Β୳͢ͳΒbugreportΛ࢖͏ͷ͕͓͢͢Ί • ಡΈ͍ͨίʔυʹΑͬͯ࢖͑Δϩά͸ଞʹ΋৭ʑ͋Δ

Slide 70

Slide 70 text

ಡΈ͍ͨ໨తͷίʔυʹͨͲΓணٕ͘ज़ • Android Code SearchͷݕࡧΛ࢖͏ • LogcatͳͲγεςϜ͕ग़ྗ͢ΔϩάΛ࢖͏ • ΞϓϦ্ʹදࣔ͞ΕΔจࣈྻΛ࢖͏

Slide 71

Slide 71 text

ΞϓϦ্ʹදࣔ͞ΕΔจࣈྻΛ࢖͏ 1. ಡΈ͍ͨ໨తͷίʔυʹؔ࿈͢ΔΞϓϦΛ୳͢ 2. ૢ࡞1Ͱݟ͚ͭͨΞϓϦͰಡΈ͍ͨίʔυʹ 
 ɹؔ࿈͢Δը໘Λ୳͢ 3. ݟ͚ͭͨը໘͔ΒݻఆจࣈྻΛ୳͢ 4. ݟ͚ͭͨจࣈྻΛAndroid Code Search(ACS)Ͱݕࡧ͢Δ

Slide 72

Slide 72 text

• ʮΞϓϦ͕ڧ੍ఀࢭ͞ΕΔ࣌ʹߦΘΕΔ͜ͱʯ 
 ΛಡΈ͍ͨ໨తͷίʔυͱͯ͠ɺ۩ମతͳखॱΛઆ໌ • ࢿྉΛݟͳ͕ΒΈͳ͞ΜͷखݩͰ࣮ࡍʹ΍ͬͯΈΔ͜ͱΛ 
 ͓͢͢Ί͠·͢ ΞϓϦ্ʹදࣔ͞ΕΔจࣈྻΛ࢖͏

Slide 73

Slide 73 text

• ʮΞϓϦ͕ڧ੍ఀࢭ͞ΕΔ࣌ʹߦΘΕΔ͜ͱʯ͕஌Γ͍ͨͷ ͰɺઃఆΞϓϦ͕ྑͦ͞͏ 1. ಡΈ͍ͨ໨తͷίʔυʹؔ࿈͢ΔΞϓϦΛ୳͢

Slide 74

Slide 74 text

• ʮΞϓϦ͕ڧ੍ఀࢭ͞ΕΔ ࣌ʹߦΘΕΔ͜ͱʯ͕஌Γ ͍ͨͷͰɺઃఆΞϓϦͷ 
 ͜ͷը໘͕ྑͦ͞͏ 2. ಡΈ͍ͨίʔυʹؔ࿈͢Δը໘Λ୳͢

Slide 75

Slide 75 text

• ʮڧ੍ఀࢭ͠·͔͢ʁʯ͸ ݻఆจࣈྻͬΆ͍ͷͰ 
 ݕࡧͷૉࡐʹ͠·͠ΐ͏ 3. ݟ͚ͭͨը໘͔ΒݻఆจࣈྻΛ୳͢

Slide 76

Slide 76 text

• ݕࡧͯ͠ແࣄώοτ͠·ͨ͠ • ACS೔ຊޠͷݕࡧ΋໰୊ͳ͘ಈ͘ͷΑ͍ʂ 4. ݟ͚ͭͨจࣈྻΛACSͰݕࡧ͢Δ

Slide 77

Slide 77 text

• ΞϓϦจݴ͸ݕࡧ͢Δͱߴ֬཰Ͱstrings.xml͕ώοτ͢Δ • ώοτͨ͠stringͷnameͰ͞Βʹݕࡧ͢Δ • nameͰݕࡧ͢Δͱදࣔͯ͠Δ࣮૷ʹͨͲΓண͘ • ͔ͦ͜ΒपลͷίʔυΛಡΜͰ͍͘ 4. ݟ͚ͭͨจࣈྻΛACSͰݕࡧ͢Δ

Slide 78

Slide 78 text

• ͍͍ײ͡ʹݕࡧʹώοτͨ͠ • language:javaΛ͚ͭͯ stirngs.xml͕ݕࡧ݁Ռʹ 
 Ҿ͔͔ͬΒͳ͍Α͏ʹͯ͠Δ • ݕࡧʹώοτͨ͠ίʔυΛى఺ ʹಡΈ͍ͨ໨తͷ 
 ίʔυΛ஍ಓʹ୳͢ 4. ݟ͚ͭͨจࣈྻΛACSͰݕࡧ͢Δ

Slide 79

Slide 79 text

Android FrameworkͰ 
 ΞϓϦ։ൃऀ͕खܰʹ 
 ಡΊͦ͏ͳίʔυͷ঺հ

Slide 80

Slide 80 text

frameworks/ • Android Framework Layerશൠͷίʔυ • https://cs.android.com/android/platform/ superproject/+/master:frameworks/

Slide 81

Slide 81 text

frameworks/base/services/core/ • γεςϜαʔϏεͷίʔυ • https://cs.android.com/android/platform/ superproject/+/master:frameworks/base/services/ core/

Slide 82

Slide 82 text

frameworks/base/core/java/ • Android SDKશൠͷίʔυ • https://cs.android.com/android/platform/ superproject/+/master:frameworks/base/core/java/

Slide 83

Slide 83 text

packages/apps/ • γεςϜΞϓϦશൠͷίʔυ • https://cs.android.com/android/platform/ superproject/+/master:packages/apps/

Slide 84

Slide 84 text

ΞϓϦ։ൃऀ͕खܰʹಡΊͦ͏ͳίʔυ • Android Framework Layer͸C/C++ͷίʔυ΋Ұ෦͋Γ ·͕͢ɺJavaͷίʔυ΋ΊͬͪΌ͋ΔͷͰಡΈ๞͖Δ͜ͱ ͸ͳ͍ͱࢥ͍·͢ʂ

Slide 85

Slide 85 text

Code Readingͷ݁ՌΛ 
 ·ͱΊΔ

Slide 86

Slide 86 text

Code Readingͷ݁ՌΛ·ͱΊΔ • ·ͱΊͨ݁Ռ͸͖ͬͱ୭͔ͷ໾ʹཱͪ·͢☺ • ·ͱΊ͓ͯ͘ͱࣗ෼͕ݟฦ࣌͢ʹศར👍 • ·ͱΊͯͲ͔͜ʹެ։͓ͯ͘͠ͷ͕͓͢͢ΊͰ͢✨

Slide 87

Slide 87 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ • Code Readingͨ͠ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ • ॏཁͳ࣮૷෦෼͸ίʔυ෇͖ͰϝϞΔ + ίʔυͷϦϯΫΛ͚ͭΔ • ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛషΔ • Code Reading࠷தϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ

Slide 88

Slide 88 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • ͦΕͧΕͷ޻ఔʹ͍ͭͯɺࢲ͕ҎલCode Readingͯ͠ 
 ݁ՌΛ·ͱΊͨهࣄΛྫʹઆ໌͠·͢ • ·ͱΊΔࡍͷࢀߟʹͳΕ͹ͱ✨

Slide 89

Slide 89 text

“Android11͔Βಋೖ͞ΕͨAuto-reset permissionsΛௐ΂ͯΈͯΘ͔ͬͨ͜ͱ” https://hack-it-iron.hatenablog.com/entry/ 2020/12/14/081217 Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔

Slide 90

Slide 90 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ • Code Readingͨ͠ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ • ॏཁͳ෦෼͸ίʔυͱίʔυ΁ͷϦϯΫΛهࡌ͢Δ • ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛهࡌ͢Δ • Code Reading࠷தϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ

Slide 91

Slide 91 text

• ର৅͕ಛఆͷػೳͰ͋Ε͹ 
 ͦͷػೳͷ֓ཁΛهࡌ͢Δ • ֓ཁ͕ॻ͍ͯ͋ΔͱCode Readingͨ݁͠Ռͷ·ͱΊ ΋ཧղ͠΍͘͢ͳΔ Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ

Slide 92

Slide 92 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ • Code Readingͨ͠ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ • ॏཁͳ෦෼͸ίʔυͱίʔυ΁ͷϦϯΫΛهࡌ͢Δ • ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛهࡌ͢Δ • Code Reading࠷தϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ

Slide 93

Slide 93 text

• ཧ༝Λॻ͘ͱ໨తʹ͋ͬͨ 
 ίʔυΛಡΉ͜ͱʹ 
 ूதͰ͖Δ • Θ͔ͬͨ͜ͱͷཁ໿Λ 
 ॻ͘ͱ·ͱΊΛಡΈฦ͢ 
 ࡍʹศར ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ

Slide 94

Slide 94 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ • Code Readingͨ͠ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ • ॏཁͳ෦෼͸ίʔυͱίʔυ΁ͷϦϯΫΛهࡌ͢Δ • ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛهࡌ͢Δ • Code Reading࠷தϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ

Slide 95

Slide 95 text

• Code Readingͷ·ͱΊจ ষ͚ͩͰ఻͑Δͷ͸೉͍͠ • ࣮૷෦෼ͷίʔυ΋ަ͑ͯ ·ͱΊΔͷ͕͓͢͢Ί • ίʔυ΁ͷϦϯΫ΋Ұॹʹ ͋Δͱͳ͓Α͍👍 ίʔυͱίʔυ΁ͷϦϯΫΛهࡌ͢Δ

Slide 96

Slide 96 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ • Code Readingͨ͠ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ • ॏཁͳ෦෼͸ίʔυͱίʔυ΁ͷϦϯΫΛهࡌ͢Δ • ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛهࡌ͢Δ • Code Reading࠷தϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ

Slide 97

Slide 97 text

• Code Reading͍ͯ͠Δத ͰࢀߟʹͳΓͦ͏ͳυΩϡ ϝϯτ͋Ε͹ɺඞཁͳͱ͜ ΖͰهࡌ͢Δ • ࢀߟϦϯΫूΈ͍ͨͳܗͰ ࠷ޙͷํʹ·ͱΊͯهࡌ 
 ͢Δͷ΋͋Γ ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛهࡌ͢Δ

Slide 98

Slide 98 text

Code Readingͷ݁ՌΛͲ͏·ͱΊΔ͔ • Code Readingͨ͠ର৅ͷ֓ཁΛهࡌ͢Δ • Code Readingͨ͠ཧ༝ͱΘ͔ͬͨ͜ͱͷཁ໿Λهࡌ͢Δ • ॏཁͳ෦෼͸ίʔυͱίʔυ΁ͷϦϯΫΛهࡌ͢Δ • ࢀߟʹͳΔυΩϡϝϯτͷϦϯΫΛهࡌ͢Δ • Code ReadingதϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ

Slide 99

Slide 99 text

• Code Reading͢Δ্Ͱ 
 ϝϞ͸େࣄ • ͪΐͬͱͨ͠ϝϞͰ΋ফͣ͞ ʹ࢒͓ͯ͘͠ • ·ͱΊͷ࠷ޙͷํʹϝϞΛ 
 ͦͷ··ࡶʹॻ͍͓͚ͯͩ͘ Ͱ΋Ձ஋͸͋Δ ϝϞΛ࢒͠ɺͦΕ΋ͬ͟ͱهࡌ͢Δ https://github.com/operando/JobScheduler-Code-Reading

Slide 100

Slide 100 text

·ͱΊ

Slide 101

Slide 101 text

·ͱΊ • Android Frameworkͷίʔυ͸ಡΉςΫχοΫΛ਎ʹ 
 ͚ͭΕ͹ɺΘΓͱ͢ΜͳΓಡΊΔΑ͏ʹͳΓ·͢💪 • ͨͩίʔυྔ͕๲େͳͷͰࠜؾڧ͞͸ඞཁͰ͢😅 • ಡΜͩΒ·ͱΊΛॻ͍ͯ஌ݟΛڞ༗͠·͠ΐ͏👍

Slide 102

Slide 102 text

Thank you!

Slide 103

Slide 103 text

͜ΕҎ߱͸ొஃ࣌ؒͷ౎߹Ͱ ࡟ͬͨεϥΠυू ʢ͓·͚ʣ

Slide 104

Slide 104 text

Android Framework Code Readingͷ 
 ώϯτʹͳΔॻ੶ • AndroidΛࢧ͑Δٕज़ʪⅠʫ,ʪⅡʫ • Androidͷͳ͔Έ InsideAndroid

Slide 105

Slide 105 text

Android FrameworkͷίʔυΛμ΢ϯϩʔυ͢Δ • Repoͱ͍͏πʔϧΛ࢖͏͜ͱͰμ΢ϯϩʔυͰ͖Δ • Android OSΛ։ൃ͢Δ্Ͱ͸ඞਢͳπʔϧ • ৭ʑେมͳͷͰຊฤͰͷ঺հΛආ͚ͨ😂 • https://source.android.google.cn/setup/build/ downloading

Slide 106

Slide 106 text

adb-peco • ෳ਺AndroidσόΠε͕PCʹ઀ଓ͞Ε͍ͯΔ࣌ʹ 
 σόΠεબ୒Λࢧԉͯ͘͠ΕΔπʔϧ • https://github.com/tomorrowkey/adb-peco

Slide 107

Slide 107 text

AIDEGen • Android Frameworkͷ։ൃΛIDEͰߦ͏ͨΊʹ৭ʑ΍ͬͯ ͘ΕΔπʔϧͬΆ͍ • https://android.googlesource.com/platform/tools/ asuite/+/refs/heads/master/aidegen/README.md • ࢖ͬͨ͜ͱͳ͍͚ͲɺࢿྉΛ࡞ͬͯΔաఔͰݟ͚ͭͨ

Slide 108

Slide 108 text

AIDEGen https://codechacha.com/ja/android-aidegen/ “AIDEGenʹIDEͰAndroid Framework։ൃ”

Slide 109

Slide 109 text

Session Buddy • Chrome Extension • https://sessionbuddy.com/ • ։͍ͯΔλϒΛλϒɾ΢Οϯυ΢ͷঢ়ଶΛอଘͰ͖Δ • Code Readingͯ͠ΔͱΊͬͪΌλϒ։͖·͘Δ • ಡΜͰΔঢ়ଶΛҰ୴อଘ͓͖͍ͯͨ͠৔߹ʹศར

Slide 110

Slide 110 text

πϦʔܕλϒ • Firefox Add-ons • https://addons.mozilla.org/ja/ fi refox/addon/tree- style-tab/ • ಡΜͰ͍Δίʔυͷϝιουݺͼग़͠ͷ֊૚ͱ͔ΛπϦʔ ܕͷλϒͰ؅ཧ͢Δͷʹศར

Slide 111

Slide 111 text

ͪΐͬͱੲ࿩ͱײँͷؾ࣋ͪ • ACS͕ެ։͞ΕΔલ͸༗ࢤʹΑΔӡӦͰɺOpenGrokͱ͍ ͏ιϑτ΢ΣΞΛ࢖ͬͯࣅͨ΋ͷ͕ߏங͞Ε͍ͯͨ • https://sites.google.com/site/devcollaboration/ codesearch • ͱͯ΋͓ੈ࿩ʹͳΓ·ͨ͠🙏͘͢͝ײँ͍ͯ͠·͢ʂ

Slide 112

Slide 112 text

·ͬͨΓAndroid Framework Code Reading • AndroidͷιʔείʔυΛಡΜͰɺ։ൃ౳ʹ໾ཱͯΔษڧձΛ 
 ਺೥લ ࢲ͕ओ࠵ऀͰ΍͍ͬͯͨ • ࢀՃऀͷΈͳ͞Μ͕ಡΜͩίʔυΛ·ͱΊͨͷ͕GitHubʹ·ͱ·ͬͯΔ • Կ͔ͷࢀߟʹͳΕ͹ͱʂ • https://github.com/AndroidFrameworkCodeReading/ CodeReadingHistory