Дополнительно
Программная установка приложения на Android
Меня интересует, возможно ли программно установить динамически загруженный apk из пользовательского приложения Android.
199
15
Вы можете легко запустить ссылку на магазин Play или приглашение к установке:
или
Однако вы не можете установить .apks без явного разрешения пользователя; только если устройство и ваша программа не рутированы.
У меня была та же проблема, и после нескольких попыток мне помог этот способ. Я не знаю почему, но установка данных и типа отдельно испортила мой замысел.
Все решения, приведенные в этом вопросе, применимы к
targetSdkVersion
от 23 и ниже. Однако для Android N, т.е. API уровня 24 и выше, они не работают и приводят к сбою со следующим исключением:Это связано с тем, что, начиная с Android 24, изменился
Uri
для обращения к загруженному файлу. Например, установочный файл с именемappName.apk
, хранящийся в первичной внешней файловой системе приложения с именем пакетаcom.example.test
, будет иметь видfile:///storage/emulated/0/Android/data/com.example.test/files/appName.apk
.для
API 23
и ниже, тогда как что-то вродедля
API 24
и выше.Более подробную информацию об этом можно найти здесь, и я не буду вдаваться в подробности.
Чтобы ответить на вопрос для
targetSdkVersion
от24
и выше, нужно выполнить следующие шаги: Добавьте следующее в AndroidManifest.xml:paths.xml
в папкуxml
наres
в src, main:Имя
pathName
- это имя, показанное в примере uri содержимого выше, аpathValue
- это фактический путь в системе. Было бы неплохо поставить "." (без кавычек) для pathValue в вышеприведенном примере, если вы не хотите добавлять дополнительный подкаталог.appName.apk
на основную внешнюю файловую систему:При записи в личный каталог вашего приложения на внешней файловой системе также не требуется разрешение.
Я написал библиотеку AutoUpdate здесь, в которой я использовал вышеописанное.
Что ж, я копнул глубже и нашел исходники приложения PackageInstaller из Android Source.
https://github.com/android/platform_packages_apps_packageinstaller
Из манифеста я обнаружил, что оно требует разрешения:
А сам процесс установки происходит после подтверждения
Я просто хочу поделиться тем, что мой apk файл был сохранен в каталог "Data" моего приложения и что мне нужно было изменить разрешения на apk файл, чтобы он был доступен для чтения, чтобы позволить ему быть установленным таким образом, иначе система выдавала "Ошибка разбора: There is a Problem Parsing the Package"; так что, используя решение от @Horaceman, получается:
Это может очень помочь другим!
Первый:
Второе: Для android 7 и выше вы должны определить провайдера в манифесте, как показано ниже!
Третье: Определите path.xml в папке res/xml, как показано ниже! Я использую этот путь для внутреннего хранилища, если вы хотите изменить его на что-то другое, есть несколько способов! Вы можете перейти по этой ссылке: FileProvider
Порт: Вы должны добавить это разрешение в манифест:
Другое решение, которое не требует жесткого кодирования принимающего приложения и поэтому является более безопасным:
Да, это возможно. Но для этого нужно, чтобы телефон устанавливал непроверенные источники. Например, slideMe делает это. Я думаю, лучшее, что вы можете сделать, это проверить, присутствует ли приложение, и отправить намерение для Android Market. вы должны использовать что-то вроде схемы url для android Market.
Я не знаю точно, как запустить активность, но если вы запустите активность с таким url. Он должен открыть android market и дать вам выбор для установки приложений.
Стоит отметить, что если вы используете
DownloadManager
для запуска загрузки, не забудьте сохранить его во внешнее местоположение, например,setDestinationInExternalFilesDir(c, null, ").apk";
. Намерение с типом package-archive, похоже, не любит схемуcontent:
, используемую для загрузки во внутреннее место, но любитfile:
. (Попытка обернуть внутренний путь в объект File и затем получить путь также не работает, даже если в результате получаетсяfile:
url, поскольку приложение не будет разбирать apk; похоже, что он должен быть внешним).Пример:
попробуйте это
Просто расширение, если кому-то нужна библиотека, то это может помочь. Спасибо Raghav
UpdateNode предоставляет API для Android для установки пакетов APK изнутри другого приложения.
Вы можете просто определить свой UpdateNode и интегрировать API в свое приложение - вот и все.
В настоящее время API находится в состоянии Beta, но вы уже можете провести некоторые тесты самостоятельно.
Кроме того, UpdateNode предлагает также отображение сообщений через систему - довольно полезно, если вы хотите сообщить что-то важное своим пользователям.
Я являюсь частью команды разработчиков клиента и использую, по крайней мере, функциональность сообщений для своего собственного приложения для Android.
Смотрите здесь описание того, как интегрировать API
Сначала добавьте следующую строку в AndroidManifest.xml :
Затем используйте следующий код для установки apk:
Не забудьте запросить разрешения:
Добавьте в AndroidManifest.xml провайдера и разрешение:
Создайте XML файл провайдера res/xml/provider_paths.xml
Используйте приведенный ниже код примера:
Попробуйте это
Напишите в манифесте:
uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions"
Напишите код: