すべてのAndroid SDKバージョン(1.5から2.3.3)があり、Androidエミュレーターでルートを取得するための多くの方法を試しました。 Androidデバイスを使用せず、エミュレーター(AVD)ですべてをテストします。
'iptables'および 'busybox'機能を使用するには、Androidエミュレーターのいずれかでルートアクセスを取得する必要があります。また、iptablesを使用するには、rootアクセスが必要です。少なくとも「su」コマンドはターミナルエミュレータで実行する必要があります。
z4root
アプリケーションもインストールしました。
しかし、それは非常に長い時間がかかり、応援を終了せず、行き詰まります。システムをRC30未満にダウングレードすると、この方法でルートアクセスを取得できると言う人もいます。これが当てはまる場合、これを行う方法は? LinuxとWindows OSの両方を使用しています。
誰かが私のエミュレータをルート化する方法を教えてください。
これらの答えはすべて不必要に複雑です:)
$ > adb Shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb Shell
generic_x86:/ #
Androidエミュレータのルート方法(Android 7.1.1/Nougatでテスト済み)
要件:
Recovery flashable.Zip(suバイナリを含む) (ここに代替バックアップリンクがXDAユーザーによって提供されます Ibuprophen メインリンクが機能していない場合、フラッシュ可能なzipに対して: Flashable Zipリリース )
説明
SuperSu.apkをインストールします
SuperSuアプリを最初にインストールし、ドラッグアンドドロップするだけです(最新のエミュレータバージョンを実行する場合、またはadbを介してサイドロードする場合はadb -e install supersu.apk
)
インストール後、実行すると、「SUバイナリがインストールされていません。」を示す以下のような画面が表示されます。このエラーは、デバイスがまだルート化されていないことを確認するだけです。
エミュレータのシステムパーティションを書き込み可能にする
それが示唆するように、システムファイルを書き込むためにエミュレータに許可を与える必要があります。
これを行うには、次のコードを入力します。emulator.exe -avd {emulator_name} -writable-system
注:Android SDKがインストールされているtoolsフォルダーに移動し、を押してコマンドプロンプトを開きますShiftキーを押しながら右クリックします。
システムディレクトリにsuバイナリをプッシュする
重要! avdアーキテクチャ(x86、armなど)に一致するsuバイナリのみを使用し、これらのバイナリを抽出したパスに注意してください。
adb root
adb remount
今度は、suバイナリをプッシュします。
これは私が正常に使用したコードです:adb -e Push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su
(suバイナリの特定の場所については気にせず、空白がない限りどの場所でも構いません)
注:bin
またはxbin
を把握する前にコンソールで行う:> adb Shell
、> ls /system/xbin/su
これが失敗する場合は、代わりにこのディレクトリにプッシュしてみてください/system/xbin/su
。また、Android 5.1以降を実行しているエミュレーターでは、su.pie
ではなくsu
を使用します
suバイナリのパーミッションを変更します
adb -e Shell su root cd /system/bin chmod 06755 su
重要!! suバイナリパスに注意してください(私の場合は/ system/bin)
install
ディレクティブを設定し、daemon
を設定しますコードを入力します。
su --install
デーモンをセットアップするため:
su --daemon&
重要!!間隔に注意してください
SELinuxをPermissiveに設定する(つまり、SE Linuxをオフにする)
setenforce 0
SuperSUアプリを開くと、バイナリの更新を要求される場合があります。通常の方法を使用できます。
注:ブートループが発生している場合は、バイナリを更新せずに、そのまま使用してください。
それはほとんどそれです!!
SUパーミッションを必要とするアプリケーションをダブルチェックするだけで開き、実際にSuperSUにsuパーミッションを付与するかどうかを尋ねます。
Rootがsuバイナリを更新し続けるように(通常の方法を使用)、system.imgを一時ディレクトリからコピーし(Users\AppData\Local\Temp\Android Emulator
ファイルは通常ランダムに命名されます(例:1359g.tmp
大きなサイズ)、デフォルトのsystem.img
。
更新:
Linuxで一時的なシステムイメージを取得する方が、Windowsよりも簡単だと述べました。スナップショットイメージを使用して試すことができます。
エミュレータ27.3.x
の出現により、スナップショット機能によりルートの保存がはるかに簡単になりました(system.img
メソッドをコピーできない場合):
理想的には、設定を変更せずに仮想デバイスをhibernarigのようにすることで、すべてが保持されます。
スナップショット
これで、特定のデバイス構成の複数のAVDスナップショットを保存し、エミュレーターの起動時に保存するスナップショットのどれを読み込むかを選択できるようになりました。スナップショットをロードして仮想デバイスを起動することは、電源オフ状態から起動するのではなく、物理的にスリープ状態から起動することに似ています。
これは、エミュレーターを開始するための唯一の要件が、エミュレーターを開始する通常の-writable-system
コマンドにemulator -avd [avdname]
パラメーターを追加することを意味します。 (emulator -avd [avdname]
だけでエミュレータを実行すると、ルート化されたバージョン/コピーが起動しないか、エラーが発生する可能性があります)
APIレベル22でテスト済み
また、ブートループの問題については、他の投稿を参照してください。 Android Emulator:ルーティング後のブートループを回避する方法? およびその更新。
備考
参照するほとんどのコンテンツは古いAndroidバージョン用であったため、変更したコマンドとパスが異なるためです。
謝辞;
エミュレータの実行中に実行する必要があるコマンドのリストを次に示します。このソリューションをAndroid 2.2のavdでテストします。
adb Shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system
adb Push su /system/xbin/su
adb Shell chmod 06755 /system
adb Shell chmod 06755 /system/xbin/su
Suバイナリが作業ディレクトリにあると想定しています。 suとスーパーユーザーはここで見つけることができます: http://forum.xda-developers.com/showthread.php?t=682828 。エミュレータを起動するたびにこれらのコマンドを実行する必要があります。エミュレータを起動してルート化するスクリプトを作成できます。
5.1.1および6.0のAVDでは、Windowsで次のスクリプトを使用しました。
set adb=adb -s emulator-5558
set Arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% Shell mount -o remount,rw /system
%adb% Shell setenforce 0
%adb% install common/Superuser.apk
%adb% Push %Arch%/su%pie% /system/bin/su
%adb% Shell chmod 0755 /system/bin/su
%adb% Push %Arch%/su%pie% /system/xbin/su
%adb% Shell chmod 0755 /system/xbin/su
%adb% Shell su --install
%adb% Shell "su --daemon&"
rem %adb% Shell mount -o remount,ro /system
exit /b
SuperSUのUPDATE.Zipが必要です。それらを任意のフォルダーに解凍します。上記のコンテンツでbatファイルを作成します。必要なアーキテクチャとデバイスを指定することを忘れないでください:set adb=adb -s emulator-5558
およびset Arch=x64
。 5.0以上のAndroidを実行する場合は、set pie=
をset pie=.pie
に変更します。それを実行します。現在の実行の一時的なルートを取得します。
システムパーティションの再マウントでエラーが発生した場合は、コマンドラインからAVDを起動する必要があります。以下のAndroid 7の最初のステップを参照してください。
永続的にする場合は、SuperSUでバイナリを更新し、デフォルトのsystem.imgの代わりに一時フォルダーからsystem.imgを保存します。
結果の一時ルートをパーマネントに変換する方法
まず-SuperSuに行きます。バイナリアップグレードを提供します。通常の方法で更新します。リブート拒否。
2番目-エミュレータにのみ関連します。同じAVD。一番下の行は、システムイメージの変更が保存されないことです。それらを自分で保持する必要があります。
エミュレータごとに異なる指示が既にあります。
AVDの場合、一時ファイルsystem.imgを見つけてどこかに保存し、エミュレーターの起動時に使用できます。
Windowsでは、%LOCALAPPDATA%\Temp\AndroidEmulator
にあり、TMP4980.tmp
のような名前を持っています。
それをフォルダーavdデバイス(%HOMEPATH%\.Android\avd\%AVD_NAME%.avd\
)にコピーし、名前をsystem.img
に変更します。
これで、通常ではなく、開始時に使用されます。 SDKのイメージが更新された場合はtrueになり、古いイメージが使用されます。
この場合、このsystem.img
を削除し、作成時に操作を繰り返す必要があります。
ロシア語の詳細なマニュアル: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931
Android 7の場合、追加のステップを実行する必要があります。1.エミュレーターを手動で実行する必要があります。 SDKフォルダーsdk\tools\lib64\qt\lib
に移動します。このフォルダーエミュレーターからオプション-writable-system -selinux disabled
を実行して、次のようにします。
F:\Android\sdk\tools\lib64\qt\lib>F:\Android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
ルートからadbd
を再起動する必要があります。
adb -s emulator-5554ルート
システムを再マウントします。
adb -s emulator-5554 remount
エミュレータの実行ごとに1回のみ提供できます。そして、別の再マウントは書き込みモードを壊す可能性があります。このため、mount -o remount,rw /system
のような他のコマンドをremountで実行する必要はありません。
別の手順は同じままです-バイナリをアップロードし、デーモンとしてバイナリを実行するなど。
su
binaryの実行時にPIEに関するエラーが表示される場合は、エミュレータに間違ったバイナリをアップロードします。アーカイブ内にsu.pie
という名前のバイナリをアップロードする必要がありますが、エミュレーターではsu.pie
ではなくsu
として名前を付ける必要があります。
最も簡単な方法は、コマンドsh
のエイリアスを作成することだと思います。
adb Shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
Android Emulator 3.0以降でテスト済み。
ここ 必要なものがすべて揃ったパック。または、次のスクリプトを使用できます。
echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set Arch=x86
set pie=
echo Close all Android emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until Android emulator loading and press any key
pause
%adb% start-server
%adb% root
%adb% remount
%adb% Shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% Push D:\SuperSU\su\%Arch%\su.pie /system/bin/su
%adb% Shell chmod 0755 /system/bin/su
%adb% Push D:\SuperSU\su\%Arch%\su.pie /system/xbin/su
%adb% Shell chmod 0755 /system/xbin/su
%adb% Shell su --install
%adb% Shell "su --daemon&"
pause
exit /b
他の方法でこの問題を解決してください。
デフォルトのAndroid Emulatorの代わりに Genymotion を使用します。デフォルトでルート化されています。それははるかに簡単で、通常の電話のようです。個人使用は無料です。
デフォルトのAndroidエミュレーターにXposedフレームワークをインストールしたいので、この質問を見つけました。このインストールには、カスタムリカバリ(TWRPなど)を使用したルートとフラッシュが必要です。両方とも、デフォルトのAndroidエミュレーターでは困難です。最後に、Genymotionを使用して、すべて数分で完了しました。
SuperSUを含む上記の提案の多くを試してみましたが、何も機能しませんでしたが、私の目的に合ったもっと簡単なものが見つかりました。私の場合、コマンドプロンプトでのみsqliteを実行できるようにしたかったのです。古いバージョンのAndroid(Lollipop)を使用してエミュレータを起動し、すぐにルートアクセスを取得しました。
上記のソリューションのメソッドの一部を使用しました。ただし、完全には機能しませんでした。アンディの最新バージョンでは、これは私のために働いた:
Andy(Root Shell)[取得するには、HandyAndyアイコンを右クリックして[Term Shell]を選択]
シェル内で、次のコマンドを実行します。
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
次に、SuperSUをインストールし、SUバイナリをインストールします。これは、作成したSUバイナリを置き換えます。 (オプション)SuperSUを削除し、CWMでスーパーユーザーをインストールします。 suバイナリを再度インストールします。これで、ルートが機能するようになりました!
Suの属性を〜/ Android/Sdk/system-images/Android-22/google_apis/x86/system.imgに置き換えて割り当てただけで、今はAndroid 5になっています。 SuperSu.apkをインストールするだけで十分です
Android 6 is necessary only
adb root
adb Shell
>/system/xbin/su --daemon &
>setenfoce 0
その後、SuperSu.apkはルートを確認します。しかし、私はバイナリファイルを更新しません