見かけ上のベンチマークスコアを上げるために、Androidデバイスメーカーが行うベンチマークブーストがあります。ベンチマークスコアが実態を反映しなくなるので避けるべきことなのですが、実際まだそういうことをやっている端末は普通にあります。今回は、そこら辺のApkファイルを取ってきて、パッケージ名だけ変更して戻す方法を書きます。
※この記事はAndroplusさんの記事1を参考にしています
パッケージ名を変更する方法
事前準備
環境
まず、今回は以下の環境でパッケージ名の変更を行います。
- Ubuntu 22.04 on WSL2
- Bash
- VSCodeでリモートウインドウを開いている
この辺はインストールするだけなので、ググれば出てきます。要するに、WSL2を使えるようにし、Ubuntuをインストールし、シェルとしてBashが使えるWSL2環境にVSCodeで接続してファイルがいじれればOKです。あと、暗黙の了解として、Linuxの最低限の知識があることが前提となります。分からなかったら調べて下さい。
追加ツールのインストール
OpenJDK 17
とりあえず最新StableのOpenJDK 17を入れます。
sudo apt update
sudo apt upgrade -y
sudo apt install openjdk-17-jdk -y
インストール後、java -version
でバージョン確認をしてちゃんと17になっていることを確認してください。
apktool
apktoolのGitHubリポジトリにアクセスし、Releasesから最新のRelease版apktoolをダウンロードしてください。apktool_2.11.1.jar
みたいなやつがapktoolの実体です。
wget https://github.com/iBotPeaches/Apktool/releases/download/v2.11.1/apktool_2.11.1.jar -O apktool.jar
こんな感じで適当にwgetすればいいでしょう。
次に、スクリプトもダウンロードします。GitHubのページだと、/scripts/linux/apktoolにあるファイルがそれです。これもwgetします。
wget https://github.com/iBotPeaches/Apktool/raw/refs/heads/master/scripts/linux/apktool
ダウンロードできたら、実行可能なように権限を変更して、システム全体から使えるように移動させます。
chmod +x apktool
sudo mv apktool /usr/local/bin/
sudo mv apktool.jar /usr/local/bin/
これでapktool
が使えるようになるはずです。適当にシェルでapktoolを実行して、実行可能であることを確かめておいて下さい。
Android SDK Build Tools

