Ошибка sai permission denied

Содержание

  1. Install failed permission denied как исправить internal error
  2. Русские Блоги
  3. Не удалось завершить сеанс: решение INSTALL_FAILED_INTERNAL_ERROR
  4. Интеллектуальная рекомендация
  5. Реализация оценки приложения iOS
  6. JS функциональное программирование (е)
  7. PWN_JarvisOJ_Level1
  8. Установка и развертывание Kubernetes
  9. На стороне многопроцессорного сервера — (2) *
  10. Lab 28.2 virt-manager problem with permissions
  11. Hi. I have encountered a problem where when following the directions to install tinycore on virt-manager I get the following message:
  12. $ ls -l Core* gives me:
  13. Do I need to change the permissions on this file? Or do I need to do something with users?
  14. Comments
  15. Диковинная ошибка при создании QEMU виртуальной машины.

Install failed permission denied как исправить internal error

Новая версия 1.1
Changelog:
Fix..fix.fix.
sai.apk ( 1.82 МБ )

Сообщение отредактировал Dan-Tiguan — 15.12.18, 18:20

Это приложения у которых графика качается именно под девайс. Если я не прав, то исправьте меня.

Сообщение отредактировал Leyzymoy — 16.12.18, 00:53

Мульти APK — это такая фишка от Google, которая разделяет (split) приложение на несколько разных APK . Каждый APK — это полная и независимая версия приложения, но они не работаю по отдельности, эти APK должны иметь одно и то же имя пакета, а также должны быть подписаны одним и тем же ключом.

Для чего это нужно, если говорить простым языком это своего рода «LiteMod» только сделанный самим автором приложения. В основном авторы создают APK с поддержкой всех конфигурации устройств одновременно, это приводит к росту веса приложения. Поэтому Google стал рекомендовать авторам делить APK на части если его вес больше 50 мб.

Выглядит это так:

1- основной APK (это обычный APK но без графики под различные конфигурации, так же отсутствуют библиотеки под различные архитектуры процессоров)

2- APK с библиотеками под вашу архитектуру процессора (arm64-v8a или armeabi- v7a или x86 и т.д.)

3- APK с графическими файлами под ваш размер экрана (xhdpi или xxhdpi или xxxhdpi и т.д.)

SrProk, ну я почти тоже самое написал, только в более простом виде. 🙂

Сообщение отредактировал Leyzymoy — 06.04.19, 14:19

SAI 1.3
Изменения:
Исправление ошибок.
Тёмная тема.
Улучшение в UI.
Скачать : sai (3).apk ( 1.83 МБ )

Сообщение отредактировал Leyzymoy — 16.12.18, 17:29

SAI 1.4
Изменения:
— Небольшой фикс скорости установки.
Скачать :
sai-1.4.apk ( 1.83 МБ )

Сообщение отредактировал Dan-Tiguan — 16.12.18, 19:37

Источник

Русские Блоги

Не удалось завершить сеанс: решение INSTALL_FAILED_INTERNAL_ERROR

Предисловие: Установка Android studio apk не может быть установлена, сообщается об ошибке, онлайн-поиск может увидеть, что это: «Вызывающему абоненту не разрешено тестировать тестовую программу», но конкретный смысл этого предложения трудно понять. Как показано ниже

Из-за вышеперечисленных проблем установочный пакет ненормальный

▲ Анализ проблемы
Оказывается, в Android Studio 3.0 атрибут android: testOnly = ”true” будет автоматически добавлен в тег приложения файла AndroidManifest отладочной версии apk. В результате запуск apk из IDE можно использовать только на большинстве телефонов с помощью команды adb install -t. установка.

Убедитесь, что атрибут testOnly в app src main AndroidMainfest.xml истинен, удалите его или измените его на false.

Проверьте, являются ли версии Android Studio и gradle альфа-версиями, и перейдите на стабильные версии

Проверьте, нужно ли выключить функцию Instant Run, выключите эту функцию

Проверить, использовать ли альфа-версию зависимой библиотеки, заменить ее стабильной версией

Если ничего из вышеперечисленного не удается решить, добавьте android.injected.testOnly = false в файл gradle.properties.

После тестирования окончательное решение применимо к этому тесту DEMO

About me
Email :[email protected]
Группа вопросов по обмену разработчиками Android: 537891203

Интеллектуальная рекомендация

Реализация оценки приложения iOS

Есть два способа получить оценку приложения: перейти в App Store для оценки и оценка в приложении. 1. Перейдите в App Store, чтобы оценить ps: appid можно запросить в iTunes Connect 2. Встроенная оцен.

JS функциональное программирование (е)

Давайте рассмотрим простой пример, чтобы проиллюстрировать, как используется Reduce. Первый параметр Reduce — это то, что мы принимаем массив arrayOfNums, а второй параметр — функцию. Эта функция прин.

PWN_JarvisOJ_Level1

Nc первый Затем мы смотрим на декомпиляцию ida Перед «Hello, World! N» есть уязвимая_функция, проверьте эту функцию после ввода Видно, что только что появившийся странный адрес является пе.

Установка и развертывание Kubernetes

