ข้อผิดพลาด 'การอนุญาตไม่เพียงพอ' ในคำสั่ง "adb push" ใน 12.04


57

เมื่อฉันพยายามที่จะผลักดันไฟล์ apk ของฉันลงในแท็บเล็ตฉันได้รับข้อผิดพลาดนี้โปรดช่วยฉันด้วย

adb server is out of date.  killing... 
* daemon started successfully * 
error: insufficient permissions for device.

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ


1
คำตอบโดย user84207 ซึ่งได้รับการสนับสนุนโดยการอ้างอิงถึงเอกสารประกอบสำหรับนักพัฒนา Android อย่างเป็นทางการนั้นดีกว่าคำตอบที่ยอมรับโดย Anwar Shah เนื่องจากเราควรหลีกเลี่ยงการใช้ daemons ในฐานะที่เป็นไปได้ การใช้ adb ในฐานะ root ทำให้คอมพิวเตอร์มีความเสี่ยงต่อการถูกโจมตีเพิ่มขึ้น
nealmcb

คำตอบ:


20

ฉันเห็นข้อผิดพลาดเดียวกันนี้บางครั้งบน Ubuntu วิธีหลีกเลี่ยงปัญหาสำหรับการทำงานนี้กำลังเรียกใช้ adb พร้อมกับsudoคำสั่ง ตัวอย่างเช่นหากคุณกำลังกดapp.apksdcard คำสั่งจะเป็น

sudo adb push app.apk /mnt/sdcard

ตรวจสอบให้แน่ใจว่าคุณได้เลือกโหมด "การแก้ไขข้อบกพร่อง USB" ในการตั้งค่าแอปพลิเคชัน (ใน GingerBread) หรือในส่วนการพัฒนา (ใน IceCream Sandwich และสูงกว่า) หาก adb ทำงานอยู่ก่อนอื่นคุณควรฆ่ามันด้วยคำสั่งsudo adb kill-server

หวังว่าจะช่วยได้


ฉันได้รับมัน แต่ก็จะลองใช้วิธีนี้เช่นกัน ... ขอบคุณสำหรับความช่วยเหลือ
Neha Sharad Umachigi

5
"ฉันเข้าใจแล้ว" ... โปรดให้ความอนุเคราะห์แบ่งปันหากคุณพบวิธีแก้ปัญหาเพื่อให้ผู้อื่นได้รับประโยชน์ (ตามที่คุณต้องการเพื่อประโยชน์ของตัวเองเมื่อคุณถามคำถาม) ตัวอย่างเช่นตอนนี้ฉันมีปัญหานี้ แต่ฉันถูกบังคับให้มองที่อื่นแม้ว่ามันจะเป็นปัญหาที่แน่นอนที่คุณอธิบาย
erjoalgo

2
คำตอบนี้มีความเสี่ยงเนื่องจากบั๊กใน adb สามารถใช้งานได้ทั้งคอมพิวเตอร์ คำตอบที่ใช้กฎ udev โดย user84207 ซึ่งได้รับการสนับสนุนโดยการอ้างอิงถึงเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Android อย่างเป็นทางการหลีกเลี่ยงปัญหาดังกล่าว
nealmcb

นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุดและง่ายที่สุดและอย่างน้อยก็ทำงานได้สำหรับปัญหา
อันวาร์

หมายเหตุ: สิ่งนี้ใช้งานได้สำหรับฉันเพราะsudoค้นหารุ่นadbอื่นที่ไม่ใช่ sudo ติดตั้งอยู่ นั่นเป็นสาเหตุที่ใช้งานได้ไม่ใช่เพราะadbตัวมันเองต้องการสิทธิพิเศษมากกว่า
Kevin Cooper

61

ฉันพบปัญหาเดียวกันนี้ การเพิ่มกฎ udev ตามที่ระบุไว้ที่นี่ได้หลอกลวง:

