VirtualBox内で動くAndroidにMagiskを導入する
※2024/11/08にmagisk導入作業完了しました.そのときの記事です
※ガチ初心者が書いた記事ですので間違いあるかもしれないです.ご了承を
概要
VirtualBox内でAndroidx86をインストールしたのだが,Magiskはそのままだと入れられないのでいろいろやってみた.
謝辞
Linux初心者状態のにひにひにいろいろ教えてくれたUnagi Dojyouありがとうございました.
環境
- Ubuntu 24.04.1 LTS x86_64
- Oracle Virtual box
- 仮想上のOS
- Androidx86
- 仮想上のOS
前提
- Ubuntuインストール済み
- Oracle Virtual boxインストール済み
手順
- Androidx86のインストール
- 仮想HDDからramdisk.imgを抜き出す
- boot.imgにMagiskアプリでパッチを当てる
- パッチがあたったboot.imgをramdisk.imgに変換
- 仮想HDDのramdisk.imgをパッチしたファイルで上書き
Androidx86のインストール
1.Androidx86をダウンロード(DL)し,解凍する
2. Oracle VM VirtualBox Managerで"New"を押す.名前とisoイメージ(先ほどDLしたやつ)を選択し,"Next"押します.
※今回はtestという仮想環境名にしました.
- それぞれ適切なメモリ量,cpu等を割り当ててFinishを押します
!!!注意!!!
一つ目:Virtual Hard diskの設定のところで,Pre-allocate Full Sizeを選択することを強く推奨します.これを選択しないと,HDDのアドレスが動的になり,あとあと面倒になります.一方で,この仮想環境を立てるとその時点で設定した容量を確保されてしまうので,サイズはしっかり考えて設定した方がよいかと思われます.
二つ目:Setting>Display>Graphic ControllerはVBoxVGAがいいと思います.デフォルトのままだとGUIが動きません
三つ目:Setting>Generalで必ず64bitのOSを指定してください.にひはUbuntu選択しました
- 作った仮想環境を開くと以下のような画面がでるので"Installation - Install Android-x86 to harddisk"を選択します.
- Choose Partitionで"Create"を選択し,"OK"を押す
- ConfirmでGPTはNOで
7.ext4でフォーマット
- GRUBはYESで
- YESで
- 終わったら仮想環境を閉じ,Oracle VM VirtualBox ManagerのSettingでStorage>Controller:IDEにあるisoファイルを取り除きます
- これで起動しなおすと,Androidが起動します
!!! シャットダウンするときは!!!
シャットダウンするときはVirtualBoxの閉じるボタン押すと,以下のような画面がでて,真ん中のラジオボタンでシャットダウンシグナルが押せます.
仮想HDDからramdisk.imgを抜き出す
仮想HDDからramdisk.imgを抜き出します.この作業のために abootimg と mkbootimg というプログラムが必要になります.
必要なもののインストール
-
Android Image Kitchen のダウンロードをします.
AIK-Linux-v3.4-ALL.tar.gz
をダウンロードし,解凍します.
https://xdaforums.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/#google_vignette -
AIK-Linux の中にあるプログラム mkbootimg を手動インストールします.AIK-Linux>bin>Linux>x86_64>mkbootimgをコピーします
sudo cp /home/XXXXX/Downloads/AIK-Linux-v3.8-ALL/AIK-Linux/bin/linux/x86_64 /bin/
※XXXXXは人によって違う
- abootingをインストール
sudo apt install abootimg
仮想HDDをマウント
仮想HDDにアクセスするためにマウントします. [3]の"qemu のカーネルモジュールを使う方法もあります"のところのやり方の方が簡単に感じたのでそっちでやりました.(マウントできればなんでもいいです...)
- 以下のコマンドでマウントします.<storage.vdi>は仮想HDDのvdiを指定してください.
# modprobe nbd max_part=16
# qemu-nbd -c /dev/nbd0 <storage.vdi>
# mount /dev/nbd0p1 /mnt/dir/
※"#"はsudoでの実行です.
!!!注意!!!
- nbd0はほかでマウントされていたらエラーでるのでnbd1なり,べつのをつかってください.
- 仮想HDDのvdiはVirtualBoxのsettingからも見れますし,デフォルトでは"/home/XXXXX/VirtualBox VMs"のフォルダ内にあります.VirtualBox VMsはスペースが入ってるので,""でくくらないとエラーでると思います
Magiskのapkとboot.imgの準備
今回は仮想環境上のandoridにUSB接続のHDDをつなぎ,そこからapkとパッチを当てるためのboot.imgを操作します.
- UbuntuのルートディレクトリのAndroid-x86>android-X.X-rXといったフォルダを開き,右クリックで端末で開くを選択します
- 以下のコマンドを打ちます
# mkbootimg --kernel kernel --ramdisk ramdisk.img --output boot.img
これでboot.img ファイルがramdisk.img や kernel ファイルのあるフォルダに生成されます.このフォルダをUbuntu内の自分のわかりやすいところに置きます.(今回はDownload/test の中にいれたとします.)
-
Magiskのapkをさっきのboot.imgに入れたフォルダに入れる
-
VirtualBoxを開いて,Setting>StorageでStorage Devicesのところの下の方に"+"でController: USBを選択し,その中にvdiファイルを作成します.
-
そのvdiファイルのパスをもとにまたマウントします.(さっきとは違うnbdにしてください.)
# qemu-nbd -c /dev/nbd1 <storage.vdi>
# mount /dev/nbd1 /mnt/dir/
-
UbuntuのUtilitiesの中にあるDisksを開くと以下のようになっているので,FAT32とかでフォーマットし,マウントします.
-
さっきのMagiskのapkファイルとboot.imgをマウントしたフォルダに入れます.
-
いれたら,disksでアンマウントします.そのあとこのコマンドを実行します
qemu-nbd -d /dev/nbd1
※nbdは各自合わせてください.
boot.imgにMagiskアプリでパッチを当てる
パッチの当て方は[1]の記事の"Magisk Manager から boot.img をパッチ"の章とほぼ同じなで省略します.今回はこの記事と違ってDownloadフォルダではなく,外付けUSBに入ってます.当てたパッチのファイルもこの中にいれるようにしてください.
パッチがあたったboot.imgをramdisk.imgに変換
VirtualBoxを閉じてUbuntuに戻ります.
- さっきと同様に外付け仮想HDDをマウントします.
# qemu-nbd -c /dev/nbd1 <storage.vdi>
- Disksを開いてマウントします.
- そのフォルダ内にパッチしたファイルがあることを確認してください
- 確認できたら,そのフォルダ内で
# abootimg -x patched_boot.img
をします.
※patched_boot.imgはパッチしたファイル.人によって多少違うらしいので,そこは臨機応変にコマンドを読みかえてください.
仮想HDDのramdisk.imgをパッチしたファイルで上書き
- 処理が終わると,initrd.imgとかが生成されます.これをramdisk.imgに名前を変更し, Android-x86 のフォルダ (「android-○.○-r○」など)に配置します.
- これで,仮想HDDなどをUbuntuからアンマウントさせた後,VirtualBoxでandroidを起動すると,Magiskが使えるようになります.
感想
Linux初心者状態のにひにひにとってはかなり苦でしたが,友達に手厚くサポートしてくれたので,なんとかMagiskを入れることができました.
参考文献
[1]Android-x86 に Magisk を導入してみる!?
[2]Android-x86 の default.prop と build.prop を編集する on Ubuntu [3]VirtualBox 仮想ディスクのマウント VDI Archlinux
Discussion