На самом деле, я опубликовал статью в этом разделе давным -давно, но она не достаточно подробно, и уровень не является ясным. Когда я развернулся сегодня, я увидел его достаточно (хотя это было успешн.

На стороне многопроцессорного сервера — (2) *

Обработка сигнала Родительский процесс часто очень занят, поэтому вы не можете просто вызвать функцию waitpid, чтобы дождаться завершения дочернего процесса. Затем обсудите решение. Обратитесь .

Источник

Lab 28.2 virt-manager problem with permissions

Hi. I have encountered a problem where when following the directions to install tinycore on virt-manager I get the following message:

$ ls -l Core* gives me:

-rwxr-xr-x 1 libvirt-qemu kvm 216006656 Jun 29 07:06 CorePlus-current.iso

Do I need to change the permissions on this file? Or do I need to do something with users?

Thanks in advance!

When I went through the lab, virt-manager changed the user / group ownership of the iso file to qemu / qemu. I’m running CentOS 8 for this lab, so it might just be a difference in distros that we are running.

The only other difference I see is my iso is set to 664 in terms of permissions — so am wondering if adding write to the group would make a difference.

Hi: It is pretty hard to debug this stuff unless you tell us things like distribution and version. For the case of anything virtual also it is important to tell us if this is a real machine or a VM running under a hypervisor and if so which one. In some cases telling us how much RAM there is and other HW issues can help.

As dacarab mentioned he was running CentOS 8 and seems to have been able to get it done. I can’t easily debug this as I would be doing the same thing as the only physical boxes I have are running RHEL 8 or CentOS 8

This bit «Could not open ‘/home/andrew/Downloads/CorePlus-current.iso’: Permission denied» makes me want to check the permissions of the «iso» file. We should have avoided permission challenges when we ran «sudo virt-manager» . If it is desired to run the VM as another user, set the group to «qemu» on the «iso» file.

Please confirm if the command «sudo virt-manager» was used.
Lee

Hi ail. Thank you for responding!

I’m running Ubuntu 20.04 LTS with 16GB of RAM on a real machine.
It’s virt-manager v2.2.1
I’ve had little problems previously using either Virtualbox or VMWare on this machine, both of which were stopped and disabled as per Lab 28.1.

The command was run as «sudo virt-manager».
Just tried with permissions set to 664, with no joy.
When I run $ sudo virt-manager, it changes the user/group ownership of the .iso to libvert-qemu / kvm, from whatever I may have changed it to, (root, andrew, etc). I have also tried $ sudo virt-manager as root.
If I run $ virt-manager, (i.e.no sudo) I don’t get the option for a QEMU/KVM session, only and LXC session in virt-manager.

This is thoroughly frustrating as I’ve been really enjoying the course up to now!

Can you please run:

sudo systemctl status apparmor

Thanks Lee
This is interesting as I run Ubuntu 20.04 on my laptop that I do everything on.

Hi Lee.
apparmor is active.
getenforce is not installed. Would installing SELinux help resolve this problem?

I just did a test case with Ubuntu 20.04. Apparmor is enabled by default, and SELinux is not configured (it’s one or another). So, I couldn’t reproduce the issue, because it worked on my environment.

So, I have some few questions:

1.- Is the libvirtd service running? Please provide the output for:

sudo systemctl status libvirtd

2.- What packages have you installed for testing this?

3.- The following are the permissions on my file:

$ ls -l CorePlus-current.iso
-rw-r—r— 1 libvirt-qemu kvm 124780544 Kun 19 18:50 CorePlus-current.iso

-rwxr-xr-x 1 libvirt-qemu kvm 216006656 Jun 29 07:06 CorePlus-current.iso

So, where did you put the file? Is it mounted in a read-only directory? Please try moving it to your home directory or on /tmp, just to be sure.

Normally you can not run apparmor and selinux at the same time, so there is no way any selinux commands will work. You also have to make sure both are include in the kernel, so that you can turn one or the other off.

$ sudo aa-teardown
$ sudo systemctl stop apparmor
$ sudo systemctl disable apparmor

So, I have some few questions:

1.- Is the libvirtd service running? Please provide the output for:

sudo systemctl status libvirtd

Hi Luis. Sorry about the delay in returning to this.

When I check the status of libvirtd prior to launching virt-manager, all is well. However once virt-manager is launched I get this,

Jul 28 07:53:40 liveware-problem libvirtd[8347]: libvirt version: 6.0.0, package: 0ubuntu8.2 (Christian Ehrhardt [email protected] Mon, 22 Jun 2020 21:30:50 +0200)
Jul 28 07:53:40 liveware-problem libvirtd[8347]: hostname: liveware-problem
Jul 28 07:53:40 liveware-problem libvirtd[8347]: operation failed: pool ‘default’ already exists with uuid ffe65bc4-e3ad-4e58-ab3d-527e844ce476
Jul 28 07:53:40 liveware-problem libvirtd[8347]: operation failed: pool ‘default’ already exists with uuid ffe65bc4-e3ad-4e58-> ab3d-527e844ce476
Jul 28 07:53:40 liveware-problem libvirtd[8347]: this function is not supported by the connection driver: virConnectGetAllDomainStats

I tried the same thing on my Ubuntu18 vmware machine and after running $ sudo virt-manager, I get,

Jul 28 08:03:15 ubuntu18 libvirtd[932]: 2020-07-28 07:03:15.260+0000: 988: info : libvirt version: 4.0.0, package: 1ubuntu8.17 (Marc Deslauriers [email protected] Wed, 06 May 2020 14:18:23 -0400)
Jul 28 08:03:15 ubuntu18 libvirtd[932]: 2020-07-28 07:03:15.260+0000: 988: info : hostname: ubuntu18
Jul 28 08:03:15 ubuntu18 libvirtd[932]: 2020-07-28 07:03:15.260+0000: 988: error : netcfConnectNumOfInterfacesImpl:288 : internal error: failed to get number of host interfaces: unspecified error — errors in loading some config files
Jul 28 08:03:15 ubuntu18 libvirtd[932]: 2020-07-28 07:03:15.306+0000: 986: error : netcfConnectListAllInterfaces:564 : internal error: failed to get number of host interfaces: unspecified error — errors in loading some config files
Jul 28 08:03:15 ubuntu18 libvirtd[932]: 2020-07-28 07:03:15.353+0000: 989: error : netcfConnectListAllInterfaces:564 : internal error: failed to get number of host interfaces: unspecified error — errors in loading some config files

However, I am able to complete the lab in the Ubuntu18 VM

So, more questions than answers.

There is a difference in libvirtd versions, which I suspect is probably the problem. However, I’m intrigued to know what version is running on your system Luis.

In answer to your other questions:

2.- What packages have you installed for testing this?

Answered above, I think.

3 — the file is in my Downloads directory. I also tried it in my /home directory, same permissions, no joy.

Источник

Диковинная ошибка при создании QEMU виртуальной машины.

При создании виртуальной машины QEMU выдает такую ошибку:

Разрешил systemd использовать libvirtd, перезагрузился, выгрузил модули VirtualBox, чтобы не было сомнений и все равно вылазит. Гугл не дал ответа.

в директории три каталога — lxc qemu uml В qemu два лога — оба пустые.

А в логе самого libvirtd точно ничего нет? Исключение virtmanager’а выглядит очень странно: вместо сообщения об ошибке там _кусок_ командной строки. Кстати, какой дистрибутив и какие версии всего (libvirtd, virt-manager, qemu-kvm)?

Kernel: x86_64 Linux 4.13.11-1-ARCH

libvirtd (libvirt) 3.9.0

Этого лога вообще нет в /var/log/libvirt

Этого лога вообще нет в /var/log/libvirt

Хм. А в journalctl -u libvirtd (тут должно быть имя сервиса systemd, который запускает libvirtd, в арче может отличаться) есть что-нибудь?

Здесь лог от перезагрузки до перезагрузки.

сорри, вот получше, у меня режет почему то в терминале строки

Тут тоже строки обрезаны. Сделай вот так:

Ты арчвики внимательно читал? У меня тоже вылазило кучу непонятных ошибок пока не поставил ebtables и dnsmasq и прочие настройки.

Who is who mr. Гена?

я ставил ebtables и dnsmasq до этого поста, решил написать, потому что уже ничего не помогает

Вот результат вывода.

ноя 13 15:00:13 arch libvirtd[410]: Could not access KVM kernel module: Permission denied
ноя 13 15:00:13 arch libvirtd[410]: 2017-11-13T13:00:13.876287Z qemu-system-x86_64: failed to initialize KVM: Permission denied
ноя 13 15:01:05 arch libvirtd[410]: 2017-11-13 13:01:05.989+0000: 448: error : qemuConnectGetDomainCapabilities:19306 : недопустимый аргумент: KVM is not supported by ‘/usr/sbin/qemu-system-x86_64’ on this host

Посмотри какие права имеет /dev/kvm и от имени какого пользователя стартует qemu. Ну и погугли что-нибудь типа «arch kvm permission denied». Скорее всего решение нагуглится.

Источник

Содержание

  1. Ошибка «Permission denied» в Linux
  2. Изменение прав в терминале
  3. Изменение прав в файловом менеджере
  4. В заключение
  5. Ошибка отказано в доступе Linux
  6. Ошибка отказано в доступе Linux
  7. Выводы
  8. Ошибка bash permission denied
  9. Ошибка bash permission denied
  10. Выводы

COVER 1

Все операционные системы семейства Linux имеют четко разграниченные права доступа. В своей домашней директории пользователь может делать все, что ему угодно, до тех пор, пока укладывается в отведенные рамки. Попытка выйти за них приводит к появлению ошибки «Permission Denied».

Изменение прав в терминале

Рассмотрим вариант, в котором необходимо прочесть текстовый документ, созданный другим пользователем. Файлы TXT в Linux можно просматривать непосредственно в терминале с помощью команды «cat».

Получаем ошибку «Permission Denied» при попытке просмотреть содержимое файла

Используем команду «chmod» и административные права для получения доступа

Просматриваем содержимое текстового документа командой «cat»

Изменение прав в файловом менеджере

Разберемся, как выполнить рассмотренную выше операцию в графическом интерфейсе, используя файловый менеджер из дистрибутива.

При попытке открыть текстовый документ получаем ошибку «Permission Denied»

Открываем меню «Файл» и перезапускаем файловый менеджер от имени root

Набираем пароль root в окне аутентификации

Открываем параметры файла с помощью контекстного меню

На вкладке «Права» разрешаем доступ для группы root и остальных пользователей

Открываем ранее недоступный файл в режиме чтения и изучаем содержимое

В заключение

Как видим, избавиться от ошибки Permission Denied достаточно просто. Решив изменить правда доступа к системным файлам, лишний раз убедитесь, что полностью уверены в своих действиях и понимаете последствия вносимых изменений.

Источник

Ошибка отказано в доступе Linux

Новые пользователи довольно часто сталкиваются с такой ошибкой, как ошибка отказано в доступе Linux. Если вы только что перешли с Windows, то можете еще не знать всех особенностей операционной системы Linux и почему возникает такая проблема.

В этой статье мы рассмотрим причины ошибки access denied linux, а также как ее обойти.

Ошибка отказано в доступе Linux

Наиболее часто такая ошибка встречается, в таких случаях:

Многие программы проверяют после запуска от какого пользователя они запущены и говорят, что их нужно запускать от имени суперпользователя, но так ведут себя не все. Например, команда ls вернет ошибку отказано в доступе linux если вы попытаетесь посмотреть содержимое каталога суперпользователя:

Snimok ekrana iz 2017 02 19 23 10 30

Но эта же команда нормально отработает нормально при использовании команды sudo:

Snimok ekrana iz 2017 02 19 23 10 42

Другой случай, это если вы обнаруживаете проблему в логах какого-либо системного сервиса, например, веб-сервера Apache. Казалось бы, должно было быть все верно, потому что запуск и так выполняется от имени суперпользователя.

Но нет, сервисы не только запускаются от имени суперпользователя, но потом, для увеличения безопасности они меняют пользователя на обычного, не привелигированного. Например, Apache работает от имени пользователя apache или www-data. Уже от имени этого пользователя программа пытается получить доступ к файловой системе.

Если нужная папка не доступна этому пользователю для чтения то вы получите ошибку access denied linux. Обычно, в логе программа сообщает какая папка или файл нужен когда происходит ошибка.

Вам просто нужно поменять на него права с помощью утилиты chmod или изменить владельца chown. Причем, нужно чтобы ко всем подкаталогам на пути к целевому каталогу был доступ у программы. Например, нельзя так чтобы права на чтение /home/ не было, а на /home/user/ было. Так не пройдет.

Права разрешающие чтение и запись владельцу и только чтение для группы и остальных вставляются командой:

sudo chmod 755 /путь/к/файлу

Или для смены прав для всех файлов в каталоге и самого каталога:

Или вы можете изменить владельца, обычно, это более безопасная и распространенная практика:

Snimok ekrana iz 2017 02 19 23 35 29

Имя пользователя, от имени которого работает сервис вы можете посмотреть с помощью команды:

sudo ps aux | grep имя_сервиса

Snimok ekrana iz 2017 02 19 23 33 51

После того как вы установите правильные права, ошибка отказано в доступе linux больше не будет встречаться.

Выводы

В этой статье мы рассмотрели что делать если случается ошибка нет доступа linux, а также почему она возникает. Надеюсь, эта информация была полезной для вас. Если остались вопросы, спрашивайте в комментариях!

Источник

Ошибка bash permission denied

Многие новички пытаются выполнить запись определенных значений в системные файлы с помощью операторов перенаправления ввода и вывода и получают ошибку bash permission denied. Эта ошибка выводится, даже если вы использовали sudo.

Казалось бы, sudo есть, значит права суперпользователя получены и все должно работать но тут все не так просто. В этой статье мы рассмотрим почему возникает ошибка bash permission denied и как ее обойти.

Ошибка bash permission denied

Допустим, вы выполняете команду:

sudo echo «nameserver 8.8.8.8» >> /etc/resolv.conf

Snimok ekrana ot 2017 07 21 22 03 05

А в результате вместо записи строчки в /etc/resolv.conf получаете ошибку:

bash: /etc/resolv.conf permission denied

В русской локализации это будет отказано в доступе bash linux. Так происходит потому что вы запускаете с правами суперпользователя утилиту echo и она честно выводит вашу строку в стандартный вывод bash с правами суперпользователя. Но bash запущен от обычного пользователя, и когда интерпретатор bash пытается записать полученную строчку в системный файл, естественно, что вы получите ошибку.

Но существует несколько способов обойти это ограничение, вы можете, например, использовать команду tee, которая записывает стандартный вывод в файл или запустить саму оболочку от имени суперпользователя. Рассмотрим сначала вариант с tee:

Snimok ekrana ot 2017 07 21 22 03 38

Это очень простое решение, но, кроме того, вы можете запустить оболочку bash с правами суперпользователя, чтобы дать ей доступ на запись:

Snimok ekrana ot 2017 07 21 22 04 03

Еще одно решение, призванное, упростить эту команду, добавить такой код в

Дальше для вывода строки в файл выполняйте:

sudoe ‘текст’ >> /путь/к/файлу

sudoe «nameserver 8.8.8.8» > /etc/resolv.conf

Snimok ekrana ot 2017 07 21 22 05 46

Теперь все будет работать, как и ожидалось, и ошибка bash отказано в доступе не появится. Еще можно поменять права на файл, а потом уже выводить в него строку. Но это очень неправильное решение. И даже не потому, что это небезопасно, а больше потому что там намного больше действий.

Выводы

В этой небольшой статье мы разобрали почему возникает ошибка bash permission denied при использовании команды echo для системных файлов, а также несколько путей ее решения. Как видите, все достаточно просто. Надеюсь, эта информация была полезной для вас.

Источник


я получаю

открыть не удалось: EACCES (Permission denied)

на линии OutputStream myOutput = new FileOutputStream(outFileName);

Я проверил рут и попробовал android.permission.WRITE_EXTERNAL_STORAGE.

Как я могу решить эту проблему?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}



