2016-09-11 6 views
17

Если вы прикрепляете Android-устройство к ПК, вы можете просматривать файлы и директории. Этот каталог можно получить с помощью Environment.getExternalStorage(). Вы можете использовать его из своего приложения и создавать доступные файлы и директории. Он работает нормально.Как скопировать файл с помощью adb в каталог Android, доступный с ПК

На моих устройствах этот путь выглядит как /storage/emulated/0, и если я попробую adb push в этот каталог, я получу отказ в доступе. Можно ли копировать файлы с помощью adb в ту же папку, что и проводник Windows?

D:\...\tools>adb push ACCOUNTS.DB /storage/emulated/0 
failed to copy 'ACCOUNTS.DB' to '/storage/emulated/0': Permission denied 
58969 KB/s (606505 bytes in 0.010s) 

Я осуществляет автоматизированный импорт/экспорт и я хочу файлы, которые будут доступны без adb shell в случае, если что-нибудь пойдет не так.

В настоящее время используется переменная $EXTERNAL_STORAGE как обходной путь, он работает как для adb, так и для приложения.

Устройство: Asus Fonepad 7, Android 5.0, пробовал Genymotion Custom Tablet 6.0 - работает.

+0

'adb push .../storage/emulated/0' отлично подходит для меня, тестируя Nexus 5X под управлением Android 6.0.1. – CommonsWare

+0

это проблема, мне нужно, чтобы она работала * надежно *, но она терпит неудачу на моем собственном устройстве, работает с эмулятором. – kemsky

ответ

4

Попробуйте использовать /sdcard/. Хотя это настоятельно не рекомендуется делать в код. Это, кажется, единственный способ с ADB:

$ adb push somefile /storage/emulated/0/somefile 
[100%] /storage/emulated/0/somefile 
adb: error: failed to copy 'somefile' to '/storage/emulated/0/somefile': Read-only file system 

$ adb push somefile /sdcard/somefile 
[100%] /sdcard/somefile 

Кстати, на моем устройстве они не имеют то же значение: Environment.getExternalStorage() точек на /storage/emulated/0/ в то время как /sdcard точек на /storage/emulated/legacy.

+0

Файл был скопирован успешно (и я вижу его в нужном месте с ES Explorer), но он не отображается с ПК. Пробовал переподключиться, ожидая ... возможно, мне нужно как-то вызвать индексирование. – kemsky

+1

Ну, похоже, трансляция «MEDIA_SCANNER_SCAN_FILE» может ее исправить. – kemsky

2

Это довольно просто, внутреннее хранилище недоступно на ненагруженных устройствах. Так как это было упомянуто в bwt answer вам просто нужно нажать ваши данные в SDCard:

adb push somefile /sdcard/somefile 

С извлечения файлов из вашей файловой системы вы также будете иметь несколько проблем. Но в случае вытащить базу данных из приложения отладки - вам просто нужно будет изменить разрешение файла через chmod. Здесь у вас есть полезная ссылка - XDA guys about adb