Lỗi 'không đủ quyền' trên lệnh `adb push` vào ngày 12.04


57

Khi tôi cố gắng đẩy tập tin apk của mình vào máy tính bảng, tôi đã gặp lỗi này, xin hãy giúp tôi.

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

Xin được cảm ơn trước về sự giúp đỡ.


1
Câu trả lời của user84207, được hỗ trợ bởi tham chiếu đến tài liệu dành cho nhà phát triển Android chính thức, tốt hơn nhiều so với câu trả lời được chấp nhận bởi Anwar Shah, vì chúng ta nên tránh chạy daemon như root bất cứ khi nào có thể. Chạy adb với quyền root khiến máy tính dễ bị tấn công hơn.
nealmcb 2/2/2015

Câu trả lời:


20

Đôi khi tôi đã thấy lỗi tương tự trên Ubuntu. Một cách giải quyết khác cho việc này là chạy adb với sudolệnh. Ví dụ: nếu bạn đang đẩy app.apksdcard, lệnh sẽ là

sudo adb push app.apk /mnt/sdcard

Ngoài ra, hãy chắc chắn rằng bạn đã chọn chế độ "gỡ lỗi USB" trong cài đặt Ứng dụng (trong GingerBread) hoặc trong phần Phát triển (trong IceCream Sandwich trở lên). Nếu adb đã chạy, trước tiên bạn nên giết nó bằng lệnhsudo adb kill-server

Hy vọng điều này sẽ giúp.


Tôi đã nhận nó nhưng vẫn sẽ thử phương pháp này ... cảm ơn vì sự giúp đỡ
Neha Sharad Umachigi

5
"Tôi hiểu rồi" ... Xin hãy lịch sự chia sẻ nếu bạn tìm ra giải pháp, để người khác có thể hưởng lợi (khi bạn tìm cách mang lại lợi ích cho mình khi bạn đặt câu hỏi). Ví dụ, bây giờ tôi có vấn đề này, nhưng tôi buộc phải tìm ở nơi khác mặc dù đó là cùng một vấn đề chính xác mà bạn mô tả.
erjoalgo

2
Câu trả lời này là rủi ro vì các lỗi trong adb có thể chiếm toàn bộ máy tính. Câu trả lời sử dụng quy tắc udev của user84207, được hỗ trợ bởi tham chiếu đến tài liệu chính thức dành cho nhà phát triển Android, tránh vấn đề đó.
nealmcb 2/2/2015

Đây là cách đơn giản nhất và dễ nhất và ít nhất là cách giải quyết cho vấn đề.
Anwar

Lưu ý: Điều này làm việc cho tôi vì sudotìm thấy một phiên bản cài đặt khác adbvới không phải sudo. Đó là lý do tại sao điều này hoạt động, không phải vì adbbản thân nó đòi hỏi nhiều đặc quyền hơn.
Kevin Cooper

61

Tôi gặp vấn đề tương tự. Thêm một quy tắc udev như được chỉ ra ở đây đã thực hiện thủ thuật:

Đăng nhập bằng root, tạo một tệp /etc/udev/rules.d/51-android.rulesvà thêm một dòng như thế này để cấp quyền cho bất kỳ ai trong plugdevnhóm:

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

Trong ví dụ này, ID nhà cung cấp là HTC. Bạn cần sử dụng ID nhà cung cấp cho thiết bị của mình, có thể lấy được bằng cách chạy lsusbvà tìm kiếm một dòng như

Bus 002 Device 009: ID 2a47:9e18

Trong ví dụ này ID nhà cung cấp của bạn sẽ là 2a47, vì vậy bạn sẽ phải thay thế 0bb4bằng 2a47. Do đó, dòng chính xác sẽ đọc:

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

Bây giờ gán quyền đọc trên các tệp, tải lại udev và tải lại daemon adb:

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

Bạn có thể phải ngắt kết nối và kết nối lại thiết bị của mình với cổng USB.


9
Bạn có thể lấy id nhà cung cấp USB bằng lệnh lsusb. Đây là phần đầu tiên của cặp tách đại tràng. Ví dụ: 18d1: 4e22 có nghĩa là id nhà cung cấp là 18d1.
Peter Lamberg

Bạn có thể cần "kích hoạt" udev sau khi thêm tệp quy tắc mới (mặc dù tôi không chắc chắn). Đây là một cách để "kích hoạt" Askubfox.com/questions/82470/ .
user29020

2
và / hoặc bạn có thể cần ngắt kết nối và kết nối lại thiết bị? Nhưng câu trả lời này đã làm việc cho tôi, và tốt hơn nhiều so với việc chạy adb với quyền root. Người dùng Ubuntu của bạn cũng phải là một phần của plugdevnhóm. Chạy idđi tìm hiểu.
nealmcb 2/2/2015

2
Repo này cực kỳ hữu ích nếu bạn phải làm việc với nhiều thiết bị github.com/M0Rf30/android-udev-rules
zamber


22

Câu trả lời của Jorch914 trên StackOverflow đã giải quyết vấn đề này cho tôi:

Ok Vì vậy, cuối cùng tôi đã tìm thấy vấn đề, rõ ràng trên thiết bị này bạn phải đặt để kết nối dưới dạng máy ảnh (ngay cả khi đã gỡ lỗi usb)

nhập mô tả hình ảnh ở đây

Ngoài ra liên kết này mô tả quá trình thiết lập


1
Vâng, đây là nó! Tôi đã phải "Chọn cấu hình USB" trên Android N, theo mặc định được đặt thành "Sạc".
Dan Dascalescu

