- Почему при использовании adb мне отказывают в доступе к папке данных?
- 13 ответов
- Android 10, «Permission denied» in a SD card #5320
- Comments
- Gnakkk commented May 20, 2020
- kcubeterm commented May 20, 2020 •
- RalfWerner commented May 20, 2020
- Gnakkk commented May 20, 2020
- RalfWerner commented May 20, 2020 •
- xeffyr commented May 20, 2020
- Gnakkk commented May 21, 2020
- RalfWerner commented May 21, 2020 •
- Zheka’s blog
- Sunday, February 16, 2014
- Доступ к ресурсам Android приложения
- run-as
- backup
- Android runtime permissions. Почему, зачем и как
- Общая информация
- Взаимодействие с пользователем
Почему при использовании adb мне отказывают в доступе к папке данных?
я подключился к моему живому устройству с помощью adb и следующих команд:
Я был удивлен, увидев, что мне отказано в доступе. Почему я не могу просматривать каталоги с помощью командной строки, как это?
Как получить доступ root на моем телефоне?
13 ответов
есть две вещи, чтобы помнить, если вы хотите просмотреть все на вашем устройстве.
- вам нужно иметь телефон с корневым доступом для того, чтобы просматривать папку данных на телефоне Android. Это означает, что у вас есть устройство разработчика (ADP1 или Иона из Google I / O) или вы нашли способ «укоренить» свой телефон каким-то другим способом.
- вам нужно запустить ADB в корневом режиме, сделайте это, выполнив: adb root
начиная с уровня API 8 (Android 2.2), для отладочного приложения (тот, который был построен Android Studio все время, если сборка выпуска не была запрошена), вы можете использовать оболочку run-as команда для запуска команды или исполняемого файла в качестве конкретного пользователя / приложения или просто переключиться на UID вашего приложения, чтобы вы могли получить доступ к его данные.
список содержимого каталога yourapp:
переключиться на UID com.yourapp и запустите все дальнейшие команды, используя этот uid (пока вы не вызовете exit ):
Примечание 1: есть известная проблема С некоторыми телефонами HTC Desire. Из-за нестандартного владельца/разрешений , run-as команда не запускается на этих телефонах.
примечание 2.: как указано в комментариях @Avio: run-as имеет проблемы также с телефонами Samsung Galaxy S работает В CyanogenMod любой версии (от 7 до 10,1), потому что на этой платформе /data/data является символической ссылкой на /datadata . Один из способов решить проблему-заменить символическую ссылку на фактический каталог (к сожалению, для этого обычно Требуется root-доступ).
прежде чем мы начнем, у вас есть корни телефон? если нет, я настоятельно рекомендую вам сделать прыжок. 99% учебников, которые помогут вам сделать это, требуют, чтобы у вас был корневой телефон (я знаю, что b/c я потратил около часа на поиск способа сделать это без корневого телефона.. ничего не нашел..) также, если вы думаете об этом, ваш iPhone должен быть привязанным к этой же задаче. Так что это вполне разумно. Подробнее о укоренение в конце ответ.
из командной строки введите:
это приведет вас к вашей линии Android shell comand (вы должны увидеть что-то вроде этого: shell@android:/ $ сейчас типа:
это должно привести вас непосредственно к каталогу данных com.domain.yourapp :
если это не так (т. е. если вы получаете ошибку), то у вас, вероятно, нет корневого телефона, или вы не использовали свои привилегии пользователя root. Чтобы использовать права пользователя root, введите su в командной строке adb и посмотреть, что произойдет, если вы получите ошибку, то вы телефон не коренится. Если это не так, сначала укорените его, затем продолжите эти инструкции.
оттуда вы можете ввести ls и вы увидите все каталоги, включая dbs:
после этого вы можете использовать sqlite3 для просмотра dbase.. если вы не установили его (вы можете узнать это, введя sqlite3 если вам command not found тогда вам придется установить его. К установите sqlite, следуйте инструкциям здесь.
о укоренения: если вы никогда не укореняли свой телефон раньше, и вы беспокоитесь о том, что он завинчивает ваш телефон, я могу сказать вам с полной уверенностью, что беспокоиться не о чем. есть тонны быстрых и простых учебников по укоренению телефона для почти всех новых и старых моделей,и вы можете укоренить свой телефон, даже если у вас есть mac (я укоренил свой s3 с моим mac).
Источник
Android 10, «Permission denied» in a SD card #5320
Comments
Gnakkk commented May 20, 2020
Android 10 upgrade turned out to be such a bad idea because I lost the writing permission in my external SD card.
Is there a way to fix it?
The text was updated successfully, but these errors were encountered:
kcubeterm commented May 20, 2020 •
Can you provide device vendor name as well, because many custom rom devices , termux can access even write also, like in Redmi(miui)
RalfWerner commented May 20, 2020
I lost the writing permission in my external SD card.
creates two symlinks that allow writing and lists the content! At least one of the two paths is the sdcard but be careful — the paths are also disposed of with the termux deinstallation.
But, the google-file-App on Android 10 can edit termux data ( cp/mv — always with a new timestamp).
Gnakkk commented May 20, 2020
RalfWerner commented May 20, 2020 •
try $a from my example above behind /2 or instead. ls -la shows owner and group
xeffyr commented May 20, 2020
Full rw access to external storage was never supported.
Gnakkk commented May 21, 2020
@RalfWerner was right.
I’ve got it working now!
Thanks a million!
RalfWerner commented May 21, 2020 •
Full rw access to external storage was never supported.
@xeffyr This contradicts my experience with my Android 8/9 devices from different arch, on which all data allow r+w access and only restrictions due to fat-differences have to be considered.
With Q10/R11 that changes. Therefore I would not label the question as invalid. My real devices cannot be upgraded to Q10 and my 30Gb sdcard works simply like a USB stick, so I test with emulations.
I reread wiki and miss the changes that result in Q10 and R11 and targetSdkVersion 29/R ( *29.apk )
comes Aug 20 in less than 3 monthes. Here are some suggestions:
First, unlimited access from google-file to all termux data (including nl/ and packages u/ ). «App-private storage» does not apply to google, especially since the properties can be changed without termux-setup-storage ( tss ) in phone-setup.
/storage) are only allowed «one way» and _»x-file-access» not (fat differences).
Scripts can, however, be executed as the «input» of the interpreter (e.g. bash).
/sdcard exists on most devices and is a symlink with an unclear destination — often the real sdcard if it exists or internal storage. When formatting the sdcard, the folders (Android to Pictures) are created (different spellings) to which tss creates uniform symlinks. However, these folders are then multiple on one device and only the path /storage/*/* in termux is unique.
tss is not possible on R11 because the basic function am no longer works (@fornwall confirmed). I prefer debug to wiki-docu!
Reference to package limitation in external storage is missing in wiki. However, it can be used as ../ -backup if termux de/re-installed, does not use $a and the target device has the same arch.
At *29.apk , three different owner/group assignments have been set up on the sdcard on three different emulators. For termux all imaginable rw combinations and groups are included. google is allowed to do everything again and the $a path (@KangKazumi above) always belongs to termux — but unfortunately it is also disposed of with the app. Thanks to google (problem & solution) there is data recovery:)
Источник
Zheka’s blog
Sunday, February 16, 2014
Доступ к ресурсам Android приложения
Бывает так, что во время разработки, нужно заглянуть в приватные директории приложения. Как известно, доступ к ним закрыт, и при попытке, скажем, получить список файлов, имеем следующее:
Есть несколько решений данной проблемы.
Первое, что приходит на ум — получить root права. Недостатки очевидны. Ломать телефон из-за маленькой плюшки — варварство(да и телефон может быть не личный, а, например, корпоративный). Но имея root , получаем неограниченный доступ ко всем ресурсам системы.
run-as
В составе Android OS есть утилита run-as . По своей сути очень похожа на sudo — выполнение команд от имени приложения или говоря короче — делегирование прав:
Пара моментов которые нужно знать. Приложение должно быть собрано как debuggable и в нек. случаях нужно менять права на файлы/директории:
Из недостатков можно назвать лишь одно — нет возможности доступа к файлам приложений третьих лиц(установленных, например, с Play Market).
backup
Последний способ. Я его использовал до того, как познакомился с run-as . Android предоставляет возможность сделать копию приложения:
В текущей директории будет создан файл backup.dat ( [device id] можно узнать командой ‘adb devices’ ). Далее распаковываем *.dat файл:
Приведенная команда у меня работает только под Linux, под Mac OS я получаю сообщение об ошибке, мол openssl собран без поддержки zlib. Немного пошаманив, нашел решение, которое не требует пересборки openssl:
По сравнению с Linux вариантом, работет медленнее, но для меня не критично. После всех шагов, в текущей директории будет создана папка apps, содержащая все внутренности приложения.
До недавнего времени последний способ не имел недостатков. Т.е. была возможность получить доступ ко всем потрохам без каких-либо ограничений. Но начиная с версии Android 4.4 в AndroidMainifext.xml был добавлен флаг allowBackup:
Который гласит буквально следующее: если флаг установлен в значение false , то приложение никогда не будет иметь возможность сделать резервную копию или восстанновление из резервной копии, даже в случае резерного копирования всей системы(имеется ввиду средствами самой ОС). Поумолчанию флаг имеет значение true . Вот такие дела. Т.е. доспут к ресурсам своего приложения мы всегда будем иметь, а в остальном — как повезет.
Источник
Android runtime permissions. Почему, зачем и как
Часто при установке приложения на Android нам приходилось видеть, что оно запрашивает какое-то немыслимое количество разрешений. Например:
Хорошо, если вы устанавливаете приложение от какого-то известного разработчика, которому можете доверять. Но весьма подозрительно, если вы устанавливаете новый музыкальный плеер, а ему для работы требуется, например, получать ваше местоположение. Или, тем более, фонарик, требующий доступ к смс и звонкам.
Некоторые разработчики, чтобы уменьшить недоверие, добавляют в описание приложения на Google Play информацию о том, зачем нужно то или иное разрешение.
К шестой версии Android ситуация поменялась. Теперь разрешения нужно запрашивать в процессе работы. О том, как этой новой возможностью пользоваться и ее некоторых подводных камнях будет рассказано далее.
Общая информация
Подобно тому, как это происходит в iOS, при запросе появится системный диалог с запросом разрешения.
|
Отличие в том, что после нажатия на кнопку “Deny” разрешение не будет полностью запрещено для приложения, как это происходит у Apple. Его можно будет запросить повторно, но в этом случае появится опция “Never ask again”, после выбора которой “Deny” работает как “Don’t allow” в iOS.
Разрешения делятся на два типа (есть и другие, но они нас не интересуют):
- обычные (normal);
- опасные (dangerous).
Обычные разрешения будут получены приложением при установке, никакого подтверждения от пользователя не потребуется (немного спорный момент, на мой взгляд, стоило бы уведомлять пользователя об обязательных разрешениях). В дальнейшем отозвать их у приложения будет невозможно. Опасные же должны быть запрошены в процессе работы приложения и в любой момент могут быть отозваны. Список опасных и не очень разрешений можно посмотреть тут.
Можно увидеть, что доступ к интернету не считается опасным. Все, кто использует рекламу в своих программах, могут вздохнуть с облегчением: отключить её, просто отобрав разрешение, не получится (все еще можно просто отключить интернет, но факт остается фактом).
Для того чтобы отозвать разрешение, которое было выдано ранее (или предоставить его, если вы выбрали “Never ask again”) нужно перейти в настройки приложения (Settings->Apps->*AppName*) в раздел Permissions и кликнуть по соответствующим переключателям. В этом меню также можно посмотреть все разрешения этой программы, выбрав пункт “All permissions” из контекстного меню. Еще есть возможность просматривать, каким приложениям выдано конкретное разрешение (и соответственно предоставить или отобрать его). Для этого в настройках в разделе Apps нужно кликнуть по меню с иконкой шестеренки и в открывшемся разделе выбрать App permissions. Далее, выбрав нужное разрешение, можно увидеть все приложения, которым оно нужно.
Второй момент заключается в том, насколько ясно будет человеку, для чего нужно это разрешение. Зачем приложению для смс доступ к календарю? Наверное, для какой-то классной функции, которая облегчит перенос дат из сообщений в календарь и тому подобное. Но знаете об этом только вы, поэтому сначала нужно объяснить причину запроса и показать какие возможности даст доступ к этому разрешению. Это относится и к первичным и к вторичным разрешениям.
|
Еще раз кратко:
- важные разрешения запрашиваем при запуске, вторичные — при первом использовании соответствующей функции;
- если понять, зачем нужно разрешение тяжело, предоставляем объяснение.
В случае, когда вам все-таки отказали, пояснение причины в следующий раз является обязательным. А если помимо отказа, пользователь попросил вас никогда не запрашивать данное разрешение, используя опцию “Never ask again”, но пытается использовать соответствующую функцию приложения, предложите ему перейти в настройки вашей программы и вручную включить необходимые разрешения. Это особенно важно, если разрешение критично для работы программы.