1. ホーム
  2. android

[解決済み] "adb root" コマンドは、エミュレータ上でも "adbd cannot run as root in production builds" を返しますか?

2022-03-02 07:04:31

質問

を実行しようとしています。 adb root コマンドをエミュレータ上で実行することができます。

$ adb devices
List of devices attached
emulator-5554   device

しかし、次のようなエラーメッセージが表示されます。

$ adb root
adbd cannot run as root in production builds

この回答に従ってやってみました。 adb shell su は動作するが、adb root は動作しない。 私の問題を解決するために。

<ブロッククオート

adb root コマンドは開発ビルドでのみ動作するように設計されています (つまり、eng と userdebug はデフォルトで ro.debuggable=1 になっています)。あるいは、修正したadbdバイナリ(ro.debuggableをチェックしない)を使用することもできます。

しかし、どのようにすれば本番用ビルドではなく、開発用ビルドに変更できるのか、私にはよくわかりません?

アップデート 私はいくつかの追加説明を見つけ、これが動作するためには、エミュレータを「書き込み可能なシステム」にする必要があることを確信しました(cf. エミュレータのAVDのシステムパーティションを書き込み可能にする方法 ). しかし、もし私が

$ emulator -avd Nexus_5X_API_28 -writable-system
emulator: WARNING: System image is writable
emulator: ERROR: Running multiple emulators with the same AVD is an experimental feature.
Please use -read-only flag to enable this feature.

このエラーメッセージをどう解析していいかよくわからないのですが、これはシステムイメージがすでに書き込み可能になっているということでしょうか?

解決方法は?

Googleが提供するエミュレータをいくつか確認しました。 これらはすべてユーザーバイナリであり、エンジニアバイナリではありません。 adb shell"コマンドで確認することができます。 コマンドラインが "#" で始まっていれば、エンジニアビルドです。コマンドラインが "$"で始まっていれば、エンジニアビルドです。例えば

  • jackpot2lte:/ # => エンジニアビルド
  • jackpot2lte:/ $ => ユーザービルド

エンジニアビルドだけがroot権限を与えることができます。ユーザービルドをエンジニアービルドに変更することはできませんが、「ルート化」することはできます。 以下をご確認ください。 Androidエミュレータでルートアクセスを取得するには? をご覧ください。