1
vì bất kỳ lý do gì, tôi luôn có thể cắm pixel của mình vào máy mac và bắt đầu làm việc nhưng khi tôi chuyển sang máy trạm phát triển CentOS, tôi phải làm điều này để nhắc nó cho phép gỡ lỗi. Cảm ơn
bsautner

2
Đã làm cho tôi. Thủ thuật dường như là thay đổi nó từ "Sạc" sang thứ khác, tại sao.
Bim


10

Tôi chỉ chạy qua cùng một vấn đề nhưng đây là cách tôi có thể vượt qua nó:

  • bạn phải giết máy chủ adb hiện tại bằng cách ban hành lệnh sau: adb kill-server(có thể sai, nhưng tôi đã ban hành nó với AND mà không có sudo
  • khởi động máy chủ adb với quyền thích hợp bằng cách phát hành: sudo adb start-server
  • voila. bạn có thể biết vấn đề bất kỳ lệnh nào bạn cần

Không chắc chắn nếu bạn biết, nhưng có một gói bao gồm adb. Tôi đề cập đến điều này bởi vì tôi nhận thấy rằng bạn đang nhận được một tài liệu tham khảo cho một phiên bản cũ hơn của adb. Bạn có thể cài đặt bằng cách phát hành các dòng sau trong dòng lệnh của mình:sudo apt-get install android-tools-adb

Tôi hi vọng cái này giúp được.


ADB của các công cụ nền tảng có thể mới hơn; trong khi đó, các công cụ này thậm chí còn có sẵn dưới dạng tải xuống riêng biệt.
Martin Zeitler

2

Hôm nay tôi gặp phải insufficient permissions for devicelỗi, mặc dù adbđã làm việc như mong đợi chỉ vài phút trước. Bây giờ tôi nhận được:

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

$ adb shell
error: insufficient permissions for device

Ngay trước khi gặp lỗi, tôi đã vô hiệu hóa Media device (MTP), vì tôi nghĩ rằng tôi sẽ không cần sử dụng MTP. Tuy nhiên, có vẻ như gỡ lỗi USB, hoặc ít nhất là một số adblệnh, yêu cầu phải Media device (MTP)được bật.

Để bật Media device (MTP)trên Android 4.4, hãy truy cập:

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

Khi MTPbị vô hiệu hóa, lsusbhiển thị như sau:

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

Sau khi kích hoạt MTP, lsusb hiển thị như sau:

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

IdVendor và idSản phẩm thay đổi, dựa trên việc MTPbật hay tắt.

Tôi không phải là chuyên gia về Android, vì vậy có thể hành vi trên là dành riêng cho kiểu điện thoại cụ thể của tôi.


0

Nó có thể là từ một lý do khác. Tôi chỉ gặp lỗi này khi cố gắng cài đặt apk trên thiết bị:

$ 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 -

Nó xảy ra vì thiết bị chưa sẵn sàng ở chế độ chính xác. Thiết bị này đã chia sẻ kết nối 4G của nó qua USB.

Nó có thể được biết như thế:

$ 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

Vậy là đủ để vô hiệu hóa việc chia sẻ liên kết trên điện thoại và bắt đầu lại.

Nói chung, đảm bảo có kết quả sau thông qua adb devicelệnh trước khi thử đẩy tệp trên thiết bị

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

Trong những trường hợp này, không cần phải giết hoặc khởi động lại máy chủ adb.

Có lẽ sẽ xảy ra trường hợp tương tự nếu bạn gắn thiết bị để truyền dữ liệu qua USB


0

Tôi đã có cùng một vấn đề và nhận được rằng không đủ quyền. Những gì tôi đã làm là thu hồi các nhà chức trách USB cho máy tính xách tay của tôi. Sau đó dừng lại và bắt đầu gỡ lỗi USB. Cắm lại vào máy tính xách tay và cấp cho cơ quan gỡ lỗi usb.


1
Bạn có thể vui lòng cung cấp thêm thông tin về quá trình này? Từng bước sẽ là lý tưởng, vì vậy OP có thể làm theo ví dụ của bạn. :)
ThatGuy

0

Tôi đã đối mặt với cùng một vấn đề và tôi đã giải quyết vấn đề này bằng cách thêm đường dẫn của your_android_sdk_path vào biến môi trường như

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

Bạn muốn thêm điều này vào tài khoản hoặc hệ thống của mình bằng cách chỉnh sửa các tệp ~/.bashrctệp này ~/.profile hoặc /etc/profile, /etc/bash.bashrc, or /etc/environmentnếu bạn muốn thêm vào quyền truy cập trên toàn hệ thống.

và sau đó tạo liên kết của nó trong bin

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

nếu bạn đã sử dụng thiết bị adb hoặc bất kỳ lệnh nào thì trước tiên hãy tắt máy chủ như

adb kill-server

sau đó khởi động máy chủ như thế nào

adb start-server
adb devices

bây giờ bạn có thể thấy các thiết bị của mình được liệt kê đúng mà không có vấn đề gì


0

Câu trả lời cho vấn đề này có tại đây: https://github.com/snowdream/51-android

Là một nhà phát triển Android, tôi khuyên bạn KHÔNG nên sử dụng "sudo" để buộc sử dụng adb ở bất cứ đâu. Đó không phải là những gì chúng ta nên làm. Các quy tắc, chính sách và hạn chế là có cho sự an toàn của chúng ta.


0

Một khả năng khác: Tether USB cũng xung đột với adb. Vô hiệu hóa nó giải quyết vấn đề cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.