AOSP 環境にて Google Apps をビルドする [ Android 11 ]
AOSP 環境にて Google Apps をビルドしてみる。
Google Apps として、Open GAppsを使用する。
Open GAppsのリンク先にあるビルド済みパッケージは、Android8.0以降うまく動作しなくなった。
したがって、ローカルにある AOSP 環境に Google Apps 環境をダウンロードし、ビルドする必要がある。
ローカルビルド用の Google Apps 環境として、こちらを使用する。
なお下記は、Pixel3 向けの手順となる。
1. manifest.xml ファイルを修正する
.repo/manifest.xml
ファイルに、下記のように<!-- Open GApps [S] -->
から<!-- Open GApps [E] -->
を追記する。
<?xml version="1.0" encoding="UTF-8"?> <!-- DO NOT EDIT THIS FILE! It is generated by repo and changes will be discarded. If you want to use a different manifest, use `repo init -m <file>` instead. If you want to customize your checkout by overriding manifest settings, use the local_manifests/ directory instead. For more information on repo manifests, check out: https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md --> <manifest> <include name="default.xml" /> <!-- Open GApps [S] --> <remote name="opengapps" fetch="https://github.com/opengapps/" /> <remote name="opengapps-gitlab" fetch="https://gitlab.opengapps.org/opengapps/" /> <project path="vendor/opengapps/build" name="aosp_build" revision="master" remote="opengapps" /> <project path="vendor/opengapps/sources/all" name="all" clone-depth="1" revision="master" remote="opengapps-gitlab" /> <!-- arm64 depends on arm --> <project path="vendor/opengapps/sources/arm" name="arm" clone-depth="1" revision="master" remote="opengapps-gitlab" /> <project path="vendor/opengapps/sources/arm64" name="arm64" clone-depth="1" revision="master" remote="opengapps-gitlab" /> <!-- Pixel では使用しない <project path="vendor/opengapps/sources/x86" name="x86" clone-depth="1" revision="master" remote="opengapps-gitlab" /> <project path="vendor/opengapps/sources/x86_64" name="x86_64" clone-depth="1" revision="master" remote="opengapps-gitlab" /> --> <!-- Open GApps [E] --> </manifest>
2. リポジトリを同期する
上記の 1. で追加したリポジトリをローカル環境にコピーする。
下記全て同期するとおよそ36GB消費する。
aosp_build
を同期
# vendor/opengapps/build $ repo sync aosp_build Fetching: 100% (1/1), done in 2.617s repo sync has finished successfully.
all
を同期
以降同期するリポジトリにはラージファイルが存在するため、あらかじめgit-lfs
をインストールする必要がある。
# git-lfsのインストール $ sudo apt install git-lfs # vendor/opengapps/sources/all $ repo sync all Fetching: 100% (1/1), done in 25.207s repo sync has finished successfully. # フォルダに移動 $ cd ~/<AOSP のルートパス>/vendor/opengapps/sources/all/ # ラージファイルを pull する # git-lfsはフェッチしたプロジェクトにて初期化済み $ git lfs pull
arm
を同期
# vendor/opengapps/sources/arm $ repo sync arm Fetching: 100% (1/1), done in 2.074s repo sync has finished successfully. # フォルダに移動 $ cd ~/<AOSP のルートパス>/vendor/opengapps/sources/arm/ # ラージファイルを pull する # git-lfsはフェッチしたプロジェクトにて初期化済み $ git lfs pull
arm64
を同期
# vendor/opengapps/sources/arm64 $ repo sync arm64 Fetching: 100% (1/1), done in 4.731s repo sync has finished successfully. # フォルダに移動 $ cd ~/<AOSP のルートパス>/vendor/opengapps/sources/arm64/ # ラージファイルを pull する # git-lfsはフェッチしたプロジェクトにて初期化済み $ git lfs pull
3. device.mk ファイルを修正する
device/google/crosshatch/device.mk
ファイルに、下記のように# ADD_GAPPS[S]
から# ADD_GAPPS[E]
を追記する。
使用するデバイスにより修正すべきdevice.mk
ファイルが存在するフォルダは異なる。
上記のdevice/google/crosshatch
フォルダは、Pixel3、Pixel3XL用となる。
GAPPS_VARIANT
に指定する値はこちらを参照する。
GAPPS_VARIANT := stock
が推奨パッケージ。
SetupWizard
とPixelLauncher
は正しく起動しないため、その対策を行う。
# # Copyright (C) 2016 The Android Open-Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # ADD_GAPPS[S] # mini 以上のパッケージでないと Google Maps が起動しなかった # stock が推奨パッケージ GAPPS_VARIANT := mini #micro #nano #pico # 端末初回起動時のセットアップウィザードが正しく起動しないため削除 GAPPS_EXCLUDED_PACKAGES += \ SetupWizard \ # AOSP 標準ランチャー(Launcher3QuickStep)がオーバーライドされるのを防ぐ # PixelLauncher は正しく起動しない GAPPS_BYPASS_PACKAGE_OVERRIDES += \ PixelLauncher \ # ADD_GAPPS[E] PRODUCT_SOONG_NAMESPACES += \ device/google/crosshatch \ hardware/google/av \ hardware/google/camera \ hardware/google/interfaces \ hardware/google/pixel \ hardware/qcom/sdm845 \ vendor/google/camera \ vendor/qcom/sdm845 \ vendor/google/interfaces ##### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##### device.mk ファイル 終端 include hardware/google/pixel/pixelstats/device.mk include hardware/google/pixel/mm/device_legacy.mk include hardware/google/pixel/thermal/device.mk # power HAL -include hardware/google/pixel/power-libperfmgr/aidl/device.mk # ADD_GAPPS[S] $(call inherit-product, vendor/opengapps/build/opengapps-packages.mk) # ADD_GAPPS[E]
4. ビルドを行う
いつも通りmake
にてビルドを行う。
$ make -j8
5. 注意点
git-lfs
をインストールする前にall
リポジトリをrepo sync
すると、ラージファイルの情報を取得できないため、リポジトリがおかしくなる(git-lfs
で取得するファイルがdeleted
でステージされてしまう)。
上記を防ぐために、まず最初にgit-lfs
のインストールを行う必要がある。
# git-lfsのインストールを行わないで repo sync を行うと下記エラーが出る # vendor/opengapps/sources/all $ repo sync all Fetching: 100% (1/1), done in 6.978s git-lfs filter-process --skip: 1: git-lfs filter-process --skip: git-lfs: not found fatal: The remote end hung up unexpectedly error: Cannot checkout all: GitError: Cannot initialize work tree for all Traceback (most recent call last):
Chrome のキャッシュフォルダを変更するベターな方法 [ Windows ]
Chrome のキャッシュフォルダは通常、起動ドライブ(C:)に作成される。
起動ドライブが SSD の場合、ドライブの寿命に影響するため可能であれば他のドライブへ変更したい。
とはいえ、最近の SSD なら寿命など気にする必要は無いのだが。。。
PC のメモリがふんだんにある場合、RamDisk を作成し、そこにキャッシュフォルダを移動すると SSD の寿命を多少なりとも伸ばすことができる。
私の場合、RamDisk の作成には、ImDisk Virtual Disk Driverを使用している。
キャッシュフォルダを移動するには下記2つの方法がある。
1. ショートカットのプロパティを変更する
Chrome のショートカットを作成し、それをクリックして Chrome を起動した場合のみ、キャッシュフォルダが変更される。
欠点:プロパティを変更したショートカット以外から Chrome を起動した場合、キャッシュフォルダは起動ドライブ(C:)になってしまう。
変更方法
- Chrome のショートカットを作成し、ショートカットアイコンを右クリックして、プロパティを選択
- 「Google Chrome のプロパティ」ダイアログが表示されたら、「リンク先(T):」のテキストボックスをクリック
- テキストボックスに赤字の部分を追記する
下記の場合、R:
ドライブのCache
フォルダ配下にキャッシュフォルダが作成される
ドライブとフォルダ名は適宜指定する必要がある"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disk-cache-dir="R:\Cache"
- 「OK」ボタンをクリックする
2. シンボリックリンクを作成する
デフォルトの場合、キャッシュフォルダは起動ドライブ(C:)の下記フォルダとして作成される。
C:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Default\Cache
C:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Default\Code Cache
※ユーザ名は、環境にてよって異なる。
通常上記フォルダ内にキャッシュデータが書き込まれるが、上記フォルダを別ドライブのフォルダへシンボリックリンクすることにより、別ドライブのフォルダ内へキャッシュデータが書き込まれるようになる。
欠点:Chrome をアップデートした時、キャッシュフォルダのシンボリックリンクが解除されキャッシュフォルダが起動ドライブ(C:)に戻ってしまう場合がある。
変更方法
- 上記デフォルトのキャッシュフォルダ2つを削除もしくはリネーム
フォルダが残っているとシンボリックリンクを作成できない - コマンドプロンプトを「管理者として実行」する
- コマンドプロンプトに下記入力する(
Cache
フォルダへのシンボリックリンクを作成)
・ユーザ名は、環境にてよって異なる
・書込先フォルダは、任意の存在するフォルダを指定するmklink /D "c:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Default\Cache" 書込先フォルダ
- コマンドプロンプトに下記入力する(
Code Cache
フォルダへのシンボリックリンクを作成)
・ユーザ名は、環境にてよって異なる
・書込先フォルダは、任意の存在するフォルダを指定するmklink /D "c:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Default\Code Cache" 書込先フォルダ
3. どちらの方法が良いのか?
当初は「2. シンボリックリンクを作成する」方法にて使用していた。
しかし、気づかないうちにキャッシュフォルダのシンボリックリンクが解除され、デフォルトフォルダに戻ってしまうことが頻発した。
#おそらくChromeが自動アップデートされた時にフォルダが初期化されてしまっていると思われる。
そのため、現在では「1. ショートカットのプロパティを変更する」方法にて使用している。
「1. ショートカットのプロパティを変更する」方法の場合、プロパティを変更したショートカットからChromeを起動する必要がある。
プロパティを変更したショートカットからChromeを起動する前に、他のアプリにてURLをクリックしChromeを起動した場合、デフォルトのキャッシュフォルダが使用されてしまう。
確実に、プロパティを変更したショートカットからChromeを起動するためには、Chromeをスタートアップに登録する方法が有効だと思われる。
4. Chrome をスタートアップに登録する
Chrome をスタートアップに登録する方法は下記の通り。
Android11 CTS(Compatibility Test Suite)の覚書
Android11のCTSを行うための覚書
セットアップ
$ export PATH=$PATH:<AOSP のルートパス>/out/soong/host/linux-x86/bin
※AOSP のビルドを行っていない場合、Android SDK Tools をインストールする
- OpenJDK11 をインストールする
$ sudo apt install openjdk-11-jre-headless
- バージョンを確認する
$ java -version openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.18.04) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.18.04, mixed mode, sharing)
テストモジュール
- 一覧取得
$ cd <CTSのパス>/android-cts/tools/ $ ./cts-tradefed > list modules
list modules の出力結果
テストモジュールに [instant], [secondary_user] が追加された[instant] を実行したい場合、下記どちらを指定しても同じ
# CtsGraphicsTestCases[instant] を実行したい場合 > run cts --module-parameter INSTANT_APP -m CtsGraphicsTestCases > run cts --include-filter CtsGraphicsTestCases[instant]
- Android10 のテストモジュールと比較する
list modules の出力結果 から [instant], [secondary_user] を削除
Android11 と Android10 の差分比較
テスト実行
- 特定のモジュールを実行する
# CtsGraphicsTestCases を実行したい場合 > run cts -m CtsGraphicsTestCases
- 試験結果を確認→再試験
# 試験結果を確認する > list results Session Pass Fail Modules Complete Result Directory Test Plan Device serial(s) Build ID Product 0 10706 622 10 of 12 2021.02.17_16.31.29 cts [XXXXXXXXX] RP1A.200720.009 aosp_blueline # Session 0 を再試験する > run retry --retry 0 # 再試験結果を確認する > list results Session Pass Fail Modules Complete Result Directory Test Plan Device serial(s) Build ID Product 0 10706 622 10 of 12 2021.02.17_16.31.29 cts [XXXXXXXXX] RP1A.200720.009 aosp_blueline 1 12394 0 12 of 12 2021.02.18_10.39.22 cts [XXXXXXXXX] RP1A.200720.009 aosp_blueline # 再試験で Fail が 0 になった
- 試験を複数台の端末にて分散実行する
# 試験を複数台の端末にて分散実行 # --shard-count <端末の台数> > run cts --shard-count 2
テストサマリー (test_result.html)
Assumption Failure
テストの前提条件の一部が満たされず、テストが中止されたことを示します。Ignored
テストがまったく実行されず、完全にスキップされたを示します。[Ignored] と [Assumption Failure] は、どちらも合格として扱われます。