Ответы:


У меня была такая же проблема … Это <uses-permissionбыло не в том месте. Это правильно:

 <manifest>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ...
        <application>
            ...
            <activity> 
                ...
            </activity>
        </application>
    </manifest> 

uses-permissionТег должен быть вне applicationтега.







Для API 23+ вам необходимо запросить разрешения на чтение / запись, даже если они уже есть в вашем манифесте.

// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 * @param activity
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Официальную документацию о запросе разрешений для API 23+ можно найти на странице https://developer.android.com/training/permissions/requesting.html.







У Google появилась новая функция на Android Q : отфильтрованное представление для внешнего хранилища. Быстрое решение проблемы — добавить этот код в файл AndroidManifest.xml:

<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true" ... >
     ...
    </application>
</manifest>

Вы можете прочитать больше об этом здесь: https://developer.android.com/training/data-storage/compatibility







Я наблюдал это один раз при запуске приложения внутри эмулятора. В настройках эмулятора необходимо правильно указать размер внешнего хранилища («SD-карта»). По умолчанию поле «внешнее хранилище» пустое, и это, вероятно, означает, что такого устройства нет, и EACCES выбрасывается, даже если в манифесте предоставляются разрешения.


В дополнение ко всем ответам, убедитесь, что вы не используете свой телефон в качестве USB-накопителя.

