Android SDKのソースコードを読みたい
Androidアプリ開発をしていると、「Android SDKのソースコードを読みたい」、と思うことがしばしばあります。
- 思わぬバグに出くわしてしまったが調べても調べても原因がつかめない
- (例えば)ViewPagerなどのAndroidが提供しているViewコンポーネントの動きを独自に変えたい(スクロールの際のアニメーションスピードを変更したい)
といった場合などです。(もちろん上記以外にもあるかと思います。)
本記事では、Android SDK内部のソースコードを読む際に役立つ(かもしれない)ツール群について、shibuya.apk#21にて5分LT枠で発表した内容を元に紹介しています。
shibuya.apkでのスライドは本記事下部に埋め込み追加しております。尚、本記事で紹介するツールやウェブサイトは下記です:
- SDK Manager(Android Studio)
- Git at Google - android Git repositories
- GitHub - ASOP Mirror repositories
- OpenGrok(Developer Collaboration Project)
- AndroidSDKSearchExtension
- SdkSearch
ここから、1つずつ雑に紹介していきます。
Android Code Search
※2020/06/16更新 もはやこれ一つが全て感があります。
- Android
- Androidx
- Android Studio
それぞれのソースコードを、ファイル名やクラス名等軸で検索できます。 リリース前の最新のソースコードもこちらに反映されているので、こちらを使えば大半の最新コードは確認できるかと思われます。
SDK Manager(Android Studio)
SDK Managerとは、Android開発において重要なSDK関連のツールやコンポーネントなどをインストールしたりアップデートするためのものです。Android Studioでは、下記画像のボタンを押下することで起動できます。
SDK Managerを利用することで、SDK Platformのパッケージをインストールすることができます。パッケージインストール後は、Android Studio上でAndroid Platformのクラス名やメソッド名からコードジャンプすることができるようになります。コードジャンプすることで、内部実装はもちろん、各クラスやメソッドの詳細についてのドキュメントレベルのコメントなどをAndroid Studio上で確認できるようになります。Androidアプリ開発を仕事にしているエンジニアは、日々このツールを活用しているのではないでしょうか。
SDK Managerについての公式ドキュメントはこちらのようです: IDE および SDK Tools の更新 | Android デベロッパー | Android Developers
Git at Google - android Git repositories
android Git repositories - Git at Google
Googleが管理している、androidソースコードのgitレポジトリ一覧です。Google Gitと記されているとおり、GoogleがGitを用いて独自管理しています。(GitHub上で管理されているAndroidのソースコードについては次に紹介しています。)
たとえばplatform/frameworks/base - Git at GoogleではAndroidフレームワークのクラス群などのソースコードを閲覧できます。
GitHub - ASOP Mirror repositories
Git at Google - android Git repositoriesのGitHub上のミラープロジェクトです。
使い慣れているGitHub上でソースコードを読みたい!という方はこちらを利用すると良いかもしれません。先程のplatform/frameworks/baseのレポジトリはこちらです:
また、下記のような活用方法も便利そうですね!
自分はAOSPのコード見るときはクラスがわかってるときはAndroid Developerからソースコードに飛ぶけど、クラスがはっきりしないときはGitHubで "hogehoge user:aosp-mirror"でコード検索してみていくのが一番多いかなー #shibuya_apk
— takahirom (@new_runnable) 2018年1月11日
OpenGrok(Developer Collaboration Project)
Oracle社が提供しているソースコード検索、クロスリファレンスをするためのツールです。一般的な使い方としては、Tomcatのようなサーブレットコンテナを用いてローカル上で動かすようです。しかし、Developer Collaboration Projectとよばれる有志のプロジェクトによって、このOpenGrokを使ったソースコード検索サービスがインターネット上に公開されて、そちらを利用することもできます。Oreoのソースコードも検索可能になっています。
AndroidSDKSearchExtension
Androidのソースコード検索や閲覧を容易にするためのChromeの拡張機能です。
インストール後、Chromeのアドレスバーに ad
と打ち込み tab
を押下すると、アドレスバーの左にAndroid SDK Search
という文字が表示されます。そこから、たとえばVeiwPager
と打ち込みEnterを押下することで、developer.android.com上のViewPager
のドキュメントページに遷移することができます。
さらに、拡張機能によってdeveloper.android.comのタイトル下部にview source
というボタンが設置されます。このボタンを押下することで、対象クラスのソースコードのページに遷移することができます。
遷移先ソースコードのページは標準で二種類用意されていて(android.googlesource.com / github.com)、拡張機能の「オプション」画面にて変更することができます。
SdkSearch
最後は、Jake氏によるSdkSearchというAndroidアプリです。プロジェクトをcloneしDebugビルドをすることで通常のアプリとして利用することができます。 アプリは、検索バーと結果を一覧表示するのみのシンプルなもので、検索結果に引っかかるAndroid SDKの内容をタイル形式で一覧表示してくれます。 検索結果の要素をタップすることでdeveloper.android.comのドキュメントページに遷移し、「More Options」アイコンを押下することで、シェアやソースコードのページに遷移することができます。このアプリを利用することで、たとえば電車の中で「( ゚д゚)ハッ!今すぐViewPagerのソースコードが読みたい!」と思ったとしても、文字通りすぐにソースコードを読むことができるでしょう..!
また、このアプリはkotlin-coroutineやkotshi, room, sqlbright, sqldelightなどモダンなライブラリを活用して作られていて、実装コード自体をしっかり読むことで勉強になることもありそうだと感じています。Jake氏さすが〜。
最後に
shibuya.apkでの発表資料は下記です。
今回紹介したツールやウェブサイト以外にもAndroid SDKのソースコードを読む上で便利なもの、よくやることなどありましたらご連絡いただけると幸いです!
以上です!