เข้าสู่ระบบในฐานะ root สร้างไฟล์/etc/udev/rules.d/51-android.rulesและเพิ่มบรรทัดเช่นนี้เพื่อให้สิทธิ์แก่ทุกคนในplugdevกลุ่ม:

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

ในตัวอย่างนี้ ID ผู้ขายคือ HTC คุณต้องใช้รหัสผู้ขายสำหรับอุปกรณ์ของคุณซึ่งสามารถรับได้โดยการเรียกใช้lsusbและค้นหาสายเช่น

Bus 002 Device 009: ID 2a47:9e18

ในตัวอย่างนี้รหัสผู้ให้บริการของคุณจะเป็น2a47ดังนั้นคุณจะต้องเปลี่ยนด้วย0bb4 2a47บรรทัดที่ถูกต้องจึงจะอ่าน:

SUBSYSTEM=="usb", ATTR{idVendor}=="2a47", MODE="0666", GROUP="plugdev"

ตอนนี้กำหนดสิทธิ์การอ่านไฟล์, โหลด udev และโหลด adb daemon ใหม่:

sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
adb kill-server
adb start-server

คุณอาจต้องตัดการเชื่อมต่อและเชื่อมต่ออุปกรณ์ของคุณเข้ากับพอร์ต USB อีกครั้ง


9
คุณสามารถรับรหัสผู้จำหน่าย USB ได้โดยคำสั่ง lsusb มันเป็นส่วนแรกของคู่คั่นลำไส้ใหญ่ ตัวอย่างเช่น 18d1: 4e22 จะหมายถึงรหัสผู้ขายคือ 18d1
Peter Lamberg

คุณอาจต้อง "ทริกเกอร์" udev หลังจากเพิ่มไฟล์กฎใหม่ (แม้ว่าฉันไม่แน่ใจ) นี่คือวิธีการ "เรียก" askubuntu.com/questions/82470/...
user29020

2
และ / หรือคุณอาจต้องตัดการเชื่อมต่อและเชื่อมต่ออุปกรณ์อีกครั้ง? แต่คำตอบนี้ใช้ได้ผลสำหรับฉันและดีกว่าการใช้ adb เหมือน root ผู้ใช้ Ubuntu ของคุณต้องเป็นส่วนหนึ่งของplugdevกลุ่มด้วย วิ่งidไปหา
nealmcb

2
repo นี้มีประโยชน์อย่างยิ่งหากคุณต้องทำงานกับอุปกรณ์จำนวนมากgithub.com/M0Rf30/android-udev-rules
zamber

นอกจากนี้ยังมีรายการของรหัสผู้ขายในเอกสาร
Keith

22

คำตอบของ Jorch914 ใน StackOverflowแก้ปัญหานี้ให้ฉัน:

ตกลงดังนั้นในที่สุดฉันก็พบปัญหาเห็นได้ชัดว่าบนอุปกรณ์นี้คุณต้องตั้งค่าให้เชื่อมต่อเป็นกล้องถ่ายรูป (แม้หลังจากเปิดใช้งานการดีบัก usb แล้ว)

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ยังมีการเชื่อมโยงนี้จะอธิบายถึงการตั้งค่าในการประมวลผล


1
ใช่มันเป็นอย่างนั้น! ฉันต้อง "เลือกการกำหนดค่า USB" บน Android N ซึ่งโดยค่าเริ่มต้นคือ "การชาร์จ"
Dan Dascalescu

1
ด้วยเหตุผลใดก็ตามที่ฉันสามารถเสียบพิกเซลของฉันลงในเครื่อง mac และเริ่มทำงานได้ แต่เมื่อฉันย้ายไปยังเวิร์กสเตชัน CentOS dev ฉันต้องทำสิ่งนี้เพื่อให้พร้อมสำหรับการดีบักสิทธิ์ ขอบคุณ
bsautner

2
ทำงานให้ฉัน เคล็ดลับดูเหมือนว่าจะเปลี่ยนจาก "การชาร์จ" เป็นอย่างอื่นทำไม
Bim

11

