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

Install failed permission denied как исправить internal error Новая версия 1.1Changelog:Fix..fix.fix. sai.apk ( 1.82 МБ ) Сообщение отредактировал Dan-Tiguan — 15.12.18, 18:20 Это приложения у которых графика качается именно под девайс. Если я не прав, то исправьте меня. Сообщение отредактировал Leyzymoy — 16.12.18, 00:53 Мульти APK — это такая фишка от Google, которая разделяет […]

Содержание

  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». Скорее всего решение нагуглится.

Источник

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

Поделиться

Ещё вопросы

  • 1Android TextView и как определить количество видимых символов
  • 1C # 5.0 в двух словах
  • 0Ошибка sql syntanx Я хочу сравнить две таблицы данных в одном запросе
  • 0После вычитания 4 соседних пикселей всегда дают ноль
  • 0Ошибка ActiveXObject при запуске из приложения HTML или приложения Flex
  • 0Создать список пользователей в C ++
  • 0Почему пользовательский интерфейс не отображается после перезагрузки?
  • 0Структура папок / файлов ZEND Framework
  • 0дата не вводится в БД через DatePicker
  • 0Проблемы с MVC 4 и нокаутом
  • 0Форма ввода используется в качестве параметров конструктора класса
  • 0AngularJS: формат ввода даты
  • 0Установить единичную матрицу, используя вектор векторов C ++
  • 0HTML не полностью жидкий
  • 0jQuery Mobile переходит на предыдущую страницу
  • 1Путаница в стилях загрузки классов
  • 1Несколько инструкций в инструкции возврата переключателя
  • 0извлечь список функций в заголовочном файле
  • 1Угловая маршрутизация 2 внутри компонента не работает (this.router.navigate не работает)
  • 0MySql сортировать по результату от функции
  • 1Ошибка создания бина для org.springframework.beans.propertyeditors.StringTrimmerEditor
  • 1W8.1 Live SDK 5.6 — LiveAuthClient.InitializeAsync System.NullReferenceException
  • 1Sequelize & Express модель и ассоциированная установка
  • 0angularjs скрыть / показать кнопку добавления после сохранения / создания
  • 1WCF WebInvoke POST null для всех параметров
  • 0щелкните внутри модального окна
  • 0Можем ли мы проверить указатель, чтобы убедиться, что это правильный адрес?
  • 1Ограничить количество касаний на Android?
  • 0Как выполнить событие нажатия одной кнопкой, чтобы выбрать другой DIV
  • 1Как использовать значение для переменной driver.find_element_by_id
  • 0Перегрузка оператора C ++ со ссылкой на значение
  • 1Конвертировать сгруппированные записи в DataFrame
  • 1WPF DataGrid — связать свойство dataitem как CommandParameter
  • 1Разница забитых и пропущенных голов в Кубке Мира 2018 года
  • 0Mysql — Рекурсивный расчет баланса
  • 1снимок экрана для деятельности
  • 0Удалить / Скрыть последнее вхождение строки после ссылки
  • 1IIS 8.0 Express и WebSocket в Windows 8 не работают
  • 1Как нарисовать полноэкранный в Android?
  • 0JQuery. Замена текста в таблице приводит к неформатированию всей таблицы
  • 0Как настроить / etc / hosts в vagrant guest
  • 0Javascript Parent-Child элементы
  • 1Сервисный класс Spring содержит слишком много методов поиска
  • 0Прокрутите назад до позиции DIV из JS / Jquery
  • 1В каталоге тестирования py.test для модуля python импортируйте файл для модуля
  • 0Скопируйте электронную таблицу Google Doc, используя PHP API
  • 1Наследование макета деятельности
  • 0Программа «Бродкаст»
  • 0jQuery для замены символов в строке для нескольких экземпляров класса
  • 0Как сделать приложение RequireJS модульным, т.е. загружать файлы на ходу, а не сразу

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.

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

Понравилась статья? Поделить с друзьями:
  • Install failed insufficient storage error
  • Innovate lc 2 ошибка 8
  • Innosilicon t2t error code 24
  • Innosilicon error codes
  • Innosilicon 161 error