web-dev-qa-db-ja.com

Androidエミュレータでルートアクセスを取得する方法は?

すべてのAndroid SDKバージョン(1.5から2.3.3)があり、Androidエミュレーターでルートを取得するための多くの方法を試しました。 Androidデバイスを使用せず、エミュレーター(AVD)ですべてをテストします。

'iptables'および 'busybox'機能を使用するには、Androidエミュレーターのいずれかでルートアクセスを取得する必要があります。また、iptablesを使用するには、rootアクセスが必要です。少なくとも「su」コマンドはターミナルエミュレータで実行する必要があります。

z4rootアプリケーションもインストールしました。

しかし、それは非常に長い時間がかかり、応援を終了せず、行き詰まります。システムをRC30未満にダウングレードすると、この方法でルートアクセスを取得できると言う人もいます。これが当てはまる場合、これを行う方法は? LinuxとWindows OSの両方を使用しています。

誰かが私のエミュレータをルート化する方法を教えてください。

114
Preetam

これらの答えはすべて不必要に複雑です:)

$ > adb Shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb Shell
generic_x86:/ #
98
JRaymond

Androidエミュレータのルート方法(Android 7.1.1/Nougatでテスト済み)

要件

説明

  1. SuperSu.apkをインストールします

    • SuperSuアプリを最初にインストールし、ドラッグアンドドロップするだけです(最新のエミュレータバージョンを実行する場合、またはadbを介してサイドロードする場合はadb -e install supersu.apk

    • インストール後、実行すると、「SUバイナリがインストールされていません。」を示す以下のような画面が表示されます。このエラーは、デバイスがまだルート化されていないことを確認するだけです。

enter image description here


  1. エミュレータのシステムパーティションを書き込み可能にする

    • それが示唆するように、システムファイルを書き込むためにエミュレータに許可を与える必要があります。

    • これを行うには、次のコードを入力します。emulator.exe -avd {emulator_name} -writable-system

注:Android SDKがインストールされているtoolsフォルダーに移動し、を押してコマンドプロンプトを開きますShiftキーを押しながら右クリックします。


  1. システムディレクトリにsuバイナリをプッシュする

    • Recovery flashable.Zip(異なるアーキテクチャのsuバイナリを含む)を抽出します

重要! avdアーキテクチャ(x86、armなど)に一致するsuバイナリのみを使用し、これらのバイナリを抽出したパスに注意してください。

  • ルートとしてadbを実行していることと、再マウントする必要があることを確認してください。これらのコードを入力してください

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を使用します


  1. suバイナリのパーミッションを変更します

    • 次に、suバイナリのパーミッションを少し変更します。これは、adbを介してエミュレーターデバイスで行う必要があります。

    adb -e Shell su root cd /system/bin chmod 06755 su

重要!! suバイナリパスに注意してください(私の場合は/ system/bin)


  1. suバイナリでinstallディレクティブを設定し、daemonを設定します

コードを入力します。

su --install

デーモンをセットアップするため:

su --daemon&

重要!!間隔に注意してください


  1. SELinuxをPermissiveに設定する(つまり、SE Linuxをオフにする)

    • 最後に、次のコードでselinuxをオフにします。

setenforce 0


  1. SuperSUアプリを開くと、バイナリの更新を要求される場合があります。通常の方法を使用できます。

注:ブートループが発生している場合は、バイナリを更新せずに、そのまま使用してください。


それはほとんどそれです!!

SUパーミッションを必要とするアプリケーションをダブルチェックするだけで開き、実際にSuperSUにsuパーミッションを付与するかどうかを尋ねます。

enter image description here

Rootがsuバイナリを更新し続けるように(通常の方法を使用)、system.imgを一時ディレクトリからコピーし(Users\AppData\Local\Temp\Android Emulatorファイルは通常ランダムに命名されます(例:1359g.tmp大きなサイズ)、デフォルトのsystem.img

更新

Linuxで一時的なシステムイメージを取得する方が、Windowsよりも簡単だと述べました。スナップショットイメージを使用して試すことができます。

2018年8月4日更新

エミュレータ27.3.xの出現により、スナップショット機能によりルートの保存がはるかに簡単になりました(system.imgメソッドをコピーできない場合):

理想的には、設定を変更せずに仮想デバイスをhibernarigのようにすることで、すべてが保持されます。

スナップショット

これで、特定のデバイス構成の複数のAVDスナップショットを保存し、エミュレーターの起動時に保存するスナップショットのどれを読み込むかを選択できるようになりました。スナップショットをロードして仮想デバイスを起動することは、電源オフ状態から起動するのではなく、物理的にスリープ状態から起動することに似ています。

これは、エミュレーターを開始するための唯一の要件が、エミュレーターを開始する通常の-writable-systemコマンドにemulator -avd [avdname]パラメーターを追加することを意味します。 (emulator -avd [avdname]だけでエミュレータを実行すると、ルート化されたバージョン/コピーが起動しないか、エラーが発生する可能性があります

APIレベル22でテスト済み

また、ブートループの問題については、他の投稿を参照してください。 Android Emulator:ルーティング後のブートループを回避する方法? およびその更新。

備考

参照するほとんどのコンテンツは古いAndroidバージョン用であったため、変更したコマンドとパスが異なるためです。

謝辞;

64
xavier_fakerat

エミュレータの実行中に実行する必要があるコマンドのリストを次に示します。このソリューションを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 。エミュレータを起動するたびにこれらのコマンドを実行する必要があります。エミュレータを起動してルート化するスクリプトを作成できます。

33
a.b.d

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
  1. ルートからadbdを再起動する必要があります。

    adb -s emulator-5554ルート

システムを再マウントします。

adb -s emulator-5554 remount

エミュレータの実行ごとに1回のみ提供できます。そして、別の再マウントは書き込みモードを壊す可能性があります。このため、mount -o remount,rw /systemのような他のコマンドをremountで実行する必要はありません。

別の手順は同じままです-バイナリをアップロードし、デーモンとしてバイナリを実行するなど。

AVD Android 7 x86のルートからの画像: AVD Android 7 x86 with root


su binaryの実行時にPIEに関するエラーが表示される場合は、エミュレータに間違ったバイナリをアップロードします。アーカイブ内にsu.pieという名前のバイナリをアップロードする必要がありますが、エミュレーターではsu.pieではなくsuとして名前を付ける必要があります。

19
Enyby

最も簡単な方法は、コマンド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以降でテスト済み。

13
newbie

ここ 必要なものがすべて揃ったパック。または、次のスクリプトを使用できます。

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
2
Poprygun

他の方法でこの問題を解決してください。

デフォルトのAndroid Emulatorの代わりに Genymotion を使用します。デフォルトでルート化されています。それははるかに簡単で、通常の電話のようです。個人使用は無料です。

デフォルトのAndroidエミュレーターにXposedフレームワークをインストールしたいので、この質問を見つけました。このインストールには、カスタムリカバリ(TWRPなど)を使用したルートとフラッシュが必要です。両方とも、デフォルトのAndroidエミュレーターでは困難です。最後に、Genymotionを使用して、すべて数分で完了しました。

2
user2360478

SuperSUを含む上記の提案の多くを試してみましたが、何も機能しませんでしたが、私の目的に合ったもっと簡単なものが見つかりました。私の場合、コマンドプロンプトでのみsqliteを実行できるようにしたかったのです。古いバージョンのAndroid(Lollipop)を使用してエミュレータを起動し、すぐにルートアクセスを取得しました。

1
Alan Todtenkopf

上記のソリューションのメソッドの一部を使用しました。ただし、完全には機能しませんでした。アンディの最新バージョンでは、これは私のために働いた:

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バイナリを再度インストールします。これで、ルートが機能するようになりました!

1
obc7787

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はルートを確認します。しかし、私はバイナリファイルを更新しません

0
xWeb