У меня была такая же проблема в HTC Sensation при включенном режиме USB-накопителя. Я все еще могу отлаживать / запускать приложение, но не могу сохранить на внешнее хранилище.




Добавить андроида: requestLegacyExternalStorage = «истина» в Android Manifest Он работал с Android 10 (Q) в SDK 29+
или После перенастройки Android X .

 <application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon=""
    android:label=""
    android:largeHeap="true"
    android:supportsRtl=""
    android:theme=""
    android:requestLegacyExternalStorage="true">



Моя проблема была с «TargetApi (23)», которая необходима, если ваш minSdkVersion ниже 23.

Итак, у меня есть запрос на разрешение со следующим фрагментом

protected boolean shouldAskPermissions() {
    return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

@TargetApi(23)
protected void askPermissions() {
    String[] permissions = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"
    };
    int requestCode = 200;
    requestPermissions(permissions, requestCode);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
// ...
    if (shouldAskPermissions()) {
        askPermissions();
    }
}


Решение для Android Q :

<application ...
    android:requestLegacyExternalStorage="true" ... >




Я испытываю то же самое. Я обнаружил, что если вы идете в Настройки -> Диспетчер приложений -> Ваше приложение -> Разрешения -> Включить хранилище , это решает проблему.



Оказалось, это была глупая ошибка, так как мой телефон все еще был подключен к настольному ПК и я не осознавал этого.

Поэтому пришлось отключить USB-соединение, и все работало нормально.





У меня была такая же проблема на Samsung Galaxy Note 3, под управлением CM 12.1. Проблема для меня заключалась в том, что у меня было

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18"/>

и должен был использовать это, чтобы взять и сохранить пользовательские фотографии. Когда я попытался загрузить те же самые фотографии в ImageLoader, я получил (Permission denied)ошибку. Решение было явно добавить

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

так как вышеупомянутое разрешение ограничивает только разрешение на запись до API версии 18, а вместе с ним разрешение на чтение



В дополнение ко всем ответам, если клиенты используют Android 6.0, Android добавил новую модель разрешений для (Marshmallow).

Уловка: если вы нацелены на версию 22 или ниже, ваше приложение будет запрашивать все разрешения во время установки так же, как и на любом устройстве, работающем под ОС ниже Marshmallow. Если вы пытаетесь использовать эмулятор, то начиная с Android 6.0 и далее вам нужно явно перейти в настройки-> приложения-> YOURAPP -> разрешения и изменить разрешение, если вы его дали.



Странно после косой черты «/» перед моим новым файлом моя проблема была решена. Я изменил это:

File myFile= new File(Environment.getExternalStorageDirectory() + "newFile");

к этому:

File myFile= new File(Environment.getExternalStorageDirectory() + "/newFile");







У меня была такая же проблема, и ни одно из предложений не помогло. Но я нашел интересную причину для этого на физическом устройстве Galaxy Tab .

Когда USB-накопитель включен, разрешения на чтение и запись на внешнее хранилище не влияют. Просто отключите USB-накопитель, и с правильными разрешениями проблема будет решена.



Я ожидаю, что все ниже /dataбудет принадлежать «внутреннему хранилищу». Однако вы должны иметь возможность написать /sdcard.




Измените свойство разрешения в вашей /system/etc/permission/platform.xml
и группе необходимо упомянуть, как показано ниже.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    <group android:gid="sdcard_rw" />
    <group android:gid="media_rw" />    
</uses-permission>




У меня была такая же ошибка, когда я пытался записать изображение в папку DCIM / камера на Galaxy S5 (Android 6.0.1), и я понял, что только эта папка ограничена. Я просто мог написать в DCIM / любую папку, но не в камере. Это должно быть ограничение / настройка на основе бренда.


Когда ваше приложение относится к системному приложению, оно не может получить доступ к SD-карте.


имейте в виду, что даже если вы установили все правильные разрешения в манифесте: единственное место, в которое сторонним приложениям разрешено писать на вашу внешнюю карту, это «их собственные каталоги» (т.е. / sdcard / Android / data /), пытающиеся записать в в другом месте: вы получите исключение: EACCES (В доступе отказано)


Может быть, ответ таков:

на устройствах API> = 23, если вы устанавливаете приложение (приложение не является системным приложением), вы должны проверить разрешение на хранение в разделе «Настройки — приложения», для каждого приложения есть список разрешений, вы должны проверить его! пытаться


В моем случае я использовал библиотеку выбора файлов, которая возвращала путь к внешнему хранилищу, но он начинался с /root/. И даже с разрешением WRITE_EXTERNAL_STORAGE, предоставленным во время выполнения, я все равно получил ошибку EACCES (разрешение отклонено) .
Так что используйте, Environment.getExternalStorageDirectory()чтобы получить правильный путь к внешнему хранилищу.

Пример:
не могу написать: /root/storage/emulated/0/newfile.txt
могу написать: /storage/emulated/0/newfile.txt

boolean externalStorageWritable = isExternalStorageWritable();
File file = new File(filePath);
boolean canWrite = file.canWrite();
boolean isFile = file.isFile();
long usableSpace = file.getUsableSpace();

Log.d(TAG, "externalStorageWritable: " + externalStorageWritable);
Log.d(TAG, "filePath: " + filePath);
Log.d(TAG, "canWrite: " + canWrite);
Log.d(TAG, "isFile: " + isFile);
Log.d(TAG, "usableSpace: " + usableSpace);

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

Выход 1:

