Nexus5用 LineageOS 17.1のビルド方法

記事内に広告が含まれています。

Nexus5用のLineageOS17.1をビルドすることに成功したので、その方法を紹介します。

 

参考にしたサイト

以下のサイトを見ながら試行錯誤して、ちゃんと動作するLineageOS17.1をビルドすることができました。

 

モバイル端末の情報サイトとして有名なxda developersの「Nexus5 LineageOS 17.1」のページです。

※Nexus5のLineageOS17.1のカスタムROMがほしいだけであれば、このページからダウンロードできます。

[ROM][UNOFFICIAL] LineageOS 17.1 for Nexus 5 (hammerhead) [DISCONTINUED]
LineageOS 17.1 is a free, community built, aftermarket firmware distribution of Android 10.0 (Q), which is designed to i...

 

日本語でLineageOSのビルド方法を公開しているページです。とても参考になりました。

LineageOS 16.0 のビルド方法
LineageOS 16.0 の日本語でのビルド手順を以下に示します。お手持ちの機種向けにビルドしてみるのもいかがでしょう。

 

LineageOS公式のビルド方法が記載されたページです。このページの手順が公式のビルド方法です。

Build for hammerhead | LineageOS Wiki

 

ビルドに使用した環境

私は、Contaboという格安VPS上で、LineageOSのビルド行いました。

 

使用したVPSのスペックは以下のとおりです。

プラン:VPS S SSD

    • CPU:4コア
    • メモリ:8GB
    • ストレージ:200GB(SSD)
    • OS:Ubuntu 18.0.4
    • 価格:4.99ユーロ/月

 

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

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

※Ubuntu Serverのバージョンによって必要なパッケージが異なります。

詳細は、「Build for hammerhead Install the build packages(LineageOS Wiki))」を確認して下さい。

 

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.」と表示されるまで待ちます。

 

デバイス固有のコードを取得

各端末向けのLineageOSをビルドするためには、LineageOS本体のソースコード以外に、デバイス固有のコードが必要です。

 

デバイス固有のコードを取得するためのxmlファイル(manifest)を作成します。

mkdir -p .repo/local_manifests

touch .repo/local_manifests/hammerhead.xml

vi .repo/local_manifests/hammerhead.xml

 

viエディタで開いたファイルに、以下を追加して保存します。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <project name="z3DD3r/android_device_lge_hammerhead" path="device/lge/hammerhead" remote="github" revision="lineage-17.1" />
    <project name="z3DD3r/android_kernel_lge_hammerhead" path="kernel/lge/hammerhead" remote="github" revision="lineage-17.1" />
    <project name="z3DD3r/android_vendor_lge" path="vendor/lge" remote="github" revision="lineage-17.1" />
</manifest>

 

<補足>

デバイス固有のコードには、大きく以下の3つが必要です。

    • device
    • kernel
    • vendor

私がビルドする際は、xda developersの「Nexus5 LineageOS 17.1」のページで公開されていたコードを使用するようにmanifestファイルに設定しました。

 

もう一度、repo syncコマンドを実行し、デバイス固有のコードを取得します。

repo sync --force-sync

 

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

 

ビルドを高速化するためにキャッシュをオンにする

LineageOSのビルドには時間がかかります。

少しでも、高速化するためにキャッシュをオンに設定します。

export USE_CCACHE=1

 

実行したコマンドが、起動時に読み込みされるように「~/.bashrc」に追加します。

vi ~/.bashrc

export USE_CCACHE=1

 

キャッシュに使用するディスク領域の最大量を指定します。

ccache -M 50G

 

ccache圧縮を有効にします。

export CCACHE_COMPRESS=1

 

実行したコマンドが、起動時に読み込みされるように「~/.bashrc」に追加します。

vi ~/.bashrc

export CCACHE_COMPRESS=1

 

[Out Of Memory対策]スワップファイルの設定

私の環境ではメモリが十分ではないようで、ビルドを行うとJavaのOut Of Memoryエラーが発生しました。

そこで、Swapファイルを拡張しました。

Swapファイルの拡張

「free -h」コマンドを実行したところ、Swapは2.0GB割り当たっていました。

 

「swapon -s」コマンドを実行したところ、Swapはfile形式であることがわかりました。

 

以下のコマンドで、swapファイルの割当を解除します。

swapoff /swapfile

 

「free -h」コマンドでSwapが0になったことを確認します。

 

Swapファイルを削除します。

rm /swapfile

 

16GBの空のファイルを作成します。

fallocate -l 16G /swapfile

 

fallocateコマンドで作成したファイルを、Swapファイルに変換します。

mkswap /swapfile

 

以下のコマンドで、Swapファイルを有効にします。

swapon /swapfile

 

「free -h」コマンドでSwap領域が割り当てられていることを確認します。

 

Javaが使用するヒープ領域のMAXを制限

swapファイルの割り当てを増やすことでエラーが解消されたように思えたのですが、ビルドを行っているとまだエラーが発生しました。

そこで、ビルド時に以下のコマンドを実行することでJavaのヒープ領域のMAXを制限するようにしました。

export _JAVA_OPTIONS=-Xmx6G

 

実行したコマンドが、起動時に読み込みされるように「~/.bashrc」に追加します。

vi ~/.bashrc

export _JAVA_OPTIONS=-Xmx6G

 

LineageOSのビルド

LineageOSのビルドを行います。

 

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

. build/envsetup.sh

 

続いて、以下のコマンドを実行するとビルドが開始されます。

brunch hammerhead 2>&1 | tee lineage_$(date '+%Y%m%d_%H-%M-%S').log

 

「build completed successfully」と表示されればビルド完了です。

 

ビルドされたファイルは、outフォルダの配下に作成されるので以下のコマンドで確認します。

ls out/target/product/hammerhead/

 

赤枠で囲ったのが、ビルドされたLineageOSのファイルです。

 

VPS上に作成されているので、scpコマンドを使ってパソコンのローカルにダウンロードします。

※LinuxMint19がインストールされたノートパソコンを使っています。

scp root@[VPSのIPアドレス]:/root/android/lineage/out/target/product/hammerhead/lineage-17.1-20200328-UNOFFICIAL-hammerhead.zip /home/toshio/

 

あとは、作成されたROMをNexus5に焼けば使用できます。

 

まとめ

LineageOSのビルド方法を紹介しました。

今回はすべてほかの方が作成したコードを使用してビルドしただけなのですが、それでも難易度はなかなか高かったです。

私がAndroidのコードがどのように動作しているかをよくわかっていないので、ビルド方法が悪かったのか、ソースコードが誤っているのか判断がつかず、苦労しました。

それでも何回もビルドしているうちに、だんだんと原因がわかってきて、現在は特に不具合もなくNexus5でLineageOS 17.1を使えるようになりました。

今後は、ソースコードの中身を読めるようになって、カスタマイズしたり、別の端末向けにROMをビルドしたりできるようになりたいです。

 

(2020/08/28 追記)

以下のページで私がビルドしたNexus5用のカスタムROMをダウンロードできるようにしました。

【カスタムROM】Nexus5 LineageOS17.1 非公式版 ダウンロード
カスタムROMの有名サイトxda developersで公開されているNexus5用のLineageOS17.1を自前でコンパイルしました。 実際に自分のNexus5にインストールして使っていますが、問題なく動作しているようなので、このペー

 

 

コメント