February 11, 2019

Android-x86 の default.prop と build.prop を編集する on Ubuntu

event_noteFebruary 11, 2019

一部のゲームアプリを動かすために必要な、Android x86 の default.prop と build.prop ファイルの書き換え・保存を行う手順について見ていきます。この記事では、Ubuntu のパーティションにインストールした、 Androidx86 のシステムファイルを編集していきます (他の Linux でもおそらく同じような手順で編集可能だと思います)。Ubuntu への Andorid x86 のインストール方法については、過去記事もよろしければご覧ください。

パソコンで Android が楽しめる無料のOS Android x86 を Ubuntu にインストールして GRUB2 から起動しましょう!Ubuntu の Windows PC へのインストール手順についても見ていきます。

必要となるファイルの入手とインストール

以下の作業は、Ubuntu を使って進めていきます。

Android Image Kitchen のダウンロード

Android Image Kitchen は Andorid の boot.img ファイルを扱うためのプログラム集です。こちらのサイトから AIK-Linux-v3.4-ALL.tar.gz というファイルをダウンロードします。

Android Image Kitchen -- Unpack/Repack Kernel+Recovery Images, and Edit the ramdisk. Windows ports of the necessary Linux utils for Android image

AIK-Linux-v3.4-ALL.tar.gz の展開

Ubuntu の場合は、ダウンロードした gz ファイルを ファイルマネージャーから ダブルクリックすると、以下のような画面が出ますので、左上の「展開」を選択します。

展開場所を指定してから、右上の「展開」を押すとファイルが解凍されます。

AIK-Linux の中にあるプログラム mkbootimg を手動インストール

ここからのファイル操作は、root権限で実行したファイルマネージャー (Ubuntu の場合は Nautilus) で行っていきます。Ubuntu の場合は、端末に以下のコマンド

$ sudo nautilus

もしくは、

$ sudo -H nautilus

を入力すると、ファイルマネージャーをルート権限で実行できます。
このファイルマネージャーから、先ほど解凍した「AIK-Linux」フォルダ 「bin」フォルダ 「Linux」フォルダ へと進んでいきます。
「Linux」フォルダ にある「i686」と「x86_64」の二種類の内、
32bit版のLinux を使っている場合は、「i686」の中にある「mkbootimg」ファイルを、
64bit版のLinux を使っている場合は、「x86_64」の中にある「mkbootimg」ファイルを、
コピーしてください。

続いて、ファイルマネージャーの左端の項目にある「ファイルシステムのルート」、もしくは「コンピューター」から、Ubuntu のルートディレクトリにアクセスし、そこにある、「bin」フォルダ の中に、先ほどコピーした「mkbootimg」ファイルを配置します。これで mkbootimg の手動インストールは完了です。

abootimg をインストール

インターネットに接続した状態で、端末に以下のコマンドをコピペ (もしくは入力) して実行してください。Y/n の選択肢が出た場合は yと入力して Enter です。

$ sudo apt update

$ sudo apt install abootimg

インストールが終わったら準備完了です。

ramdisk.img の中にある default.prop の編集

boot.img を生成

以下のファイル操作も、先ほどと同じように、ルート権限で実行したファイルマネージャーで行っていきます。

まずは、Ubuntu のルートディレクトリにある Android-x86 のフォルダ (「android-○.○-r○」など) にアクセスし、そのフォルダ内の、ファイルの何もない場所を右クリックして、「端末で開く」を選択します。

そして、開いた端末に以下のコマンドを入力して、実行します。

# mkbootimg --kernel kernel --ramdisk ramdisk.img --output boot.img

すると、boot.img ファイルが ramdisk.img などのある Androidx86 のフォルダに生成されます。

この boot.img ファイルを、先ほど解凍した「AIK-Linux」フォルダ へと移動させてください。

そして、そのフォルダ内の、ファイルの何もない場所を右クリックして、先ほどと同じように「端末で開く」を選択し、開いた端末に以下のコマンドを入力して、実行します。

# ./unpackimg.sh

処理が終わると、「ramdisk」フォルダ 「split_img」フォルダ が生成されるはずです。この、「ramdisk」フォルダ の中に default.prop ファイルがあります。

default.prop ファイル の編集

Ubuntu だと、 default.prop ファイルをダブルクリックするだけで、テキストエディターで開けるはずです。

default.prop ファイル の項目は、
ro.adb.secure=1
ro.secure=1
ro.debuggable=0
persist.sys.usb.config=mtp
という値にそれぞれ書き換えるのが定石のようです (ro.adb.secureという項目がない場合はro.secure=1の上などに一行追加しておくと良いかもしれません)。

編集が終わったら boot.img に戻すために再パック

