コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】WARNING: The APKs won't be signed and thus not installable unless you also pass a keystore via the flag --ks. See the command help for more information.

概要

WARNING: The APKs won't be signed and thus not installable unless you also pass a keystore via the flag --ks. See the command help for more information.
E/SplitApkInstallerBase: Failed to commit install session 481543160 with command package install-commit 481543160. Error: INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed collecting certificates for /data/app/vmdl481543160.tmp/base-master_2.apk: Failed to collect certificates from /data/app/vmdl481543160.tmp/base-master_2.apk: Attempt to get length of null array

Play Asset Delivery を使用している Unity プロジェクトで Android ビルドして、
ビルドした .aab を端末にインストールしようとしたところ、
上記のエラーが発生してインストールに失敗する現象に遭遇した。

#!/bin/bash

AAB_PATH="$1"
APKS_PATH="$2"
JAVA_PATH="$3"
BUNDLETOOL="$4"
KEYSTORE_PATH="$5"
KEYSTORE_PASS="$6"
KEYALIAS_NAME="$7"
KEYALIAS_PASS="$8"
ADB_PATH="$9"

if [ -e "${APKS_PATH}" ]; then
    rm "${APKS_PATH}"
fi

# .aab から .apks を生成
"${JAVA_PATH}" -Xmx1G -jar \
    "${BUNDLETOOL}" \
    build-apks \
    --bundle="${AAB_PATH}" \
    --output="${APKS_PATH}" \
    --ks="${KEYSTORE_PATH}" \
    --ks-pass=pass:"${KEYSTORE_PASS}" \
    --ks-key-alias="${KEYALIAS_NAME}" \
    --key-pass=pass:"${KEYALIAS_PASS}" \
    --mode=universal

# 生成した .apks を端末にインストール
"${JAVA_PATH}" -Xmx1G -jar \
    "${BUNDLETOOL}" \
    install-apks \
    --apks="${APKS_PATH}" \
    --adb="${ADB_PATH}"

build-apks する時に以下のオプションを指定したら、正常にインストールできた。

  • --ks
  • --ks-pass
  • --ks-key-alias
  • --key-pass