VkCubeはVulkan-Toolsのgithubでソースコードが公開されており誰でもビルド(コンパイル)して手元で動かせる。Androidでもapkを作成する手順が現在サポートされているため簡単に実行できる。
Androidアプリ(apk)ビルド
ビルドに使うのはWindowsではなくLinuxデスクトップを想定します。確認できているのはUbuntu24.04です。最初に必要なプログラムをインストールします。openjdk-17-jdk
はAndroid SDKを使うために必要。build-essential
は必要ない。Dockerに慣れている読者は最後にDockerfile経由で一気に実行する方法にジャンプすることをお勧めします。
sudo apt install -y \
git \
cmake \
ninja-build \
wget \
unzip \
pkgconf \
openjdk-17-jdk
Android SDKをインストール・設定する。公式サイトから「コマンドラインツールのみ」を選択し、利用規約に同意したらリンクを取得してwget
で指定する。
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip
unzip commandlinetools-linux-13114758_latest.zip && cd cmdline-tools
mkdir -p $HOME/android-sdk/cmdline-tools/latest && \
cp -r * $HOME/android-sdk/cmdline-tools/latest/
この例では$HOME/android-sdk
にAndroid SDKの実態をインストールしているがどこでもよい。口述するDockerfile
にすべて各手順では/usr/local/android-sdk
にインストールしている。
export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK_ROOT=$HOME/android-sdk
export ANDROID_NDK_HOME=$HOME/android-sdk/ndk/28.1.13356709
export PATH=$PATH:$HOME/android-sdk/cmdline-tools/latest/bin
で必要な環境変数を指定してSDKライセンスに同意する。すべてy
で同意しておく必要がある。
sdkmanager --licenses
sdkmanager経由で必要なAndroid NDKとビルドツールをインストールする。
sdkmanager "ndk;28.1.13356709"
sdkmanager "platforms;android-26"
sdkmanager "build-tools;36.0.0"
セミコロン以降が別のコマンドの扱いとならないために、このコマンドではダブルクォーテーションは必須です。これでAndroid SDKの準備は完了です。
cd $HOME
git clone --depth 1 -b vulkan-sdk-1.4.313.0 https://github.com/KhronosGroup/Vulkan-Tools.git
cd $HOME/Vulkan-Tools
PATH=/usr/local/android-sdk/build-tools/36.0.0/:$PATH ./scripts/android.py --apk
ビルドが成功すると下記の場所にVkCube.apk
ファイルが作成されています。普通のAndroidアプリとしてエミュレータまたはAndroidスマホに入れて動作させることができます。apkのサイズは3MBほどです。
ls -lh $HOME/Vulkan-Tools/build-android/bin/VkCube.apk
-rw-r--r-- 1 user user 2.9M May 24 14:39 /tmp/Vulkan-Tools/build-android/bin/VkCube.apk
Androidアプリ (apk) Dockerイメージ
Dockerに慣れている開発者は下記ファイルをコピーし、Dockerイメージからapkファイルを取出すのが簡単です。実際、上記の手順はこの方法でUbuntu24.04をベースとしたときに必要なパッケージの漏れがないことを検証しています。
FROM ubuntu:24.04
RUN apt update && apt install -y tzdata
RUN apt update && apt install -y \
git \
cmake \
ninja-build \
wget \
unzip \
pkgconf
RUN apt install -y openjdk-17-jdk
RUN cd /tmp && \
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip && \
unzip commandlinetools-linux-13114758_latest.zip && cd cmdline-tools && \
mkdir -p /usr/local/android-sdk/cmdline-tools/latest && \
cp -r * /usr/local/android-sdk/cmdline-tools/latest/
ENV ANDROID_HOME=/usr/local/android-sdk
ENV ANDROID_SDK_ROOT=/usr/local/android-sdk
ENV ANDROID_NDK_HOME=/usr/local/android-sdk/ndk/28.1.13356709
ENV PATH=$PATH:/usr/local/android-sdk/cmdline-tools/latest/bin
RUN yes | sdkmanager --licenses && \
sdkmanager "ndk;28.1.13356709" "platforms;android-26" "build-tools;36.0.0"
RUN apt install -y ninja-build
RUN git clone --depth 1 -b vulkan-sdk-1.4.313.0 https://github.com/KhronosGroup/Vulkan-Tools.git /tmp/Vulkan-Tools && \
cd /tmp/Vulkan-Tools && \
PATH=/usr/local/android-sdk/build-tools/36.0.0/:$PATH ./scripts/android.py --apk
この内容でDockerfileを作成しカレントディレクトリに保存して下記数行を叩くだけです。
docker build -t vkcube-apk .
docker run -it --rm -v $(pwd):$(pwd) vkcube-apk cp /tmp/Vulkan-Tools/build-android/bin/VkCube.apk $(pwd)/
sudo chown -R $USER:$USER VkCube.apk
ls -lh VkCube.apk
-rw-r--r-- 1 user user 2.9M May 25 00:06 VkCube.apk
VkCube.apk実行手順
エミュレータを起動しておく。エミュレータの詳細については省略する。
adb devices
List of devices attached
emulator-5554 device
この状態でadb install
でアプリインストールします。
adb install VkCube.apk
Performing Streamed Install
Success
下記のようなメッセージが出る場合ABIがエミュレータまたは実行ターゲットとなるAndroidスマホと一致していませんのでAndroid ABIのページに記載されているABIをVkCubeビルド時に指定してください。
Performing Streamed Install
adb: failed to install VkCube.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
例えばx86_64
のターゲット向けにVkCube.apkを作成する場合は下記を指定します。デフォルトはarm64-v8a
です。
PATH=/usr/local/android-sdk/build-tools/36.0.0/:$PATH ./scripts/android.py --apk --app-abi x86_64
インストールが完了するとアプリ一覧にアイコンが増えているのでタップで実行できます。
おまけ:shell amからVkCube起動・停止
起動
adb shell am start -n com.example.VkCube/android.app.NativeActivity
停止
adb shell am force-stop com.example.VkCube
引数指定で--validate
を指定(エミュレータのターゲットイメージでVulkan Validationサポートが必要)
adb shell am start -n com.example.VkCube/android.app.NativeActivity --es "args" "--validate"