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

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.

4 ответа

Отключение мгновенного запуска исправлено для меня

Перейдите к настройкам > Builld, Execution, Deployment > Instant Run

Затем снимите флажок Включить мгновенный код “Запустить на” горячую “замену…

Сорб из комментариев здесь

А также не забудьте сообщить об ошибке, чтобы исправлять ошибки Google.

Mohamed Hajr
08 март 2017, в 08:20

Поделиться

Я решил эту проблему, отключив оптимизацию MIUI.

Для этого перейдите к settingdeveloperOptionsMIUI Optiomization.

Tara
28 апр. 2017, в 06:35

Поделиться

Пожалуйста, попробуйте очистить свой проект, а затем проверить его. Если он еще не будет решен, попробуйте освободить некоторое пространство с вашего устройства, потому что эта ошибка может возникнуть из-за озерного пространства в памяти устройства. Пожалуйста, проверьте их в обоих направлениях.

Pratik Dasa
29 апр. 2016, в 06:15

Поделиться

Может быть только Отключение мгновенного запуска – правильное решение. Удаление студии Android или создание нового виртуального устройства не решит проблему.

Настройка → развернуть (сборка, выполнение, развертывание) —- > Мгновенный запуск (снимите флажок Включить мгновенный запуск до режима “горячей замены” )

RAHINUR RAHMAN
17 июль 2017, в 04:26

Поделиться

Ещё вопросы

  • 0Что заставляет FireFox сдвигать поплавок влево на 50%?
  • 1Android: небуферизованный ввод-вывод
  • 1Linq Возвращение случайных объектов после объединения
  • 0Существует ли какая-либо библиотека C / C ++, поддерживающая чтение / запись TIFF с 32-разрядными образцами?
  • 1Работа с платформой Entity с несколькими базами данных
  • 0Как выполнить операцию соединения для следующей таблицы?
  • 0Передача / анализ большого количества данных формы в бэкэнд PHP
  • 0AngularJS / Javascript – Как я могу заменить весь объект на JSON
  • 1Почему TextView не может отображать форматированный текст, ссылающийся на ресурсы Android?
  • 1JavaScript. Ссылка на переменную, которая создается динамически
  • 1Невозможно загрузить torchvision, несмотря на то, что он установлен
  • 0Неверно сформированный URL передан фабрике angularjs
  • 0Добавление большого количества html и php контента как переменной PHP
  • 0Почему эта операция не дает мне большей точности?
  • 0Функция заголовка php перенаправляет только на локальные страницы
  • 0Установите PK из аннотаций ManyToMany в сущности Doctrine2
  • 0Ошибка: ожидаемый идентификатор
  • 0Сбор продукта и фильтр Magento
  • 1Подсчет уникальных значений по группам в двух столбцах
  • 0Как я могу обновить ту же запись SqlServer внутри цикла sqlsrv_fetch_array?
  • 0Подключите локальный хост Mysql из ядра Docker .net
  • 0Вырезать первый символ из элемента абзаца, заменить содержимое и добавить класс. JQuery
  • 1Размер бита System.ConsoleColor
  • 0Ширина Flexbox нарушена в IE
  • 0шаблон underscore.js не принимает jquery-данные ролей и классов
  • 1Unity – CommandInvokationFailure: сборка Gradle завершилась неудачно
  • 1JavaScript: слишком много рекурсии?
  • 1динамически создавать таблицы ссылок и переименовывать их в доступе 2007/2003 с помощью c #
  • 1Java – длина буфера для записи файла
  • 0MySQL 5.7 изменяет блокировку оператора DDL таблицы, но должна допускать одновременный DML
  • 0asp.net получает данные из запроса
  • 1Как проверить новые значения в LSTM в python
  • 1правильный ООП и гибкость между классами в Java
  • 1Python GUI, который поддерживает интерфейс как CSS & HTML?
  • 0вернуть все уникальные каталоги в иерархии
  • 1Как использовать сеттеры для пользовательского представления в RecyclerView?
  • 0Нужно ли удалять этот объект? (если я не собираюсь когда-либо удаляться)
  • 0C ++ Статическая Декларация
  • 0Angular – Mocha – Тесты не выполняются, когда я добавляю несколько контроллеров к одному модулю
  • 1Найти совпадающее содержимое и длину массива в одном внутреннем свойстве
  • 0подсчет букв верхнего регистра в рекурсивной функции
  • 1Связывание метки с переменной
  • 0Элементы таблицы и неупорядоченные списки нельзя просматривать должным образом во всех версиях Internet Explorer
  • 1Подсчитать количество каждого символа в строке
  • 1рекурсивный алгоритм для файловой структуры для одного типа файла
  • 0выпадающий – используйте jquery в mvc
  • 0Может ли контроллер модального окна работать в родительском контроллере?
  • 1Скрипт копирования файлов Python
  • 1Как ASP.NET вызывает события на клиенте?
  • 0Отдельное число от строки в smarty