คำสั่งง่ายๆสองคำนี้แก้ปัญหาให้ฉันได้:

adb kill-server
adb start-server

โปรดทราบว่าแตกต่างจากคำตอบกึ่งมือใหม่แบบของsudoฉันไม่จำเป็นต้อง


1
สิ่งนี้ใช้ได้กับฉัน
Sudip Bhandari

ไม่ได้ทำงานให้กับ Nexus 5X การเชื่อมต่อกับอูบุนตู 16.04 adb shell lsเมื่อฉันพยายามที่จะเรียกใช้
Dan Dascalescu

10

ฉันเพิ่งทำงานผ่านปัญหาเดียวกัน แต่นี่คือวิธีที่ฉันสามารถผ่านไปได้:

  • คุณต้องฆ่าเซิร์ฟเวอร์ adb ที่มีอยู่ด้วยการออกคำสั่งต่อไปนี้: adb kill-server(มันอาจจะผิด แต่ฉันออกด้วยและโดยไม่ต้อง sudo
  • เริ่มต้นเซิร์ฟเวอร์ adb ด้วยสิทธิ์ที่เหมาะสมโดยการออก: sudo adb start-server
  • voila คุณอาจรู้ว่าออกคำสั่งใด ๆ ที่คุณต้องการ

ไม่แน่ใจว่าคุณรู้หรือไม่ แต่มีแพ็คเกจที่มี adb ฉันพูดถึงเรื่องนี้เพราะฉันสังเกตเห็นว่าคุณได้รับการอ้างอิงถึง adb รุ่นเก่า คุณสามารถติดตั้งได้โดยใช้คำสั่งต่อไปนี้ในบรรทัดคำสั่งของคุณ:sudo apt-get install android-tools-adb

ฉันหวังว่านี่จะช่วยได้.


ADB ของเครื่องมือแพลตฟอร์มอาจใหม่กว่า เครื่องมือเหล่านี้ยังมีให้ดาวน์โหลดแยกต่างหากในขณะเดียวกัน
Martin Zeitler

2

วันนี้ฉันพบinsufficient permissions for deviceข้อผิดพลาดแม้ว่าจะadbได้รับการทำงานตามที่คาดไว้เพียงไม่กี่นาทีก่อน ตอนนี้ฉันได้รับ:

$ adb devices
List of devices attached 
????????????    no permissions

$ adb shell
error: insufficient permissions for device

ไม่นานก่อนที่พบข้อผิดพลาดที่ผมได้ปิดการใช้งานที่ผมคิดฉันจะไม่จำเป็นต้องใช้Media device (MTP) MTPอย่างไรก็ตามปรากฏว่าการดีบัก USB หรืออย่างน้อยก็adbต้องมีคำสั่งให้Media device (MTP)เปิดใช้งาน

หากต้องการเปิดใช้งานMedia device (MTP)บน Android 4.4 ให้ไปที่:

Settings
Storage
The "..." menu (in the upper right corner)
USB computer connection
Media device (MTP)

เมื่อMTPปิดใช้งานlsusbจะแสดงสิ่งต่อไปนี้:

Bus 002 Device 071: ID [idVendor1]:[idProduct1] Google Inc.

หลังจากเปิดใช้งานMTPlsusb จะแสดงสิ่งต่อไปนี้:

Bus 002 Device 072: ID [idVendor2]:[idProduct2] [idVendor string]

idVendor และ idProduct มีการเปลี่ยนแปลงโดยขึ้นอยู่กับว่าMTPเปิดใช้งานหรือปิดใช้งานหรือไม่

ฉันไม่ได้เป็นผู้เชี่ยวชาญด้าน Android ดังนั้นจึงเป็นไปได้ว่าพฤติกรรมดังกล่าวเฉพาะกับรุ่นโทรศัพท์โดยเฉพาะของฉัน


0

อาจมาจากเหตุผลอื่น ฉันเพิ่งได้รับข้อผิดพลาดนี้พยายามติดตั้ง apk บนอุปกรณ์:

$ adb install platforms/android/build/outputs/apk/android-armv7-release.apk 
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
error: insufficient permissions for device
- waiting for device -

มันเกิดขึ้นเพราะอุปกรณ์ไม่พร้อมในโหมดที่ถูกต้อง อุปกรณ์กำลังแบ่งปันการเชื่อมต่อ 4G ผ่าน USB

มันสามารถเป็นที่รู้จักเช่นนั้น:

$ adb devices -l
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

33332EF19F3D00EC       no permissions usb:1-1.2

ดังนั้นจึงเพียงพอที่จะปิดใช้งานการแบ่งปันการเชื่อมต่อบนโทรศัพท์และเริ่มใหม่อีกครั้ง

โดยทั่วไปตรวจสอบให้แน่ใจว่ามีผลลัพธ์ต่อไปนี้ผ่านadb deviceคำสั่งก่อนที่จะพยายามส่งไฟล์บนอุปกรณ์

$ adb devices -l
List of devices attached
33332EF19F3D00EC       device usb:1-1.2

ในกรณีเหล่านี้ไม่จำเป็นต้องฆ่าหรือรีสตาร์ทเซิร์ฟเวอร์ adb

อาจเป็นสถานการณ์เดียวกันหากคุณเชื่อมต่ออุปกรณ์เพื่อถ่ายโอนข้อมูลผ่าน USB


0

ฉันมีปัญหาเดียวกันและได้รับการอนุญาตที่ไม่เพียงพอ สิ่งที่ฉันทำคือเพิกถอนสิทธิ์ USB สำหรับแล็ปท็อปของฉัน จากนั้นหยุดและเริ่มการดีบัก USB เสียบกลับเข้าไปในแล็ปท็อปและได้รับหน่วยงานแก้จุดบกพร่อง USB


1
คุณช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการนี้ได้ไหม? ทีละขั้นตอนจะเหมาะดังนั้น OP สามารถทำตามตัวอย่างของคุณ :)
ThatGuy