externalStorageWritable: true
filePath: /root/storage/emulated/0/newfile.txt
isFile: false
usableSpace: 0

Выход 2:

externalStorageWritable: true
filePath: /storage/emulated/0/newfile.txt
isFile: true
usableSpace: 1331007488



Environment.getExternalStoragePublicDirectory();

При использовании этого устаревшего метода с Android 29 и далее вы получите ту же ошибку:

java.io.FileNotFoundException: open failed: EACCES (Permission denied)

Разрешение здесь:

getExternalStoragePublicDirectory устарела в Android Q


Для тех, кто приходит сюда из результатов поиска и ориентируется на Android 10: Android 10 (API 29) меняет некоторые разрешения, связанные с хранением.

Я исправил эту проблему, когда заменил свои предыдущие экземпляры Environment.getExternalStorageDirectory()(что устарело в API 29) наcontext.getExternalFilesDir(null) .

Обратите внимание, что context.getExternalFilesDir(type) может возвращать ноль, если место хранения недоступно, поэтому обязательно проверяйте это всякий раз, когда проверяете, есть ли у вас внешние разрешения.

Узнайте больше здесь .


Я создаю папку в / data / в моем init.rc (возиться с aosp на Nexus 7) и имел именно эту проблему.

Оказалось, что предоставления разрешения для папки rw (666) было недостаточно, и это должно было быть rwx (777), тогда все работало!


Применение разрешений на хранение после 6.0 можно обойти, если у вас есть рутированное устройство с помощью этих команд adb:

root@msm8996:/ # getenforce
getenforce
Enforcing
root@msm8996:/ # setenforce 0
setenforce 0
root@msm8996:/ # getenforce
getenforce
Permissive


Добавить разрешение в манифест.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



У меня была такая же проблема (API> = 23).

Решение https://stackoverflow.com/a/13569364/1729501 у меня сработало, но отключить приложение для отладки было непрактично.

Мое решение состояло в том, чтобы установить правильный драйвер устройства ADB на Windows. Драйвер USB Google не работает для моего устройства.

ШАГ 1: Загрузите драйверы adb для вашего устройства.

ШАГ 2: Зайдите в диспетчер устройств -> другие устройства -> найдите записи со словом «adb» -> выберите «Обновить драйвер» -> укажите местоположение на шаге 1


после добавления разрешения решил мою проблему

<uses-permission android:name="android.permission.INTERNET"/>


Добавить зависимости gradle

implementation 'com.karumi:dexter:4.2.0'

Добавьте ниже код в вашей основной деятельности.

import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {


                checkMermission();
            }
        }, 4000);
    }

    private void checkMermission(){
        Dexter.withActivity(this)
                .withPermissions(
                        android.Manifest.permission.READ_EXTERNAL_STORAGE,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        android.Manifest.permission.ACCESS_NETWORK_STATE,
                        Manifest.permission.INTERNET
                ).withListener(new MultiplePermissionsListener() {
            @Override
            public void onPermissionsChecked(MultiplePermissionsReport report) {
                if (report.isAnyPermissionPermanentlyDenied()){
                    checkMermission();
                } else if (report.areAllPermissionsGranted()){
                    // copy some things
                } else {
                    checkMermission();
                }

            }
            @Override
            public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                token.continuePermissionRequest();
            }
        }).check();
    }


В моем случае ошибка появлялась на линии

      target.createNewFile();

так как я не мог создать новый файл на SD-карте, поэтому мне пришлось использовать подход DocumentFile.

      documentFile.createFile(mime, target.getName());

Для вышеуказанного вопроса проблема может быть решена с помощью этого подхода,

    fos=context.getContentResolver().openOutputStream(documentFile.getUri());

См. Также эту ветку.
Как использовать новый API доступа к SD-карте, представленный для Android 5.0 (Lollipop)?

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Closed

Marooned-MB opened this issue

Nov 2, 2022

· 29 comments

Labels

bug

Something isn’t working

Comments

@Marooned-MB

Type

Error while running the manager

Bug description

After successful patching, Manager is trying to install «YouTube», not «YouTube reVanced» and fails. I’ve exported .apk to save time and not to repatch it over and over. I pick that .apk to install and get error described below.

Steps to reproduce

  1. select installed YT app
  2. select some patches
  3. install
  4. fail

Android version

Android 9, MIUI 12.0.2

Manager version

0.0.36

Target package name

com.google.android.youtube

Target package version.

v17.42.34

Installation type

Non-root

Patches selected.

obraz

Device logs (exported using Manager settings).

Initializing installer
Creating working directory
Copying original apk
Unpacking input apk
Reading dex files
Decoding AndroidManifest.xml only, because resources are not needed
Merging integrations
Deleting existing resource cache directory
Decoding resources
Executing all patches
Executing 'resource-mapping' of type: resource
Executing 'integrations' of type: bytecode
Skipping 'integrations' because it has already been applied
Executing 'locale-config-fix' of type: resource
Skipping 'resource-mapping' because it has already been applied
Executing 'settings-resource-patch' of type: resource
Executing 'settings' of type: bytecode
Skipping 'locale-config-fix' because it has already been applied
Executing 'general-resource-ads' of type: resource
Executing 'general-ads' of type: bytecode
[success] general-ads
Skipping 'integrations' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'video-ads' of type: bytecode
[success] video-ads
Skipping 'locale-config-fix' because it has already been applied
Executing 'bottom-controls-resource-patch' of type: resource
Skipping 'locale-config-fix' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'downloads-resource-patch' of type: resource
Skipping 'resource-mapping' because it has already been applied
Executing 'player-controls-bytecode-patch' of type: bytecode
Skipping 'integrations' because it has already been applied
Executing 'video-id-hook' of type: bytecode
Executing 'downloads' of type: bytecode
[success] downloads
Skipping 'integrations' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'seekbar-tapping' of type: bytecode
[success] seekbar-tapping
Skipping 'integrations' because it has already been applied
Skipping 'resource-mapping' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'hide-create-button' of type: bytecode
[success] hide-create-button
Skipping 'integrations' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'hide-shorts-button' of type: bytecode
[success] hide-shorts-button
Skipping 'integrations' because it has already been applied
Skipping 'video-id-hook' because it has already been applied
Skipping 'locale-config-fix' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'return-youtube-dislike-resource-patch' of type: resource
Executing 'return-youtube-dislike' of type: bytecode
[success] return-youtube-dislike
Skipping 'player-controls-bytecode-patch' because it has already been applied
Skipping 'integrations' because it has already been applied
Skipping 'locale-config-fix' because it has already been applied
Skipping 'settings' because it has already been applied
Skipping 'resource-mapping' because it has already been applied
Executing 'sponsorblock-resource-patch' of type: resource
Skipping 'video-id-hook' because it has already been applied
Executing 'sponsorblock' of type: bytecode
[success] sponsorblock
Skipping 'integrations' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'disable-startup-shorts-player' of type: bytecode
[success] disable-startup-shorts-player
Skipping 'locale-config-fix' because it has already been applied
Skipping 'settings-resource-patch' because it has already been applied
Executing 'microg-resource-patch' of type: resource
Skipping 'integrations' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'hide-cast-button' of type: bytecode
Executing 'client-spoof' of type: bytecode
Executing 'microg-support' of type: bytecode
[success] microg-support
Skipping 'integrations' because it has already been applied
Skipping 'settings' because it has already been applied
Executing 'minimized-playback' of type: bytecode
[success] minimized-playback
Skipping 'settings' because it has already been applied
[success] settings
Repacking patched apk
Compiling resources
Creating new dex file
Writing modified dex files
Finished!