I have an app with Device Owner permissions and i’m trying to install another app silently. I’m using PackageInstaller API for this and an apk file which is in my assets folder. its running well but returning an intent with STATUS_FAILURE and message INSTALL_FAILED_INTERNAL_ERROR: Permission Denied.

I followed this answer to write my AppInstaller class:

class AppInstaller {

companion object {
    const val ACTION_INSTALL_COMPLETE = "my.package.name.INSTALL_COMPLETE"
}

@Throws(IOException::class)
fun installPackage(context: Context, fileName: String, packageName: String): Boolean {
    val input = context.assets.open(fileName)
    val packageInstaller = context.packageManager.packageInstaller
    val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
    params.setAppPackageName(packageName)
    // set params
    val sessionId = packageInstaller.createSession(params)
    val session = packageInstaller.openSession(sessionId)
    val out = session.openWrite("DPC", 0, -1)
    val buffer = ByteArray(65536)
    var c = input.read(buffer)
    while (c != -1) {
        out.write(buffer, 0, c)
        c = input.read(buffer)
    }

    session.fsync(out)
    input.close()
    out.close()

    session.commit(createIntentSender(context, sessionId))
    return true
}

private fun createIntentSender(context: Context, sessionId: Int): IntentSender {
    val pendingIntent = PendingIntent.getBroadcast(context, sessionId, Intent(ACTION_INSTALL_COMPLETE), 0)
    return pendingIntent.intentSender
}
}

I tried with and without these permissions:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.DELETE_PACKAGES" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

the result of this code is true

dpm.isDeviceOwnerApp("my.package.name")

by this aosp code and as describe in android docs:

Committing may require user intervention to complete the installation, unless the caller falls into one of the following categories, in which case the installation will complete automatically.

the device owner

the affiliated profile owner

the device owner delegated app with DevicePolicyManager.DELEGATION_PACKAGE_INSTALLATION

Sessions can install brand new apps, upgrade existing apps, or add new splits into an existing app.

so i should have permissions.

Any ideas why i get this error?
thanks.

Мой апк обновляется в настоящее время через новый apk, устанавливаемый поверх старого (без перезаписи локальной базы данных или настроек).

Так как Android 10 (API 29) ACTION_VIEW устарел, так что это больше не работает:

Intent intent = new Intent(Intent.ACTION_VIEW);
//output file is the apk downloaded earlier
intent.setDataAndType(Uri.fromFile(outputFile), "application/vnd.android.package-archive");
startActivity(intent);

После разных ответов, которые я нашел в Интернете, мне нужно вместо этого начать использовать PackageInstaller. Глядя на демонстрацию, найденную в документации для Android, я получаю следующее:

Intent intent = new Intent(PSMentorActivity.this,InstallApkSessionApi.class);
intent.putExtra("apkFile",outputFile);
this.startActivity(intent);

Где InstallApkSessionApi содержит кнопку, которая при нажатии должна запустить окно установки:

PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new 
    PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int sessionId = packageInstaller.createSession(params);
session = packageInstaller.openSession(sessionId);
addApkToInstallSession(file, session);
// Create an install status receiver.
Context context = InstallApkSessionApi.this;
Intent intent = new Intent(context, InstallApkSessionApi.class);
intent.setAction(PACKAGE_INSTALLED_ACTION);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
IntentSender statusReceiver = pendingIntent.getIntentSender();
// Commit the session (this will start the installation workflow).
session.commit(statusReceiver);

Достаточно просто, хотя и сложнее по сравнению с прошлым. Ответ, который я получаю в onNewIntent, всегда такой:

 case PackageInstaller.STATUS_FAILURE:
              Toast.makeText(this, "Install failed!10 " + status + ", " + message,
                            Toast.LENGTH_SHORT).show();
              break;

Где статус и сообщение принимают следующие значения: status=1, message= "INSTALL_FAILED_INTERNAL_ERROR: Permission denied".