「ramdisk」フォルダの編集が終わったら、boot.img ファイルに戻すため再パックを行います。

「AIK-Linux」フォルダ 内の、ファイルの何もない場所を右クリックして、先ほどと同じように「端末で開く」を選択し、今度は以下のコマンドを入力して、実行します。

# ./repackimg.sh

すると今度は、image-new.img ファイルと ramdisk-new.cpio.gz ファイルが生成されます。この image-new.img ファイルが、再パックされた boot.img ファイルです。

image-new.img ファイルを ramdisk.img と kernel に分離

更に、この image-new.img ファイルを ramdisk.img と kernel ファイル に分離させます。

image-new.img ファイル のあるフォルダで、「端末で開く」をして、以下を実行します。

# abootimg -x image-new.img

すると、zImage ファイルと initrd.img ファイルが作成されます。

非常にややこしいですが、今生成された
initrd.img ファイル を ramdisk.img というファイル名にリネームして、
Ubuntu のルートディレクトリにある Android-x86 のフォルダに配置して下さい (オリジナルの ramdisk.img はどこかにバックアップしておくと元に戻すときに便利かも)。

因みに、Android-x86 のフォルダに最初からある initrd.img と今生成されたファイルは無関係ですのでご注意を。

system.img の中にある build.prop の編集

system.sfs を system.img に変換 (解凍)

ルート権限で実行したファイルマネージャーから、Ubuntu のルートディレクトリにある Android-x86 のフォルダ (「android-○.○-r○」など) にアクセスし、そのフォルダ内の、ファイルの何もない場所を右クリックして、「端末で開く」を選択し、以下のコマンドを実行します。

# unsquashfs -f -d . system.sfs

処理が終わると、system.img が生成されます。この system.img の中にあるファイルの編集を行うために、以下のコマンドを実行します。

# mkdir temp

# mount -o loop system.img temp

これにより、今作成した「temp」フォルダにアクセスすることで、system.img の中身の閲覧や編集を行うことができるようになります。

build.prop の編集

build.prop ファイルは、「temp」フォルダの中にあります。
build.prop の項目は、
ro.build.typeの値をro.build.type=user
に書き換えると、一部のゲームアプリには有効かも知れません。

二つの su ファイル の削除 (必要に応じて)

root 権限を必要とするアプリを使わない場合や、後から システムレス な root化 を行える Magisk などを導入する場合は、少しでも起動できるアプリを増やすため、system.img の中にある /bin/su/xbin/su の二つの su ファイルを念のため削除しておいた方が良いと思います。

system.img の編集が終わったら...

system.img の編集が終わったら、system.img の「temp」フォルダへのマウントを解除しておきましょう。

# umount temp

system.img の system.sfs への再変換

system.img の再変換を行う前に、オリジナルの system.sfs ファイルを違う名前にリネームするか、どこかにバックアップしておくと元に戻すときに便利だと思います。

追記

再変換した system.sfs を使うと Androidx86 が起動しなくなることがあったので、オリジナルの system.sfs を system.sfs.bak などにリネームして、起動には system.img を使うだけで十分でした。
(書き込みのできない system.sfs でないと動かないアプリも中にはあるかも知れませんが...)

以下のコマンドで、system.img を system.sfs へと再変換します。

# mksquashfs system.img system.sfs

再変換が終わると、system.sfs が同じフォルダに作成されていると思います。Androidx86 では system.sfs と system.img 、どちらを使っても起動するのに問題はないようですが、両者が同じフォルダに存在していると不具合が起こる可能性があるので、どちらかを リネームするか、違う場所に移しておいたほうが良いと思われます。

参考サイト

去年大晦日に購入した中古のNEC Mateですが、標準で2GBメモリと少なく、Windows7とはいえChromeを起動して複数タブであっという間にスワップ処理が動いてフリーズしてしまいます。 そのため、思い切ってAndroidを入れ...
Android-x86がUbuntu上で簡単にインストールできることがわかったのでタブレットで使えるようにした。ぴよ将棋、AbemaTVやAngryBirds(1点タッチしかできなかったのでゲーム性悪し)を入れてみたが普通に動くのですっかり気に入った。なんかすっかり普通に動作するんで調子に乗って「ジョジョの奇妙な冒険」アプリを入れたんだが動かなかった。げげー、これもしかしてroot化してると動かないアプリがあるってやつ?Android-x86は標準でsuコマンドが入っていて開発者オプションの変更でrootに成れる。これはroot化で動かないんだなと推測。root化を解除するには?とググると/system/bin/suと/system/xbin/suを消せば良いらしい。ところが/system領域がUbuntuの...Android-x86の非root化(unroot)