Android 7.1.1を使用したルートAndroid仮想デバイス


12

公式のAndroid SDKとAndroid Emulatorを使用して、仮想Android 7.1.1(x86)を作成しています。特に、いくつかのアプリケーションはデバイスへのルートアクセスを必要とします。

これでadb root、ルートシェルを使用できることを知っていますが、インストールしたアプリにルートアクセスを許可しません。

私はしばらくこのトピックを調査し、さまざまなアプローチを見てきました。ほとんどの回答はかなり前に投稿されています。

ルートを切り替えるオプションがないことはかなり奇妙だと思います-これは結局SDKです。

Android 7.1.1を実行し、インストール済みアプリのルートアクセスを効果的に許可するAndroid仮想デバイスをルート化するにはどうすればよいですか?

編集:可能であれば、Genymotionのような有料エミュレーターに頼るのではなく。

edit2:これは個人使用専用です。

edit3: Genymotionは、代替エミュレータとして実行可能なソリューションのようです。Android SDK / Emulatorがこのような機能を提供しないのはなぜですか?

edit4:xavier_fakeratによる答えは完全にうまくいくようですが、Android Studioバージョン3.1以降、これは永続的な発端ではないようです。AVDが再起動されると、ルートアクセスは失われます。

回答:


11

Androidエミュレーターをルートにする方法(Android 7.1.1 / Nougat)

Androidエミュレータをルート化する簡単な方法(スタンドアロンのAndroid SDKから実行)をコミュニティにお知らせできることを嬉しく思います

要件

注:SuperSUは非推奨になりましたが、このメソッドはエミュレーターをルート化するために引き続き機能し、新しいルート化メソッドの更新がさらに提供されます。

説明書

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

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

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

ここに画像の説明を入力してください

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

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

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

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

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

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

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

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

adb root

adb remount

今度は、suバイナリをプッシュします。

これは私が正常に使用したコードですadb -e push C:\%USERPROFILE%\Desktop\rootemu\x86\su.pie /system/bin/su

(suバイナリの特定の場所については気にせず、空白がない限りどの場所でも構いません)

これが失敗した場合は、代わりにこのディレクトリにプッシュしてみてください/system/xbin/su。また、Android 5.1以下を実行しているエミュレーターsuではsu.pie

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

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

    adb –e shell su root cd /system/bin chmod 06755 su

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

  1. 設定installのsuバイナリとセットAに関する指令をdaemon

コードを入力します。

su --install

そして、デーモンをセットアップするため:

su --daemon&

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

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

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

setenforce 0

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

SU権限を必要とするアプリを開いて、ダブルチェックを行い、実際にSuperSUにsu権限を付与するかどうかを尋ねます。

ここに画像の説明を入力してください

備考

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

特別な謝辞;

Irvin Hに感謝します。IrvinHのチュートリアルは、私が何度も失敗した後、そして多くのユーザーがエミュレーターをルート化する必要性を感じた後、このガイドを作成するきっかけになりました。これも大きな利益になることを願っています

Irvin H:Androidエミュレータのルート化– Android Studio 2.3で((Android 4.4)

更新

SaAtomicがコメントしたように、

このアプローチは、Android Studio 3.0.1でも引き続き実行可能です

エミュレーターバージョン27.2.9以上にアップグレードした後、スナップショット機能を使用してrootの保持がはるかに簡単になりました(system.imgメソッドのコピーが機能しない場合):

理想的には、設定を変更せずに仮想デバイスを休止状態にするのに似ているため、すべてが保持されます。

スナップショット

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

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

APIレベル22でテスト済み


1
詳細な回答ありがとうございます。まだ試していませんが、これは実行可能な解決策のようです!
-SaAtomic

1
@SaAtomic、あなたのステップは非常に便利です、さらに、カスタムリカバリを使用してSupersu 2.82 / Magiskをフラッシュすることもできます。実行しているデバイスは.... ..あなたに感謝
Panchajanyaサルカール

Android 7.1.1を使用して、Android SDK 2.3.3(AVD Manager)と仮想Pixelでこれをテストしました。すぐに説明したとおりに動作します。ありがとうございました!
-SaAtomic

1
更新:このアプローチは、Android Studio 3.0.1でも実行可能です
SaAtomic

1
Google APIs Intel x86 Atom System ImageGoogle Play Intel x86 Atom System Image
-xavier_fakerat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.