Поэтому я предположил, что это проблема с разрешениями. У меня уже были разрешения на чтение и запись в хранилище. Другие связанные разрешения: INSTALL_PACKAGES и REQUEST_INSTALL_PACKAGES, которые я не могу использовать из-за того, что первое не предназначено для использования третьей стороной, а второе – уровень подписи.

Есть что-то, чего мне ужасно не хватает, или я не могу обновить свой Apk, не пройдя Google Play?

2 ответа

Лучший ответ

Я столкнулся с той же проблемой и попробовал таким же образом (PackageInstaller), как и вы. Не работает Итак, вот решение для вас,

if(android.os.Build.VERSION.SDK_INT >= 29){
       Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
       intent.setData(Uri.fromFile(outputFile));
       intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
       startActivity(intent);   
}else{
      Intent intent = new Intent(Intent.ACTION_VIEW);
      //output file is the apk downloaded earlier
      intent.setDataAndType(Uri.fromFile(outputFile), "application/vnd.android.package- 
      archive");
      startActivity(intent);
}

Я тестировал в Android 10 (Google Pixel 2, One + 7, Samsung s10), он работает нормально. Если вы все еще сталкиваетесь с какой-либо проблемой, пожалуйста, дайте мне знать. Примечание. Ваш код версии должен быть больше старого.


1

Vijay
17 Янв 2020 в 10:15

Так что после помощи и еще нескольких поисков в отличном интернете, я смог заставить оба метода работать на меня. Я до сих пор не понимаю, в чем причина проблемы. Ранее я создавал Uri, используемый в намерении, из файла непосредственно с Uri.fromFile(file). Это работает для всего под Android 10. Новый способ справиться с этим – использовать провайдера и получить файл с его помощью.

  1. Текущий метод, который будет использоваться некоторое время, пока я не смогу правильно реализовать установку PackageManager (все еще есть некоторые проблемы, которые нужно исправить).
Uri urlapk = FileProvider.getUriForFile(this,BuildConfig.APPLICATION_ID+".fileProvider",outputFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(urlapk, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
  1. Использование PackageManager, как указано в моем вопросе, со следующим отличием (inputStream теперь строится из Uri):
private void addApkToInstallSession(Uri uri, PackageInstaller.Session session)
            throws IOException {
        try (OutputStream packageInSession = session.openWrite("package", 0, -1);
             InputStream is = getContentResolver().openInputStream(uri)) {
            byte[] buffer = new byte[16384];

            int n;
            while ((n = is.read(buffer)) >= 0) {
                packageInSession.write(buffer, 0, n);
            }
        }
}

Основная проблема, с которой я сталкиваюсь в PackageManager, заключается в том, что он закрывает мое приложение во время установки, не предоставляя пользователю никаких отзывов по умолчанию. Так что, думаю, мне придется «сделать» эту обратную связь. Я перейду к PackageManager, так как ACTION_VIEW устарела для apks.


0

That guy who is bad at math
17 Янв 2020 в 13:35

When I use Eclipse to deploy an Opengl ES app to device I get following error

[2011-09-19 15:56:40 - SimpleCube] Failed to install SimpleCube.apk on device 'S5830bfcc8426': Permission denied
[2011-09-19 15:56:40 - SimpleCube] com.android.ddmlib.SyncException: Permission denied
[2011-09-19 15:56:40 - SimpleCube] Launch canceled!

It used to work before. But now I flashed my phone with GingerReal 1.2 ROM and when I try to run the app it gives out this error.
I have enabled ‘Unknown Sources’ and ‘USB Debugging’.

EDIT: Dunno whether this helps.. but i tried using “adb install” directly. But still it failed. I got the following:

sinu@ubuntu:~$ ./adb install /home/sinu/programs/SimpleCube.apk
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
failed to copy '/home/sinu/programs/SimpleCube.apk' to '/data/local/tmp/SimpleCube.apk': Permission denied

asked Sep 19, 2011 at 10:52

sinujohn's user avatar

sinujohnsinujohn

2,4863 gold badges21 silver badges26 bronze badges

I had the same problem so i checked this folder /data/local/tmp and discovered it didn’t have r/w permissions for everyone:

drwxrwx–x shell shell 1970-01-02 03:21 tmp

A simple ‘chmod 777 tmp’ fixed it, so now i can freely debug from eclipse.

I’m not sure if this relevant for other people because i was working on a beta release of some vendor’s device.

answered Mar 12, 2012 at 8:29

thedawn's user avatar

thedawnthedawn

1211 silver badge3 bronze badges

0

Добавить комментарий