Installer logs (exported using Installer menu option) [unneeded if issue is not during patching].

No response

Screenshots or videos

  1. After successful patching, it tries to install «YouTube», not «YouTube reVanced»:
    obraz
  2. Play Protect kicks in, «install anyway»:
    obraz
  3. «Application has not been installed» error:
    obraz

Solution

No response

Additional context

No response

Acknowledgements

  • I have searched the existing issues and this is a new and no duplicate or related to another open issue.
  • I have written a short but informative title.
  • I filled out all of the requested information in this issue properly.
  • The issue is related solely to the ReVanced Manager

@Ushie

Do you already have a YouTube ReVanced installed?

@Marooned-MB

No, only Vanced (and bundled original YT, which I have normally blocked and hidden, only unblocked it and upgraded for the purpose of installing reVanced).

I wonder why there is no just .apk of reVanced prepared for download and install, just like in case of Vanced but that’s a separate discussion.

@Ushie

You said you saved the patched APK on your phone right? can you try installing it with SAI and expanding the error and taking a screenshot?

@Ushie

Because SAI gives the actual reason it failed installing (like ADB)

@Marooned-MB

I have never heard the name SAI, will Google that tomorrow and report back. Thanks for helping so far.

@Ushie

@Marooned-MB

Ok, so SAI reported INSTALL_FAILED_INTERNAL_ERROR: Permission Denied but also upon first run warned me about MIUI which might block installation. I recall I had some issues with installing Vanced for the same reason but no problems when installing via ADB. Will try that tomorrow and let you know here.

@Ushie

Turn off MIUI optimization in Developer Options and let me know if that sorts it

@Marooned-MB

Turning it off is a big nope. I did it once, it completly wiped out the settings, made the phone works weird and did all sorts of other bad things. Took me weeks to bring back proper behavior. Not gonna do this again.
Will try with ADB, it worked for Vanced.

@Ushie

holy shit lmaoo xiaomi come on

@Canny1913

Turning it off is a big nope. I did it once, it completly wiped out the settings, made the phone works weird and did all sorts of other bad things. Took me weeks to bring back proper behavior. Not gonna do this again. Will try with ADB, it worked for Vanced.

That’s why you’re not meant to turn it off. MIUI Optimization is necessary for a lot of system apps to work correctly. Also turning it back on should fix all behavior, only permissions get reset.

Though it stopped bothering APK installations on newer versions of MIUI (at least that’s the case for me)

Try using ADB for installation since MIUI doesn’t block that and it should output the actual reason.

@Marooned-MB

Update:

  1. while installing with ADB I got different error:
>adb install youtube-revanced_v17.42.34.apk
Performing Streamed Install
adb: failed to install youtube-revanced.apk: Failure [INSTALL_FAILED_VERIFICATION_FAILURE]
  1. I’ve disabled verification of the APK during USB install
Performing Streamed Install
Success
  1. New application showed in the drawer but it’s named «YouTube» and has YouTube icon (not sure if that’s ok — I expected «YouTube reVanced», maybe wrongly)
  2. Info about new app looks like this:
    obraz
  3. App fails to start, log:
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.revanced.android.youtube/com.google.android.apps.youtube.app.application.Shell_HomeActivity}: android.content.res.Resources$NotFoundException: Drawable app.revanced.android.youtube:drawable/quantum_launchscreen_youtube with resource ID #0x7f08090d
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:201)
	at android.app.ActivityThread.main(ActivityThread.java:6810)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: android.content.res.Resources$NotFoundException: Drawable app.revanced.android.youtube:drawable/quantum_launchscreen_youtube with resource ID #0x7f08090d
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/quantum_launchscreen_youtube.xml from drawable resource ID #0x7f08090d
	at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:854)
	at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:634)
	at android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:307)
	at android.content.res.Resources.getDrawableForDensity(Resources.java:902)
	at android.content.res.Resources.getDrawable(Resources.java:841)
	at android.content.Context.getDrawable(Context.java:635)
	at com.android.internal.policy.PhoneWindow.generateLayout(PhoneWindow.java:2635)
	at com.android.internal.policy.PhoneWindow.installDecor(PhoneWindow.java:2685)
	at com.android.internal.policy.PhoneWindow.getDecorView(PhoneWindow.java:2076)
	at android.app.ActivityTransitionState.setEnterActivityOptions(ActivityTransitionState.java:160)
	at android.app.Activity.performCreate(Activity.java:7237)
	at android.app.Activity.performCreate(Activity.java:7213)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loop(Looper.java:201)
	at android.app.ActivityThread.main(ActivityThread.java:6810)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: <bitmap> requires a valid 'src' attribute
	at android.graphics.drawable.BitmapDrawable.verifyRequiredAttributes(BitmapDrawable.java:788)
	at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:771)
	at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
	at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)
	at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1321)
	at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:279)
	at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:194)
	at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
	at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)
	at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1291)
	at android.content.res.ResourcesImpl.createFromXmlForDensity(ResourcesImpl.java:1506)
	at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:838)
	... 24 more

@Marooned-MB

So.. any hints on that error I’m having? Thanks in advance:

java.lang.RuntimeException: Unable to start activity ComponentInfo{app.revanced.android.youtube/com.google.android.apps.youtube.app.application.Shell_HomeActivity}: android.content.res.Resources$NotFoundException: Drawable app.revanced.android.youtube:drawable/quantum_launchscreen_youtube with resource ID #0x7f08090d

@hostar

I have same the problem. Youtube version 17.43.36

@ILoveOpenSourceApplications

Is this issue still present for OP or any others?

@Marooned-MB

Is this issue still present for OP or any others?

I’ll try to retest it this week. As installation is much much more cumbersome comparing to Vanced, it will take some time. I have to enable YT app, upgrade it, download reVanced installation and do patching.
Currently still using Vanced.
Will update you here (not sure why ticket has been closed without confirming it’s working?)

@ILoveOpenSourceApplications

Why are you enabling and updating stock YouTube app for this?

@ILoveOpenSourceApplications

Were you patching using the updated YouTube play store version this whole time?

@Ushie

not sure why ticket has been closed without confirming it’s working

The original issue (unable to install) is a MIUI problem, your new issue (ReVanced YouTube crashing) is unrelated to that

@Marooned-MB

Why are you enabling and updating stock YouTube app for this?

Because that is what is required by reVanced to be installed? It’s patching original YT app, yes? And with my current setup (Vanced) I have original YT app blocked/disabled/hidden as it can’t be uninstalled (no root, preinstalled on the phone) and I didn’t want it to interfere with any YT actions like opening the links or hijacking notifications etc. Just wanted to have one YT app (Vanced at the moment, reVanced in the future).