0

ฉันประสบปัญหาเดียวกันและฉันได้แก้ไขปัญหานี้โดยการเพิ่มเส้นทางของ your_android_sdk_path ให้กับตัวแปรสภาพแวดล้อมเช่น

sudo export $PATH:/your_android_sdk_path/platform-tools/adb

ของความปรารถนาของคุณว่าคุณต้องการเพิ่มนี้ไปยังบัญชีหรือระบบของคุณกว้างโดยการแก้ไขไฟล์เหล่านี้ ~/.bashrcไฟล์หรือ~/.profile หรือ /etc/profile, /etc/bash.bashrc, or /etc/environmentถ้าหากต้องการที่จะเพิ่มการเข้าถึงกว้างระบบ

จากนั้นสร้างลิงก์ของถังขยะ

sudo ln -s /your_android_sdk_path/platform-tools/adb /bin/adb

หากคุณใช้อุปกรณ์ adb หรือคำสั่งใด ๆ ก่อนอื่นให้ฆ่าเซิร์ฟเวอร์เช่น

adb kill-server

จากนั้นเริ่มเซิร์ฟเวอร์เช่น

adb start-server
adb devices

ตอนนี้คุณสามารถเห็นอุปกรณ์ของคุณอยู่ในรายการอย่างถูกต้องโดยไม่มีปัญหา


0

คำตอบของปัญหานี้อยู่ที่นี่: https://github.com/snowdream/51-android

ในฐานะนักพัฒนา Android ฉันขอแนะนำให้คุณอย่าใช้ "sudo" เพื่อบังคับให้ใช้ adb ในทุกที่ ไม่ใช่สิ่งที่เราควรทำ กฎนโยบายและข้อ จำกัด มีไว้เพื่อความปลอดภัยของเราเอง


0

ความเป็นไปได้อื่น: การปล่อยสัญญาณผ่าน USB ยังขัดแย้งกับ adb การปิดใช้งานจะช่วยแก้ปัญหาให้ฉันได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.