LineageOSのソースコードをAndroid Studioで参照する方法

スポンサーリンク

普段使っているAndroidのカスタムROM「LineageOS」のソースコードをみてみたいと思い、Android Studioを使ってソースコードを参照できるようにしました。

 

参考ページ

以下のページの手順を参考にしました。

 

また、Android Studio用のプロジェクトファイルを作成する「idegen.sh」と同じフォルダにあった「readme」ファイルも参考になりました。

 

環境

私は、Contaboという海外の格安VPS上にソースコードを参照する環境を作成しました。

VPSのスペックは、以下の通りです。

  • OS:Ubuntu 18.04(64ビット)
  • CPU:4コア(2.2GHz x 4)
  • メモリ:8GB
  • ストレージ:200GB(SSD)
    ※200GBだと、けっこうギリギリでした。
    気を抜くと残りが10GBくらいしかないこともあり、できれば、あと50GBか100GBほしいです。
  • ネットワーク:200Mbps

 

ビルドパッケージのインストール

LineageOSをビルドするために必要なパッケージをインストールします。

sudo apt update && sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev python

 

LineageOSのソースコード取得

LineageOSのソースコードをダウンロードします。

 

ディレクトリを作成します。

mkdir -p ~/bin
mkdir -p ~/android/lineage

 

ソースコードを取得するためのrepoコマンドをインストールします。

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

 

repoコマンドのディレクトリに権限を付与します。

chmod a+x ~/bin/repo

 

「$HOME/bin」をPATHに追加します。

「~/.profile」をviエディタで開きます。

vi ~/.profile

 

以下を、ファイルの最後に追加します。 ※もし、すでに同じ記述がある場合は追加は不要です。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

 

以下を実行し、環境を更新します。

source ~/.profile

 

LineageOSソースリポジトリを初期化します。

cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-17.1

 

以下のように入力します。

Your Name:android

Your Email:android

is this corrent [y/N]?:y

Enable color display in this user account (y/N)?:y

 

LineageOSのソースコードを取得します。

repo sync --force-sync

 

「repo sync has finished successfully.」と表示されるまで待ちます。

 

 

Android Studioのインストール

UbuntuへAndroid Studioをインストールする方法は、以下を参照してください。

 

 

Android Studioの設定変更

LineageOSのソースコードをAndroid Studioで開く場合、Android Studioの設定を変更する必要があります。

メモリ割り当ての変更

Android Studioで使用するメモリの割当を増やします。

 

Android Studio を起動します。

[Help]→[カスタムVMオプションの編集]をクリックします。

 

以下の行を追加します。

-Xms1g
-Xmx5g

 

ファイル解析の制限を増やす

LineageOSの膨大なファイルを解析するために、ファイル解析の制限を増やします。

 

Android Studio を起動します。

[Help]→[カスタムプロパティの編集]をクリックします。

 

以下の行を追加します。

idea.max.intellisense.filesize=100000

 

 

プロジェクトファイルの作成

LineageOSのソースファイルから、Android Studio用のプロジェクトファイルを作成します。

 

idegen.shの実行

Android Studio用のプロジェクトファイルは、[idegen.sh]を使って作成します。

 

以下のコマンドを実行します。

cd ~/android/lineage
source build/envsetup.sh

 

以下のコマンドを実行します。

make idegen && development/tools/idegen/idegen.sh

 

正常に終了すると、「repo sync has finished successfully.」と表示されます。

 

idegen.sh実行時のエラー

私の環境ではidegen.sh実行時に、以下のエラーが発生しidegen.shが正常に終了しませんでした。

正しい対処方法かはわからないのですが、エラー箇所をコメントアウトすることで、idegen.shが正常終了することを確認しました。

[エラー1]unknown variable ‘$(PATH_OVERRIDE_SOONG)’

エラー内容
[100% 139/139] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
error: vendor/lineage/build/soong/Android.bp:30:8: module "generated_kernel_includes": cmd: unknown variable '$(PATH_OVERRIDE_SOONG)'
01:55:30 soong bootstrap failed with: exit status 1

#### failed to build some targets (01:31 (mm:ss)) ####

”generated_kernel_includes”というモジュールの中の’$(PATH_OVERRIDE_SOONG)’ という変数の宣言がないようです。

 

対処方法

下記のリンクの内容をみたところ、”generated_kernel_includes”および、その利用箇所をコメントアウトするように記載されていたため、該当箇所をコメントアウトしました。

 

修正箇所

以下の赤枠をつけた部分をコメントアウトしました。

 

android/lineage/vendor/lineage/build/soong/Android.bp

 

android/lineage/hardware/lineage/interfaces/cryptfshw/1.0/qsee/Android.bp

 

android/lineage/hardware/lineage/interfaces/cryptfshw/1.0/Android.bp

 

android/lineage/external/tinycompress/Android.bp

 

[エラー2]previously defined at build/make/core/base_rules.mk

エラー内容
[100% 544/544] writing build rules ...
FAILED: 
build/make/core/Makefile:28: error: overriding commands for target `out/target/product/generic/system/product/etc/apns-conf.xml', previously defined at build/make/core/base_rules.mk:480
02:43:12 ckati failed with: exit status 1

`out/target/product/generic/system/product/etc/apns-conf.xml’を重複して定義しているため、エラーになっているようです。

 

対処方法

下記のリンクの内容をみたところ、複数箇所で同じファイルパスを指定するとエラーになるようなのでetc/apns-conf.xml’を重複して定義している箇所をコメントアウトしました。

 

修正箇所

以下の赤枠をつけた部分をコメントアウトしました。

 

android/lineage/build/make/target/product/full_base_telephony.mk

 

android/lineage/build/make/target/product/gsi_common.mk

 

 

Android Studioでプロジェクトを開く

Android Studioを起動し、[ファイル]→[開く]をクリックします。

 

idegen.shで作成された「/android/lineage/android.ipr」を選択し、[OK]ボタンをクリックします。

 

フォーマット変換の確認メッセージが表示されるので、[変換]ボタンをクリックします。

 

[ファイル]→[プロジェクト構造]をクリックします。

※プロジェクトを開いた直後だと、同期処理が動いていて、[プロジェクト構造]が無効になっていることがあります。その場合は、同期処理が終わるまでしばらく待ちます。

 

左のツリーから、[プラットフォーム設定]→[SDK]を選択。

[クラスパス]タブをクリックします。

「How to import the sources to Android Studio / IntelliJ」によるとJDK標準のjarファイルは参照しないため、画面右端の[ー]ボタンを使ってjarファイルを削除します。

 

下記の画面のように、jarファイルがすべてなくなればOKです。

 

[補足]

「How to import the sources to Android Studio / IntelliJ」によると、「[out/target/common/R]をソースとしてマークする」という手順があったのですが、私の環境だとそのフォルダーがありませんでした。

よって、この手順は実施してません。

 

これで、すべて完了です。

LineageOSのソースコードがAndroid Studioで参照できるようになりました。

 

まとめ

LineageOSのソースコードをAndroid Studioで参照する方法を紹介しました。

プロジェクトファイルを作成するidegen.shがくせ者で、いまいちエラーになる原因がわかりませんでした。

正しいのかどうかはわからないのですが、エラー箇所をコメントアウトすることでエラーの回避はできたので、Android Studioでソースコードを開くことができました。

まだ、Androidがどういった仕組みで動いているのか私はわかってないので、ソースコードをみながら少しづつ理解していきたいです。

 

コメント

スポンサーリンク