Unyablog.

のにれんのブログ

Android Studio をビルドする

この記事は KMC アドベントカレンダー 4日目の記事です。自分は5日目だと思っていてのんびりしてました… :bow: :bow:

www.adventar.org

昨日は id:nojima718 さんの

nojima.hatenablog.com

でした!

本題

今回は Android Studio をビルドしてみます。

大体ここに従ってます。

tools.android.com

何故

Android Studio 2.2 になってから mac で外部ディスプレイに繋げたときに色が全体的に色が濃くなりました。僕の使ってる Molokai テーマには致命的で、元からコントラストが高いのにさらに濃くなると目が痛くて仕方ありません。

だからといってテーマ変えても濃くてつらく、最近は外部ディスプレイに繋がずに使っていました。

ここで Android Studio の更新ログを見ると

Improved color management on OS X

とのこと。

もしこれのせいなら、 該当する Commit を Revert して自分でビルドすればいいのでは? と思い立ち、とりあえず自分でビルドしてみることにしました。

ちなみに原因はそれではありませんでした(後述)。

ビルド

ソースコード

repo

Android では複数の git repository を一度に扱う repo というコマンドで管理することを推奨しています。*1

Repo command reference | Android Open Source Project

上に従って repo (実体は Python スクリプト) をダウンロードして実行できるようにします。

repo sync

次は適当な場所にソースコードをダウンロードします。とりあえずビルドしてみるだけなので --depth=1 としてファイル容量を抑えています。*2

$ mkdir studio
$ cd studio
$ repo init -u https://android.googlesource.com/platform/manifest -b studio-2.2.2 --depth=1
$ repo sync

大量のレポジトリが 3GB ほど降ってきます。後のビルドでも 5GB 程度は容量食うのでそれなりに確保しておきましょう。

ビルド

とりあえずビルドしてみます。ドキュメントにある通り、 ant をインストールした後

$ cd tools/idea
$ ant

とすれば後はビルド終了を待つのみ。

自分の Macbook では 20 分ほどかかりました。ポケモンピクロスでもして待っていましょう。

成果物

tools/idea/out/artifacts 以下にビルドした AndroidStudio 達が存在しています。Mac でビルドしましたが Windows / X Window 用も作られていました。

$ ls out/artifacts
android-studio-SNAPSHOT-no-jdk.mac.zip
android-studio-SNAPSHOT-no-jdk.tar.gz
android-studio-SNAPSHOT-no-jdk.win.zip
core
intellij-core-AI-145.SNAPSHOT.zip
jps
sources.zip

ここから android-studio-SNAPSHOT-no-jdk.mac.zip を解凍すれば Android Studio.app が生成されます。こうして自分専用の Android Studio が使えるようになりました。

JDK

ところでファイル名を見ると no-jdk となっており、Idea JDK が含まれていないようです。なくても困ることはないですが、推奨されているのだから使いたい。

どうやら prebuilts/studio/jdk に然るべき JDK を置けば一緒に含めてくれるみたいです。

ということで、repo のレポジトリ管理ファイルである manifest.xml に新しいレポジトリを追加します。

ローカルの manifest.repo/local_manifests に置けば良いので、.repo/local_manifests/manifest.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote  name="aosp"
           fetch=".."
           review="https://android-review.googlesource.com/" />

  <project path="prebuilts/studio/jdk" name="platform/prebuilts/studio/jdk" clone-depth="1" revision="studio-master-dev"/>

</manifest>

と記述して repo sync します。

すると prebuilts/studio/jdkplatform/prebuilts/studio/jdk (https://android.googlesource.com/platform/prebuilts/studio/jdk/) の studio-master-dev ブランチが clone されるので、再ビルドすると

$ ls out/artifacts
android-studio-SNAPSHOT-no-jdk.mac.zip
android-studio-SNAPSHOT-no-jdk.tar.gz
android-studio-SNAPSHOT-no-jdk.win.zip
android-studio-SNAPSHOT.mac.zip
android-studio-SNAPSHOT.tar.gz
android-studio-SNAPSHOT.win.zip
android-studio-SNAPSHOT.win32.zip
core
intellij-core-AI-145.SNAPSHOT.zip
jps
sources.zip

が生成されました。

しかし、実行してみると起動してくれない…。ブランチが違ったりしてるし諦めて JDK 無しでやりました。

その後

実行できたので早速 git のログを漁り初めたのですが、それっぽいログがない。実際にソースを見てみてもそれっぽい部分がないので困っていると、ちょうどそれらしきプラグインを発見。*3

github.com

どうやら問題は IntelliJJDK を Idea JDK (8) に切り替えたことが原因のようです。

https://youtrack.jetbrains.com/issue/IDEA-149601

...ということでプラグインを入れることで問題が解決してしまった🙏。*4

ビルドが終わった頃には studio ディレクトリは 12GB も食っていました。残り容量はなんと 500MB になり、警告も出ています。

よって、速やかに studio を削除してこの話は終わりとします。ありがとうございました。

$ df -h 
Filesystem      Size  Used Avail Use% Mounted on
/dev/disk1      186G  185G  529M 100% /
/dev/disk0s4     47G   27G   21G  57% /Volumes/BOOTCAMP
$ rm -rf studio
rm -rf studio  0.81s user 20.83s system 60% cpu 35.700 total
$  df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/disk1      186G  173G   13G  94% /
/dev/disk0s4     47G   27G   21G  57% /Volumes/BOOTCAMP

余談

  • Cross Compile...?

Windows 用はどうやって作っているのだろうと見たところ、ある程度の exe は初めから置いておいて、最後は気合の実装で作るという感じでした。すごい。他のプラットフォームも割りとそういう感じ。

intellij-community/tools/launcher-generator/src/com/pme/exe at master · JetBrains/intellij-community · GitHub

ということは何か将来個人的な変更を加えたい場合は、 CI に投げて自動的に MacWindows 用の AndroidStudio を作るといったことができそう。

  • 容量問題

ソースコードを見たいだけなら https://android.googlesource.com/platform/ から見たいものを clone するだけで良いです。ビルドにはいろいろ必要ですが、見るべきなのは一つのリポジトリ程度なので。

また、intellij 本家を GitHub で見るのもオススメです。

github.com

明日

明日(今日)は id:tyage さんです!!!楽しみですね!!!

*1:使わなければ一つ一つレポジトリを clone していくことになりめんどくさい

*2:depth を付けないと 8GB ほど埋まるので注意

*3:偶然にもこの方の IntelliJ 用 Molokai テーマを弄ったものを使っていた

*4:まだ試してませんが