AndroidデバイスのADBアクセスを構成する方法
Ubuntu 12.10を使用しており、Android SDKをインストールし、ユーザー.bashrc
にパスを設定すると動作します。
問題は、私の電話は許可のためにルートでadbを実行する必要があるが、sudoでadbを実行すると次のエラーが発生することです:
Sudo:adb:コマンドが見つかりません
Sudo -E adb start-server
を単純に使用しようとしましたが、機能しません。エクスポートパスの行を/root/.bashrc
に追加し、(それが役に立たなかったことに気づいた後)/etc/bash.bashrc
に追加しようとしました。
Arch Linuxで設定できたことを覚えていますが、私の問題は、Ubuntuのルートアカウントに関係していると思います。
私が理解していないことは次のとおりです:
これらは機能しません:
martin@alyx:~$ Sudo adb devices
Sudo: adb: command not found
これは(フルパスの入力):
martin@alyx:~$ Sudo /opt/Android-sdk-linux/platform-tools/adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
CM7-Blade device
これは機能しません(Sudoで-Eを使用):
martin@alyx:~$ Sudo -E adb devices
Sudo: adb: command not found
これは(ルートとして)動作します:
martin@alyx:~$ Sudo su
root@alyx:/home/martin# adb devices
List of devices attached
CM7-Blade device
私は今完全に混乱しているので、Sudoのパスを設定する方法や、他の方法で問題を解決できる方法を明確に理解していただければ幸いです。
(そして、adbをrootとして実行すべきでないと言ってはいけません。)
前もって感謝します!
編集:ルート権限を要求することにより、それが必要になることを意味します。
$ adb devices
List of devices attached
???????????? no permissions
スーパーユーザーとしては発生しません。誤解して申し訳ありません。
最初に以下をお読みください。 Android ADBの設定方法
USBアクセスの構成
まず、ADBを適切に設定している場合、ADBを実行するのにルート権限は必要ありません。 AOSPサイトでは、Pixel/Nexusデバイスの SBアクセスの設定 の例を提供しています。 Nexus以外のデバイスには次のスキームを使用できます。
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"
ベンダーと製品IDは、lsusb
を使用してデバイスを検索することで取得できます。 (注:デバイスは実際にはGalaxy Nexusです。)
$ lsusb | grep -i samsung
Bus 002 Device 103: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II]
したがって、私の/etc/udev/rules.d/51-Android.rules
udevルールは次のようになります。
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="username"
必要に応じて、fastbootのような他の電話の状態に対してこれを繰り返すことができます。変更を有効にするには、udevをリロード(Sudo udevadm control --reload
)するか、リブートします(推奨)。
プログラムを利用可能にする
パス変数の変更 の代わりに、~/bin/
(ユーザーのみ)または/usr/local/bin/
(システム全体)のいずれかで実行可能ファイルにシンボリックリンクを追加することをお勧めします。
mkdir ~/bin/
ln -s /opt/Android-sdk-linux/platform-tools/adb ~/bin/
中国のタブレット(奇妙なメーカー)でも同じ問題にぶつかりました。
/etc/udev/rules.d/51-Android.rules
ファイルに加えて、~/.Android/adb_usb.ini
も変更する必要がありました。
ターミナルで以下を実行します。
Sudo gedit ~/.Android/adb_usb.ini
adb_usb.ini
ファイルは次のようになります。
# Android 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'Android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
# ie 0x2207
0x<!!!Your Vendor ID here!!!>
デバイスを切断および再接続し、端末で以下のコマンドを実行する必要もありました。
adb kill-server
そしてその後
adb start-server
そして、デバイスが検出されました。
私の場合、MTPモードを私のAndroid Studio(v1.5.1)で検出する必要があるほとんどのデバイスとは異なり、MTPモードの代わりに一部のスマートフォンをPTPモードに設定する必要がありました。
したがって、最初にMTPモードとPTPモードの両方を試してから、より複雑なUnixのADP構成に時間を費やし、それらに損害を与える必要がないようにしてください。
新しいデバイスではDevオプションで直接選択できますが、古いデバイスではステータスバーのUSB接続オプションにあります。
しかし、私にとっても、Z5以降の最新のSony Xperiaデバイスは、USBモードに関係なく動作しません。たぶん私のAndroid Studioが古いか、Unix ADP Configurationsで掘る必要があります。
次の手順を実行します:
Android varsを設定
最初に家に行って押します Ctrl + H
.bashrc
ファイルを探す隠しファイルを表示し、テキストエディターでそれを開き、ファイルの最後に以下の行を配置します。export Android_HOME=/myPathSdk/Android-sdk-linux export PATH=$PATH:$Android_HOME/tools:$Android_HOME/platform-tools
再起動
デバイスを使用してデバッグする
接続を聞きます:
adb -a
Androidデバイスを接続して認証します。
cordova run Android --device
受け入れられた答えは物事を成し遂げるのに役立ちましたが、私はまだ混乱していました:
martin@alyx:~$ Sudo adb devices
Sudo: adb: command not found
そして特に
martin@alyx:~$ Sudo -E adb devices
Sudo: adb: command not found
Sudo --help
によると:
-E, --preserve-env preserve user environment when running command
多くのLinuxディストリビューション(DebianおよびUbuntuを含む)では、secure_path
およびenv_reset
オプションがデフォルトでオンになっていることがわかります。これにより、PATH
変数がリセットされ、secure_path
。 visudoを使用して、/etc/sudoers
ファイルで変更できます。
または、次を実行できます。
Sudo env PATH=$PATH adb devices
SBアクセスの設定
推奨されるアプローチは、/etc/udev/rules.d/51-Android.rules
にファイルを作成することです。
ターミナルに入力してください:
wget -S -O - http://source.Android.com/source/51-Android.txt | sed "s/<username>/$USER/" | Sudo tee >/dev/null /etc/udev/rules.d/51-Android.rules; Sudo udevadm control --reload-rules
これらの新しいルールは、次にデバイスを接続したときに有効になります。したがって、デバイスを取り外してコンピューターに接続し直す必要がある場合があります。