🪛

armeabi-v7a向けのアプリのmod apkを作りarm64-v8a端末で実行

2023/04/08に公開

経緯

とある9年前の古いAndroidアプリを実行してみたいと思い、F-Droidに残っていたのでインストールして実行してみたが実行時エラーでうまく動かなかった。

ソースコードも見てみるとどうやら armeabi-v7a 向けにしかビルドされてないっぽく、Nexus 5を引っ張り出してきてインストールしてみると無事動いた。

つまりarm64-v8a向けも含めてビルドすれば動くっぽいのだがソースコードがあっても9年前ともなるとビルド環境を整えるのが厳しい、しかし、armeabi-v7a(32bit)とarm64-v8a(64bit)は互換性があるらしくarm64-v8aでも適切にarmeabi-v7a向け****.soをロードすれば実行できることに気づいたのでmod apkを作ってなんとかしてみることにした。

mod apk とは

apk ファイルを改変して色々するやつ
assets を入れ替えてPCゲームのmodみたいにテクスチャを入れ替えたりするものからソースコードを改変して動作を変えたりといったことが行われている。
既存のアプリの機能を変更して便利にしたりゲームだとチートの手法として行われたりしている。
mod apk を色々配布しているサイトもあるがなにを仕込まれているかわかったもんじゃないのでそのへんに落ちてるのをそのままインストールするのは絶対やめたほうがよい。

mod apk 作成

まずは F-droid から apk をダウンロードしてきて展開してみる。ファイルはこんな感じ
.
├── AndroidManifest.xml
├── LICENSE-2.0.txt
├── assets
│ └── huga
│ ├── hoge.so
│ ├── foo.so
├── classes.dex
├── lib
│ └── armeabi-v7a
│ ├── bar.so
│ ├── baz.so
│ ├── piyo.so
│ └── hage.so
├── res
...

やっぱり lib/armeabi-v7a はあるけど lib/arm64-v8a がないので作って .so をコピーしてあげれば動きそうだ。

というわけで APK Tool というソフトウェアを使って apk を展開して改変していく

https://ibotpeaches.github.io/Apktool/

APK ファイルの展開

apktool d input.apk -o output_folder

input.apkは展開したいAPKファイルの名前、output_folderは出力フォルダーの名前

展開したら lib/arm64-v8a を作って lib/armeabi-v7a の中身をコピー

再度 apk に戻す

apktool b output_folder -o new_apk_file.apk

output_folderは展開したフォルダー、new_apk_file.apkは生成したい新しいAPKファイルの名前

これで改造apkが出来上がりますが、最近の android だと署名されていないapkはインストールできないので署名します。

まだ keystore ファイルがない場合は作ります

keytool -genkey -v -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 2048 -validity 10000

署名

jarsigner -verbose -keystore my-release-key.keystore -signedjar signed_new_apk_file.apk new_apk_file.apk my_alias

my-release-key.keystoreはキーストアファイル、signed_new_apk_file.apkは署名付きの新しいAPKファイル名、new_apk_file.apkは生成したAPKファイル、my_aliasはキーストアのエイリアスです。

これでインストールできる apk ファイルができました。

動かしてみた。

実際に新し目の端末(Galaxy Z Fold2)にインストールして動かしてみたところ、実行時エラーがでなくなり無事アプリが使えるようになりました。

Discussion