Cihazımı Linux'ta ADB tarafından nasıl tespit edebilirim?


18

Yeni parlak Wileyfox Swift'imi aldım - ve kullanmaya başlamadan önce oem unlockve köklenmek istiyorum (genellikle yeni cihazlarla yaptığım gibi) Sorun, cihazda etkin olmasına rağmen ve ilgili bir hat /etc/udev/rules.d/51-android.rulesvar , cihaz tarafından görülmez adb devices.

Bu sitenin etrafına dağılmış birkaç cevap olduğunu biliyorum, ancak onları bulmak zor, sadece belirli bir cihazı kapsamak veya sonunda ihtiyacım olan tüm adımları kapsamamak. Bunu kanonik, cihazdan bağımsız bir soru için bir şans olarak görüyorum ve aşağıda ayrıntılı bir cevap verdim:

Android cihazımı adbLinux'ta nasıl görebilir ve kullanabilirim ?


Ben her zaman eleştirmene açıkım - ama açıklamasız bir aşağı oyu yorumlamak zor. Peki aşağıya bakan soru üzerinde neyin iyileştirilmesi gerektiğini açıklar mı? Mod güçlerimi ceza için kötüye kullanmamaya söz veriyorum :)
Izzy

3
Sanırım seçmen soruyu kendi kendine cevaplamak için gönderdiğini fark etmedi (cevapta seni fark etmemiş olmalı). Seçicide soruya cevap verme konusunda herhangi bir ipucu olmadığından, seçmene ikinci paragraftan son paragrafa itiraz etmiş olabilir (sıradan bir kullanıcı ve soruları bağlamında okunduğunda tembellik gösterir). Şimdilik başka bir sebep düşünemiyorum.
Firelord

1
@Firelord kulağa ikna edici geliyor (ek başarısız adımları önlemek için soruyu biraz düzenledi). Ama sonra, bu kullanıcının cevabı iptal etmesi gerekirdi. Yoksa orada bir şey mi kaçırdım? ;)
Izzy

Yanıtlar:


24

Cihazda USB hata ayıklamayı etkinleştir

Bu, Ayarlar ›Geliştirme bölümünde yapılır . Ayarlar menünüzde bu giriş yoksa, Ayarlar ›Hakkında bölümüne gidin ," Yapı numarası "na gidin ve cihazınız sizi geliştirici olduğunuzu tebrik edene kadar maymun gibi çekiçleyin. Ayarlar menüsünün ana sayfasına geri dönün ve en alttaki "Geliştirme" (veya "Geliştiriciler") ayarlarını şimdi görmelisiniz. Buraya girin ve USB Hata Ayıklamayı etkinleştirin .

Cihazı tanımlayın

İlk önce cihazın USB veriyolunda nasıl tanımlandığını bilmemiz gerekir. Bunun için Android cihazı bağlı DEĞİL durumdayken, bir kabuk alın ve komutu çalıştırın lsusb. Ardından cihazı bağlayın ve komutu tekrar çalıştırın. Yeni satırı bulun. For Wileyfox Swift bu bir "isimsiz cihazı" dir:

Bus 004 Device 003: ID 2970:2282

ADB için kurallar oluşturma

Şimdi yukarıdaki satırın sonunda sayıları gerekir: 2970:2282. Bunlar satıcıyı (2970) ve cihazın kendisini (2282) belirtir. Bu ayrıntılara sahip olarak , dosyayı düzenlemek (veya henüz yoksa, oluşturmak) için Linux makinemizde bir kök kabuğa ihtiyacımız var /etc/udev/rules.d/51-android.rules. Oraya, cihazınız için bir satır ekleyin. Aşağıdaki örnek çizgi Wileyfox Swift'in nasıl göründüğünü göstermektedir : ¹

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

Farklı bir cihazınız varsa, satıcıyı ve ürün kimliklerini çalışırken yukarıda bulduğunuzla değiştirin lsusb. Hattın kısa bir açıklaması:

  • SUBSYSTEMS=="usb": açıkçası bu kural sadece USB içindir;)
  • ATTRS{idVendor}=="2970": bu kuralın bulunduğu cihazın satıcı kimliği
  • ATTRS{idProduct}=="2282": cihaz kimliği
  • MODE="0666": aygıt düğümünün alacağı izinler. 0666sisteminizdeki her kullanıcıya okuma ve yazma izni vererek oldukça gevşek, bu yüzden endişeleniyorsanız, bunu bir ile değiştirmeyi deneyebilirsiniz 0660(yalnızca sahip ve grup okuma-yazma vererek başkalarına her şeyi reddedin).
  • GROUP="androiddev": aygıt düğümünün hangi gruba ait olması gerektiği. Bu, kullanıcıların cihazla çalışmak istediği bir grup olmalıdır.
  • SYMLINK+="android%n": sadece düğüme güzel bir isim vermek için, daha kolay bulabilirsiniz /dev(benim durumumda, daha sonra orada ortaya çıktı /dev/android5)

Girilen kural /etc/udev/rules.d/51-android.rules, bundan udevfaydalanmayı söylemeliyiz . En güvenli yol (yeniden başlatmanın yanında;) udevhizmeti yeniden başlatmaktır . Linux dağıtımınıza bağlı olarak, bu service udev restartveya yoluyla yapılabilir /etc/init.d/udev restart.

