tsuyoshin’s Tech Blog

https://qrunch.net/@tsuyoshin から移転してきました。

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が推奨パッケージ。

SetupWizardPixelLauncherは正しく起動しないため、その対策を行う。

#
# 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):

f:id:tsuyo-shin:20210326175530p:plain
git-lfsで取得するファイルがdeletedでステージされてしまう

Chrome のキャッシュフォルダを変更するベターな方法 [ Windows ]

Chrome のキャッシュフォルダは通常、起動ドライブ(C:)に作成される。
起動ドライブが SSD の場合、ドライブの寿命に影響するため可能であれば他のドライブへ変更したい。
とはいえ、最近の SSD なら寿命など気にする必要は無いのだが。。。

PC のメモリがふんだんにある場合、RamDisk を作成し、そこにキャッシュフォルダを移動すると SSD の寿命を多少なりとも伸ばすことができる。
私の場合、RamDisk の作成には、ImDisk Virtual Disk Driverを使用している。

キャッシュフォルダを移動するには下記2つの方法がある。

1. ショートカットのプロパティを変更する

Chrome のショートカットを作成し、それをクリックして Chrome を起動した場合のみ、キャッシュフォルダが変更される。
欠点:プロパティを変更したショートカット以外から Chrome を起動した場合、キャッシュフォルダは起動ドライブ(C:)になってしまう。

変更方法
  1. Chrome のショートカットを作成し、ショートカットアイコンを右クリックして、プロパティを選択
  2. Google Chrome のプロパティ」ダイアログが表示されたら、「リンク先(T):」のテキストボックスをクリック
  3. テキストボックスに赤字の部分を追記する
    下記の場合、R:ドライブの Cacheフォルダ配下にキャッシュフォルダが作成される
    ドライブとフォルダ名は適宜指定する必要がある

    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disk-cache-dir="R:\Cache"

  4. 「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:)に戻ってしまう場合がある。

変更方法
  1. 上記デフォルトのキャッシュフォルダ2つを削除もしくはリネーム
    フォルダが残っているとシンボリックリンクを作成できない
  2. コマンドプロンプトを「管理者として実行」する
  3. コマンドプロンプトに下記入力する(Cacheフォルダへのシンボリックリンクを作成)
    ユーザ名は、環境にてよって異なる
    書込先フォルダは、任意の存在するフォルダを指定する

    mklink /D "c:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Default\Cache" 書込先フォルダ

  4. コマンドプロンプトに下記入力する(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 をスタートアップに登録する方法は下記の通り。

  1. エクスプローラーを起動し、下記フォルダを順に開く
    ユーザ名は、環境にてよって異なる
    AppDataフォルダは隠しフォルダのため、表示されない場合はエクスプローラーの「表示」タブをクリックし、「隠しファイル」にチェックを付ける

    C: >Users > ユーザ名 > AppData > Roaming > MicrosoftWindows > スタート メニュー > プログラム > スタートアップ

  2. スタートアップフォルダにプロパティを変更したショートカットをコピーする

Android11 CTS(Compatibility Test Suite)の覚書

Android11のCTSを行うための覚書

セットアップ

  • AOSP のビルドを行っている場合、Android Debug Bridge (adb) と Android Asset Packaging Tool (AAPT) にパスを通す
$ 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]

テスト実行

  • 特定のモジュールを実行する
# 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] は、どちらも合格として扱われます。

source.android.com