Were you patching using the updated YouTube play store version this whole time?

As far as I remember, yes. It was a few months ago. Will try again and will report back.

@ILoveOpenSourceApplications

No, what you’re saying is wrong. You’re never required to install the recommended version. You only have to download the full apk file of the recommended version and use the storage option at the bottom right in the manager to select that downloaded apk file and then apply the patches.

@ILoveOpenSourceApplications

These steps are clearly mentioned in all the user based guides if you’ve ever took the time to look into it before starting the entire process.

@Ushie

There are no official guides yet

@ILoveOpenSourceApplications

There are no official guides yet

Clarified that those are user based guides. Thanks!

@Marooned-MB

These steps are clearly mentioned in all the user based guides

Ok, probably not the best place to discuss it here but installation of reVanced couldn’t be more confusing. On the main page https://github.com/revanced there are no clues how to perform it. Just a list of unspecified subprojects. Should one use cli? patcher? manager? No clue at all. I was unable to find any «user based guides» there.

So yes, I took the time to look into it but nothing here is clear at all, sorry. And I consider myself a technical guy (programmer for over 20 yeas) so no idea how not-technical people find themselves in this maze.

@ILoveOpenSourceApplications

The steps are a bit confusing at the start, but once you’re used to it everything will be fine. Glad I could assist you in solving this issue.

@Marooned-MB

@oSumAtrIX

You forgot to merge the integrations. These steps do not belong on the profile README.

@Marooned-MB

  1. Not sure where those steps belong but would be nice to have such clear instructions on the main page to know where to go and what to do — currently there is absolutely no info for newcomers and «just click everywhere and figure this out by yourself» is far from smooth process.
  2. How to merge the integrations then? Here are only 3rd step that should create output apk? 4th one requires rooted phone so of course fails for me.

Labels

bug

Something isn’t working


Go to Xiaomi


r/Xiaomi

This subreddit is currently set to restricted. Stay tuned for a discussion thread regarding next steps, thanks!
———————-
For information regarding Reddit’s API changes and the subreddit blackouts, please visit: https://redd.it/149werd.




Members





Online



INSTALL_FAILED_INTERNAL_ERROR: Permission Denied

When I try to install an APK it says INSTALL_FAILED_INTERNAL_ERROR: Permission Denied and I don’t know how to fix it. If someone can help me out I would really appreciate it.

More posts you may like


я получаю

открыть не удалось: EACCES (Permission denied)

на линии OutputStream myOutput = new FileOutputStream(outFileName);

Я проверил рут и попробовал android.permission.WRITE_EXTERNAL_STORAGE.

Как я могу решить эту проблему?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}



Ответы:


У меня была такая же проблема … Это <uses-permissionбыло не в том месте. Это правильно:

 <manifest>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ...
        <application>
            ...
            <activity> 
                ...
            </activity>
        </application>
    </manifest> 

uses-permissionТег должен быть вне applicationтега.







Для API 23+ вам необходимо запросить разрешения на чтение / запись, даже если они уже есть в вашем манифесте.

// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 * @param activity
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Официальную документацию о запросе разрешений для API 23+ можно найти на странице https://developer.android.com/training/permissions/requesting.html.







У Google появилась новая функция на Android Q : отфильтрованное представление для внешнего хранилища. Быстрое решение проблемы — добавить этот код в файл AndroidManifest.xml:

<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true" ... >
     ...
    </application>
</manifest>

Вы можете прочитать больше об этом здесь: https://developer.android.com/training/data-storage/compatibility







Я наблюдал это один раз при запуске приложения внутри эмулятора. В настройках эмулятора необходимо правильно указать размер внешнего хранилища («SD-карта»). По умолчанию поле «внешнее хранилище» пустое, и это, вероятно, означает, что такого устройства нет, и EACCES выбрасывается, даже если в манифесте предоставляются разрешения.


В дополнение ко всем ответам, убедитесь, что вы не используете свой телефон в качестве USB-накопителя.

У меня была такая же проблема в HTC Sensation при включенном режиме USB-накопителя. Я все еще могу отлаживать / запускать приложение, но не могу сохранить на внешнее хранилище.




Добавить андроида: requestLegacyExternalStorage = «истина» в Android Manifest Он работал с Android 10 (Q) в SDK 29+
или После перенастройки Android X .

 <application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon=""
    android:label=""
    android:largeHeap="true"
    android:supportsRtl=""
    android:theme=""
    android:requestLegacyExternalStorage="true">



Моя проблема была с «TargetApi (23)», которая необходима, если ваш minSdkVersion ниже 23.

Итак, у меня есть запрос на разрешение со следующим фрагментом

protected boolean shouldAskPermissions() {
    return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

@TargetApi(23)
protected void askPermissions() {
    String[] permissions = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"
    };
    int requestCode = 200;
    requestPermissions(permissions, requestCode);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
// ...
    if (shouldAskPermissions()) {
        askPermissions();
    }
}


Решение для Android Q :

<application ...
    android:requestLegacyExternalStorage="true" ... >




Я испытываю то же самое. Я обнаружил, что если вы идете в Настройки -> Диспетчер приложений -> Ваше приложение -> Разрешения -> Включить хранилище , это решает проблему.



Оказалось, это была глупая ошибка, так как мой телефон все еще был подключен к настольному ПК и я не осознавал этого.

Поэтому пришлось отключить USB-соединение, и все работало нормально.





У меня была такая же проблема на Samsung Galaxy Note 3, под управлением CM 12.1. Проблема для меня заключалась в том, что у меня было

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18"/>

и должен был использовать это, чтобы взять и сохранить пользовательские фотографии. Когда я попытался загрузить те же самые фотографии в ImageLoader, я получил (Permission denied)ошибку. Решение было явно добавить

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

так как вышеупомянутое разрешение ограничивает только разрешение на запись до API версии 18, а вместе с ним разрешение на чтение



В дополнение ко всем ответам, если клиенты используют Android 6.0, Android добавил новую модель разрешений для (Marshmallow).

Уловка: если вы нацелены на версию 22 или ниже, ваше приложение будет запрашивать все разрешения во время установки так же, как и на любом устройстве, работающем под ОС ниже Marshmallow. Если вы пытаетесь использовать эмулятор, то начиная с Android 6.0 и далее вам нужно явно перейти в настройки-> приложения-> YOURAPP -> разрешения и изменить разрешение, если вы его дали.



Странно после косой черты «/» перед моим новым файлом моя проблема была решена. Я изменил это:

File myFile= new File(Environment.getExternalStorageDirectory() + "newFile");

к этому:

File myFile= new File(Environment.getExternalStorageDirectory() + "/newFile");







У меня была такая же проблема, и ни одно из предложений не помогло. Но я нашел интересную причину для этого на физическом устройстве Galaxy Tab .