Googleのサイトから、Android SDK Build Toolsをダウンロードしてインストールします。Android Studio自体は必要無いので、今回はコマンドラインツールのみをインストールします。
上記サイトにアクセスし、Linux用のコマンドラインツールをダウンロードします。規約に同意するとボタンが押せるようになると思うので、そのボタンのリンクをコピーして、Ubuntu側のシェルでwget https://dl.google.com/android/repository/...
とかしてダウンロードすればOKです。zipファイルなのでunzipコマンドとかで展開します。
展開したディレクトリ内にあるsdkmanager
を用いてBuild Toolsをインストールします。
./sdkmanager --list
でバージョン一覧みたいなのが出てくると思うので、build-toolsを指定してインストールします。例えば34.0.0を指定する場合、
./sdkmanager "build-tools;34.0.0"
のようになります。
最後にパスを通すのですが、これはお好みで。私は.bashrc
に以下を追記しました。
# zipalign's path
export PATH=$PATH:"$HOME/dev/java/android_sdk/build-tools/34.0.0"
これも、インストール後には参照できるようになっているか、しっかり確認しておきましょう。
アプリのパッケージ名変更
デコンパイル
ここからいよいよ本番の、パッケージ名変更をやっていきます。
まずapktoolでアプリのapkファイルをデコンパイルします。apkファイルはネットを調べて入手してください。
apktool d <apkファイルのファイル名>
あとは自動です。
デコンパイルされると、そのディレクトリにapkファイルのファイル名が付いたディレクトリができていると思います。
自動置換スクリプト実行
本来ならここから地獄の置換作業が発生するのですが、面倒なのでChatGPTにシェルスクリプトを書いてもらいました。実際に使って問題なくパッケージ名変更までできたので、おそらく大丈夫だと思います。何箇所か書き込まないと使えない場所があるので、漏れないように記入してください。想定しているディレクトリ構造は以下の通りです。
.
├── android_sdk
├── com.ap.android # 変更前のディレクトリ
│ ├── AndroidManifest.xml
│ ├── apktool.yml
│ ├── assets
│ ...
├── com.customed.android # 変更後のディレクトリ
│ ├── AndroidManifest.xml
│ ├── apktool.yml
│ ├── assets
│ ...
├── copy_and_rename_package.sh # このスクリプト
スクリプトがあるディレクトリで
./copy_and_rename_package.sh
を実行すれば実行できます。
#!/bin/bash
# ---------------------------
# スクリプトのあるディレクトリを取得(絶対パス)
# ---------------------------
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
# ---------------------------
# 変数定義
# ---------------------------
OLD_DOT="com.app.android" # 対象のアプリの変更前のパッケージ名(逆ドメイン記法)
NEW_DOT="com.customed.android" # 対象のアプリの変更後のパッケージ名(逆ドメイン記法)
OLD_SLASH="com/app/android"
NEW_SLASH=$(echo "$NEW_DOT" | tr '.' '/')
OLD_DOLLAR="com\$app\$android"
NEW_DOLLAR=$(echo "$NEW_DOT" | sed 's/\./\$/g')
OLD_DASH="com-app-android"
NEW_DASH=$(echo "$NEW_DOT" | sed 's/\./-/g')
# リネーム前のデコンパイル後のディレクトリ(スクリプトと同じ階層にあるもの)
TARGET_DIR="$SCRIPT_DIR/com.app.android.application_(arm64-v8a,armeabi-v7a,x86,x86_64)(nodpi)" # 例
# リネーム後のディレクトリ(スクリプトと同じ階層に作成)
NEW_TARGET_DIR="$SCRIPT_DIR/$NEW_DOT"
# ---------------------------
# 新しいディレクトリの準備
# ---------------------------
if [ -d "$NEW_TARGET_DIR" ]; then
echo "既存の $NEW_TARGET_DIR を削除します..."
rm -rf "$NEW_TARGET_DIR"
fi
mkdir -p "$NEW_TARGET_DIR"
# ---------------------------
# 置換処理用の関数:パス(相対パス)を変換
# ---------------------------
transform_path() {
local input_path="$1"
local output_path
output_path=$(echo "$input_path" | sed "s#${OLD_DOT}#${NEW_DOT}#g" \
| sed "s#${OLD_SLASH}#${NEW_SLASH}#g" \
| sed "s#${OLD_DOLLAR}#${NEW_DOLLAR}#g" \
| sed "s#${OLD_DASH}#${NEW_DASH}#g")
echo "$output_path"
}
# ---------------------------
# 元ディレクトリ内の全エントリを新ディレクトリへコピー&変換
# ---------------------------
cd "$TARGET_DIR" || exit 1
# find の出力を直接 while ループで処理(改行ごとに正しく読むため)
find . -print | sort -r | while IFS= read -r entry; do
# "./" を除いた相対パスを取得
rel_path="${entry#./}"
new_rel_path=$(transform_path "$rel_path")
new_full_path="$NEW_TARGET_DIR/$new_rel_path"
if [ -d "$entry" ]; then
echo "Creating directory: $new_full_path"
mkdir -p "$new_full_path"
elif [ -f "$entry" ]; then
# コピー先の親ディレクトリを作成
mkdir -p "$(dirname "$new_full_path")"
case "$entry" in
*.smali)
# smaliファイルの場合はドット置換を行わず、スラッシュ・ドル・ハイフンのみ実施
echo "Transforming smali file (content): $entry -> $new_full_path"
sed "s#${OLD_SLASH}#${NEW_SLASH}#g; s#${OLD_DOLLAR}#${NEW_DOLLAR}#g; s#${OLD_DASH}#${NEW_DASH}#g" "$entry" > "$new_full_path"
;;
*.xml|apktool.yml)
# xml, apktool.yml は全置換を実施
echo "Transforming file (content): $entry -> $new_full_path"
sed "s#${OLD_DOT}#${NEW_DOT}#g; s#${OLD_SLASH}#${NEW_SLASH}#g; s#${OLD_DOLLAR}#${NEW_DOLLAR}#g; s#${OLD_DASH}#${NEW_DASH}#g" "$entry" > "$new_full_path"
;;
*)
echo "Copying file without transformation: $entry -> $new_full_path"
cp "$entry" "$new_full_path"
;;
esac
fi
done
cd - >/dev/null
# ---------------------------
# apktool.yml の特別な置換処理
# ---------------------------
# コピー先のルートにある apktool.yml を対象とします
APKTOOL_YML="$NEW_TARGET_DIR/apktool.yml"
if [ -f "$APKTOOL_YML" ]; then
echo "apktool.yml の renameManifestPackage を更新します..."
sed -i "s#renameManifestPackage: *null#renameManifestPackage: ${NEW_DOT}.application # 変更後のパッケージ名#g" "$APKTOOL_YML"
fi
echo "全エントリのリネーム・コピーが完了しました。"
ただ一点だけ注意点があり、スクリプトの実行完了後も、apktool.yml
自体は手動で書き換えなければいけません(バグですが直すかは分かりません)。具体的には、renameManifestPackage: null
のnull
を変更後のパッケージ名に書き換えなければいけません。
ビルド
置換が終了したら、次はビルドです。
apktool b <変更後のディレクトリ名>
これだけでコンパイルされます。
<変更後のディレクトリ名>/dist
にビルド後のapkファイルがあるはずなので、それを持ってきます。
zipalign 4 <さっきできたapkファイル> aligned.apk(名前はどうでもいい)
署名
できたapkファイルは署名がされておらず、おそらくそのままではインストールできないので、署名をします。
まずkeytoolでキーを作成します。キーストアのパスワードとかを入力することになるので、メモしておきます。
keytool -genkeypair -v -keystore my-release-key.jks -alias ${好きなエイリアス} -keyalg RSA -keysize 2048 -validity 100000
次に、apksignerで署名します。先ほどalignしたapkを用います。
apksigner sign --ks <自分のリリースキー>.jks --ks-key-alias <自分のエイリアス> --out signed.apk <alignした後の.apk>
これでOKです。
できたsigned.apk
が、パッケージ名を変更した後のapkファイルになります。これを自分の端末にインストールすれば、パッケージ名が変更されたアプリとして使えます。
参考情報
- 【2024年保存版】UbuntuにJavaをインストールする方法!初心者でも3分で完了 | Dexall公式テックブログ https://dexall.co.jp/articles/?p=1075
- 3DMarkやAnTuTuベンチマークで本当の3D性能や発熱特性を計測できない理由とは?メーカーの不正で無意味な結果に – AndroPlus https://androplus.jp/entry/why-benchmarks-dont-show-real-results/
- Androidアプリ環境構築手順(APK編) | ULIZA Player (Android/iOS)アプリ設定ガイド https://docs.p.uliza.jp/uliza-player/uliza-player-android-ios/latest/application-configuration-guide/pages/06_verification_environment_android_apk.html#keystore%E3%81%A8%E7%A7%98%E5%AF%86%E9%8D%B5%E3%81%AE%E4%BD%9C%E6%88%90