Bunu yap, kök kabuğunu bırak. Android cihazınızın bağlantısını kesin ve yeniden bağlayın, adb devicestekrar deneyin . Çoğu cihaz şimdi ortaya çıktı, ancak Wileyfox Swift değil - ki bazı ekstra kucaklamalar istiyor. Bu durumda, dosyayı açın (veya yoksa oluşturun) ve üzerine ~/.android/adb_usb.inibulduğunuz satıcıyı adlandırarak tek bir satır ekleyin lsusb; için Swift olurdu 0x2970(yupp, burada bunu öneki gerekebilir 0xbir onaltılık sayı dışarı noktasına). Sonra ADB sunucuyu yeniden başlatın: adb kill-server && adb start-server. Cihazın bağlantısını kesin ve tekrar bağlayın. Şimdi adb devicesgörmeliyiz.

Cihazı bağlama

Sana adb devicesböyle bir şey söylediğini fark etmiş olabilirsin 0123456789ABCDEF unauthorized. Sorun yok ve (aygıtlarınızın) güvenliği için: aygıta erişebilmek için önce bilgisayarınız yetkilendirilmelidir. Yani adb shellşimdi sorun - error: device unauthorized. Please check the confirmation dialog on your device.Bu tavsiyeyi takip et (isteğe bağlı olarak bilgisayarınızı kalıcı olarak yetkilendirmek için onay kutusunu işaretleyin) ile bırakılacak ve işiniz bitti: Artık cihazınıza erişmek için kullanabilirsiniz .


Güncellemeler:

Later Daha sonraki Linux sürümlerinde, UDEV kuralları sözdiziminin biraz değiştiğine dikkat edin, örneğin jcomeau_ictx yorumunda işaret etti. Yukarıda bulduğumuz değerler için:

SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"

İki farklılıkları: şimdi var SUBSYSTEM(çoğul) ve grup değiştiğini androiddeviçin plugdev(ikincisi yapar ve genellikle ilk kullanıcıya en azından, yeni atanan sistemlerde eski yok).

Ayrıca, vendorID değerini ~/.android/adb_usb.ini(satır başına bir kimlik, onaltılık gösterimde) eklemeniz gerekebilir :

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970

1
udev kuralının biçimi Jessie sistemimde farklıydı: jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/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. 0x0e8d Çalıştırmak android update adbve belirttiğiniz gibi manuel olarak girmek için tavsiyeleri görmezden gelmek zorunda kaldım .
jcomeau_ictx

@jcomeau_ictx geri bildiriminiz için teşekkür ederiz! Yorumunuzdan görebildiğim kadarıyla, yalnızca farklı bir kullanıcı grubu kullanıyor (plugdev yerine androiddev) . Doğrulanmadı, ancak burada önemli olanın, kullanıcının (USB'yi kullanmak istediğiniz) bir grubunun da olduğu olduğunu söyleyebilirim.
Izzy

1
Ayrıca SUBSYSTEMyerine SUBSYSTEMS, ATTRyerine ATTRS, virgül sonra MODE="0666" emin tüm bu değişiklikler gerekli olsaydı, ama bu en çalıştı Ne.
jcomeau_ictx

Oh - teşekkürler, o küçükleri kaçırdım, @jcomeau_ictx - iyi bir nokta!
Izzy

Linux Sigara Savvy millet için sudo wget -O /etc/udev/rules.d/51-android.rulesgelen burada benim Xiaomi Mi A1 benim için çalışıyor. Tabii ki öğrenmek daha iyi ama tembel olmak güzel :)
beeshyams

0

Daha yeni bir Linux dağıtımından birkaç yorum. Nexus 5X veya Nokia 7.1 (Android One) telefona sahip Fedora 29.

Önceden bağlanmışsa, önce telefonun bağlantısını kesin.

  1. ADB ( sudo dnf install android-tools) sağlayacak android araçlarını yükleyin
  2. Udev kurallarını kopyala ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d)
  3. Udev kurallarını yeniden yükle ( sudo udevadm control --reload-rules)
  4. Emin olmak için ADB'yi yeniden başlatın ( sudo systemctl restart adb)

Şimdi telefonu bağlayın ve adb deviceskomut satırından çalıştırın . Muhtemelen "izinsiz" listelenen bir cihaz göreceksiniz. Bu iyi.
EĞER bu listede yoksa, sen Udev kuralları dosyasına cihaz eklemek zorunda kalacak, ama benim için, test cihazları sadece önceden tanımlanmış kurallar ile çalıştı.

Çalıştırmak adb shell ve umarım telefonda bilgisayara güvenmek isteyip istemediğinizi soran bir güvenlik bildirimi alırsınız, evet'i seçin.
EĞER , emin telefonda "Aktarım dosyaları" modunda değil, "Şarj bu cihaza" için USB bağlantı noktasını ayarlamak olduğunu yapmak gerekir: yerine bilgisayarınız "cihaz için yetersiz izinler hatası" diyor. Android 8.1'de bu, "Bağlı cihazlar"> "USB" altındaki ayarlarda bulunur.

Bugün çalıştığınız her şeye sahip olsanız bile, yarın bunun belirgin bir sebep olmadan aniden kırılabileceğini fark ettim. Böyle bir durumda, önce cihazdaki şarj moduna geri dönmüş olabilecek USB bağlantı noktası ayarını kontrol edin ve bu başarısız olursa, cihazdaki USB hata ayıklama yetkilerini iptal edin (Geliştirici seçenekleri altındaki ayarlarda) ve umarım pop çalıştırdığın zaman tekrar adb shell.

Bununla Android Studio'yu çalıştırabilir ve bağlı cihazda çalışabilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.