Android=エミュレータを操作するときによくある質問ですが、/system
への永続的な変更をエミュレータに受け入れさせる方法はありますか?
エミュレーターはQEMUに基づいているため、理論的には、system
イメージをuserdata
(たとえば)と同じように動作させることは可能ですが、私は慣れていませんQEMUによる処理方法。ポインタはありますか?
現時点では(ビルドツールv26では、Googleが頻繁に変更しない場合)、コマンドラインからエミュレータを起動するときに_-writable-system
_ディレクティブを使用すると、_/system
_再起動によるパーティション。つまり、_/system
_パーティションに書き込むことができ、再起動しても変更は維持されます。
_emulator -avd <AVD_NAME> -writable-system
_
これにより、通常_qcow2
_にある_.Android/avd/<AVD_NAME>.avd/system.img.qcow2
_画像ファイルへの変更も保持されます
この_system.img.qcow2
_ファイルをコピーし、_-wipe-data
_ディレクティブを使用してAVDからデータをワイプし、このファイルをディレクトリに戻し、再起動しても、最初に行ったシステム変更は保持されます。 (注意:少なくとも今のところ、coz Googleは状況を変え続けています)
pdate: QEMUの最新バージョンから-nand
オプションが削除されたため、以下は機能しない可能性があります。
pdate:現在のやり方については、承認された回答を参照してください。
Yuryの答えは一般的なものですが、スクリプトを作成できるようにするには(最終的にはこれが必要です)、エミュレーターイメージを/tmp
ディレクトリで見つけられるようにする必要があります。
QEMUの動作をオーバーライドできることを発見しました。これは少しハックですが、うまくいきましたので、私はこれをやるようになりました:
system.img
をプラットフォームディレクトリからAVDディレクトリにコピーします。0x1f400000
です。エミュレータを読み取り/書き込みモードで実行します。
emulator -avd Galaxy_Nexus -qemu -nand system,size=0x1f400000,file=/home/fx/.Android/avd/Galaxy_Nexus/system.img
(エミュレータを冗長モードにすると、デフォルトでは、単にinitfile=
ではなくfile=
を使用することに気付くでしょう)
変更を加えると、すぐにローカルに保存されますsystem.img
emulator -avd Galaxy_Nexus
を使用してエミュレータを起動するだけで、変更が使用されますpdate:スクリプティングの場合、QEMUは変更をすぐにイメージに同期しないため、何かを変更した直後に再起動すると、データが失われる可能性があります。私はこれを回避する方法を探しています...
次の更新:adb -e emu kill
を使用してエミュレータを停止します。 reboot
は単に悪いことをします。
それは実際には非常に良い質問です。私は同じ問題を抱えていました。これが私の発見です。実際、私はUbuntuを使用していますが、Ubuntuの手順を説明します。 Windowsを使用している場合は、パスを変更するだけです。
example.avd
などの新しいAVDを作成します。Android-sdk-linux/platforms/Android-10/images
から~/.Android/avd/example.avd
にコピーしますemulator -avd example
を使用してAVDを実行しますmount -o rw,remount -t yaffs2 /dev/block/mtd0 /system
を使用してシステムをrwとして再マウントします(パーティションを検出するには、コマンドcat /proc/mtd
を使用します)/tmp/Android-<your_computer_name>
でtmpエミュレーターを見つけて、次のような奇妙な名前を付けます:emulator-PQ7LgE
そして~/.Android/avd/example.avd
にコピーしますsystem.img
を削除し、コピーしたtmpエミュレータの名前をsystem.img
に変更しますcache.img
からuserdata.img
、userdata-qemu.img
、~/.Android/avd/example.avd
を削除します幸運を!
F.Xというsystem.imgファイルとAVDディレクトリを見つけるのに苦労しました。について投稿した。 Macでは、次の場所にあります。
~/Library/Android/sdk/system-images/Android-19/default/
~/.Android/avd/Nexus.avd/
コメントとして追加するのに十分な評判がないので、このように投稿する必要がありました。ごめんなさい。
ソリューション#2はすばらしい。
MS AVをホストとして使用している場合のヒントを以下に示します。AVDディレクトリは以下の場所にありますが、「短い」パス名をfile = pathパラメータとして使用する必要があります。引用されたパスのバリアントは、何らかの理由で機能しません。
Win XP:C:\ Documents and Settings \(ユーザー名)\ .Android\avd\...短いC:\ DOCUME〜1 \(ユーザー名)\ ANDROI〜1\avd\...
Win 7 C:\ Users \(ユーザー名)\ .Android\avd\...
次の例のように、「startrw.bat」と言う独自のbatファイルを作成できます。
@echo off
C:\<ADTFOLDER>\sdk\tools\emulator -avd <AVDNAME> -qemu -nand system,size=0x1f400000,file=C:\DOCUME~1\<USERNAME>\ANDROI~1\avd\<AVDNAME>.AVD\system.img
cd C:\<ADTFOLDER>\sdk\platform-tools
echo .
echo Wait ...
echo .
echo When emulator is FULLY loaded press any key to connect adb Shell to it
echo To make /system writeable type in adb Shell:
echo .
echo -----------------------------
echo mount -o rw,remount /system
echo -----------------------------
echo .
echo You can use the Eclipse ADT DDMS File Browser to browse or Push-pull files now.
echo .
echo Closing this window closes the emulator !
echo .
echo Wait emulator to load Android. When done
pause
C:\<ADTFOLDER>\sdk\platform-tools\adb Shell
これにより、ワンクリックでロードできます。変更が完了したら、現在のコマンドウィンドウを閉じてエミュレータを終了します。
エミュレーター、ADTエディター、フッキングDDMSファイルブラウザー(右側のウィンドウでファイルツリーを表示するには、エミュレーターラインの左側をクリックする必要があります)など、ほとんどのものがロードするのに長い時間がかかります。
F.X.の答えは、Android WindowsのAPI 19および21の場合、現状のままでは機能しません。
emulator -avd <AVD> -qemu -nand system,size=0x<SIZE IN HEX>,file=<PATH/TO/system.img>
システムはイメージのマウントに失敗します。カーネル出力を見ると、疑わしいページサイズ(2048)と2つのゼロ以外のパラメーター値(追加サイズと「消去」)が使用されていることがわかりました。これらのパラメーターはどこにも文書化されていませんが、 qemuのソースコード で確認できます。最終的に私のために働いたのは
emulator -avd <AVD> -qemu -nand system,size=0x<SIZE IN HEX>,file=<PATH/TO/system.img>,pagesize=512,extrasize=0
これらのパラメーターを指定すると、「erase」も0に設定されます。
また、これらのパラメーターを使用すると、システムがグラフィカル環境を起動できないが、adbは機能することがわかりました。
端末でこのコマンドを使用します
cd /Users/NAME_USER/Library/Android/sdk/emulator # Move to emulator folder
Sudo ./emulator -writable-system -avd NAME_AVD -partition-size 280 # Run avd by writable system
Sudo adb root # Change to root
Sudo adb remount # remount again
Sudo adb Shell
su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
nAME_USERとNAME_AVDを変更する
これを行う最善の方法は、次のコマンドを使用することです。
<path-to-emulator-executable> -avd <AVD> -partition-size 512