Когда USB-накопитель включен, разрешения на чтение и запись на внешнее хранилище не влияют. Просто отключите USB-накопитель, и с правильными разрешениями проблема будет решена.



Я ожидаю, что все ниже /dataбудет принадлежать «внутреннему хранилищу». Однако вы должны иметь возможность написать /sdcard.




Измените свойство разрешения в вашей /system/etc/permission/platform.xml
и группе необходимо упомянуть, как показано ниже.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    <group android:gid="sdcard_rw" />
    <group android:gid="media_rw" />    
</uses-permission>




У меня была такая же ошибка, когда я пытался записать изображение в папку DCIM / камера на Galaxy S5 (Android 6.0.1), и я понял, что только эта папка ограничена. Я просто мог написать в DCIM / любую папку, но не в камере. Это должно быть ограничение / настройка на основе бренда.


Когда ваше приложение относится к системному приложению, оно не может получить доступ к SD-карте.


имейте в виду, что даже если вы установили все правильные разрешения в манифесте: единственное место, в которое сторонним приложениям разрешено писать на вашу внешнюю карту, это «их собственные каталоги» (т.е. / sdcard / Android / data /), пытающиеся записать в в другом месте: вы получите исключение: EACCES (В доступе отказано)


Может быть, ответ таков:

на устройствах API> = 23, если вы устанавливаете приложение (приложение не является системным приложением), вы должны проверить разрешение на хранение в разделе «Настройки — приложения», для каждого приложения есть список разрешений, вы должны проверить его! пытаться


В моем случае я использовал библиотеку выбора файлов, которая возвращала путь к внешнему хранилищу, но он начинался с /root/. И даже с разрешением WRITE_EXTERNAL_STORAGE, предоставленным во время выполнения, я все равно получил ошибку EACCES (разрешение отклонено) .
Так что используйте, Environment.getExternalStorageDirectory()чтобы получить правильный путь к внешнему хранилищу.

Пример:
не могу написать: /root/storage/emulated/0/newfile.txt
могу написать: /storage/emulated/0/newfile.txt

boolean externalStorageWritable = isExternalStorageWritable();
File file = new File(filePath);
boolean canWrite = file.canWrite();
boolean isFile = file.isFile();
long usableSpace = file.getUsableSpace();

Log.d(TAG, "externalStorageWritable: " + externalStorageWritable);
Log.d(TAG, "filePath: " + filePath);
Log.d(TAG, "canWrite: " + canWrite);
Log.d(TAG, "isFile: " + isFile);
Log.d(TAG, "usableSpace: " + usableSpace);

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

Выход 1:

externalStorageWritable: true
filePath: /root/storage/emulated/0/newfile.txt
isFile: false
usableSpace: 0

Выход 2:

externalStorageWritable: true
filePath: /storage/emulated/0/newfile.txt
isFile: true
usableSpace: 1331007488



Environment.getExternalStoragePublicDirectory();

При использовании этого устаревшего метода с Android 29 и далее вы получите ту же ошибку:

java.io.FileNotFoundException: open failed: EACCES (Permission denied)

Разрешение здесь:

getExternalStoragePublicDirectory устарела в Android Q


Для тех, кто приходит сюда из результатов поиска и ориентируется на Android 10: Android 10 (API 29) меняет некоторые разрешения, связанные с хранением.

Я исправил эту проблему, когда заменил свои предыдущие экземпляры Environment.getExternalStorageDirectory()(что устарело в API 29) наcontext.getExternalFilesDir(null) .

Обратите внимание, что context.getExternalFilesDir(type) может возвращать ноль, если место хранения недоступно, поэтому обязательно проверяйте это всякий раз, когда проверяете, есть ли у вас внешние разрешения.

Узнайте больше здесь .


Я создаю папку в / data / в моем init.rc (возиться с aosp на Nexus 7) и имел именно эту проблему.

Оказалось, что предоставления разрешения для папки rw (666) было недостаточно, и это должно было быть rwx (777), тогда все работало!


Применение разрешений на хранение после 6.0 можно обойти, если у вас есть рутированное устройство с помощью этих команд adb:

root@msm8996:/ # getenforce
getenforce
Enforcing
root@msm8996:/ # setenforce 0
setenforce 0
root@msm8996:/ # getenforce
getenforce
Permissive


Добавить разрешение в манифест.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



У меня была такая же проблема (API> = 23).

Решение https://stackoverflow.com/a/13569364/1729501 у меня сработало, но отключить приложение для отладки было непрактично.

Мое решение состояло в том, чтобы установить правильный драйвер устройства ADB на Windows. Драйвер USB Google не работает для моего устройства.

ШАГ 1: Загрузите драйверы adb для вашего устройства.

ШАГ 2: Зайдите в диспетчер устройств -> другие устройства -> найдите записи со словом «adb» -> выберите «Обновить драйвер» -> укажите местоположение на шаге 1


после добавления разрешения решил мою проблему

<uses-permission android:name="android.permission.INTERNET"/>


Добавить зависимости gradle

implementation 'com.karumi:dexter:4.2.0'

Добавьте ниже код в вашей основной деятельности.

import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {


                checkMermission();
            }
        }, 4000);
    }

    private void checkMermission(){
        Dexter.withActivity(this)
                .withPermissions(
                        android.Manifest.permission.READ_EXTERNAL_STORAGE,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        android.Manifest.permission.ACCESS_NETWORK_STATE,
                        Manifest.permission.INTERNET
                ).withListener(new MultiplePermissionsListener() {
            @Override
            public void onPermissionsChecked(MultiplePermissionsReport report) {
                if (report.isAnyPermissionPermanentlyDenied()){
                    checkMermission();
                } else if (report.areAllPermissionsGranted()){
                    // copy some things
                } else {
                    checkMermission();
                }

            }
            @Override
            public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                token.continuePermissionRequest();
            }
        }).check();
    }


В моем случае ошибка появлялась на линии

      target.createNewFile();

так как я не мог создать новый файл на SD-карте, поэтому мне пришлось использовать подход DocumentFile.

      documentFile.createFile(mime, target.getName());

Для вышеуказанного вопроса проблема может быть решена с помощью этого подхода,

    fos=context.getContentResolver().openOutputStream(documentFile.getUri());

См. Также эту ветку.
Как использовать новый API доступа к SD-карте, представленный для Android 5.0 (Lollipop)?

howyummy's avatar

Published: Feb 5, 2015

Description

As you all know, this floating panels thing in SAI seems legit (and it actually is) but then I saw that people were having the same problem as I did, even though they were admins (or not, IDK, I’m just gonna assume they are). After conducting research via Google, I finally found a solution. If some of you are still having complications, I can try to help you out. I’m honestly bad at explaining things. I’m tagging this with a bunch of BS things to spread this around.

SageMint + WyrmsRoost
Guys I made a thing and thought I’d tag you two in it since you two are helpful.

Image details

Image size

918x1322px 203.19 KB

  • Ошибка s1023 при установке directx
  • Ошибка safetynet api magisk manager
  • Ошибка s101 гбо ловато
  • Ошибка safety net api magisk
  • Ошибка scania gms 50000