Application vnd android package archive телеграмм

Пишем свой Android Market

В рамках работы над большим количеством android приложений появилось желание создать свой Android Market на локальном сервере (с шахматами и поэтессами).
Свой маркет должен решать две простые задачи:

  • Распространение и обновление корпоративных приложений. У нас есть набор внутри корпоративных приложений, которые нельзя публиковать на Google Play. Сейчас пользователи оповещаются о новых версиях по емайлу, что не удобно.
  • Бета тестирование заказных приложений на большой группе коллег, с обратной связью.

И так, нам необходимо реализовать небольшое Android приложение, которое будет скачивать список доступных приложений, проверять наличие обновлений для уже установленных, устанавливать/удалять приложения.

Серверная часть

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

В моем случае серверной частью фактически выступает http шара.
Данный xml файл в приложении трансформируется в список приложений, доступных для установки.

Установка

Пользователь выбирает нужное ему приложение и устанавливает,
Маркет скачивает apk файл на флешку устройства и инициирует установку приложения, конечно, должна быть разрешена установка из сторонних источников.
Установить незаметно в фоне мы не можем, поэтому после выполнения данного кода:

Пользователь увидит стандартное окно установки приложений:

Обновление

Приложение Market может по определенному интервалу проверять наличие новых версий, делается это достаточно просто, так как доступен список всех установленных приложений:

В случае необходимости обновления приложения, повторяем процесс Установки, приложение будет обновлено.

Удаление

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

Обратная связь

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

Для этого в каждое приложение, распространяемое через наш Маркет добавляем следующий класс

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

А в Application классе включаем переадресацию всех сообщений об ошибках в этот хендлер

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

В самом Маркете мы просто отлавливаем данное сообщение:

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

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

ps: В статье использован исходный код и картинки взятые из прототипа приложения.

Источник

Программная установка приложения на Android

Мне интересно узнать, можно ли программно установить динамически загружаемый apk из пользовательского приложения Android.

Читайте также:  Google android one mobile details

16 ответов

Вы можете легко запустить рыночную ссылку или запрос на установку:

Однако вы не можете установить .apks без явного разрешения пользователя; нет, если устройство и ваша программа не рутированы.

Сначала добавьте в AndroidManifest.xml следующую строку:

Затем используйте следующий код для установки apk:

UpdateNode предоставляет API для Android для установки пакетов APK из другого приложения.

Вы можете просто определить свое обновление онлайн и интегрировать API в свое приложение — вот и все.
В настоящее время API находится в состоянии бета-тестирования, но вы уже можете провести некоторые тесты самостоятельно.

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

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

Попробуйте это — напишите в манифесте:

У меня была такая же проблема, и после нескольких попыток у меня все получилось. Я не знаю почему, но установка данных и типа по отдельности испортила мои намерения.

Все решения, представленные на этот вопрос, применимы к targetSdkVersion из 23 и ниже. Однако для Android N, то есть уровня API 24 и выше, они не работают и вылетают из-за следующего исключения:

Это связано с тем, что начиная с Android 24 изменился Uri для адресации загруженного файла. Например, установочный файл с именем appName.apk , хранящийся в основной внешней файловой системе приложения с именем пакета com.example.test , будет выглядеть как

Для API 23 и ниже, тогда как что-то вроде

Для API 24 и выше.

Более подробную информацию об этом можно найти здесь, и я не собираюсь через это проходить.

Чтобы ответить на вопрос для targetSdkVersion из 24 и выше, необходимо выполнить следующие действия: Добавьте в AndroidManifest.xml следующее:

2. Добавьте следующий файл paths.xml в папку xml на res в src, main:

pathName — это то, что показано в приведенном выше примере uri содержимого, а pathValue — это фактический путь в системе. Было бы неплохо поставить «.» (без кавычек) для pathValue в приведенном выше примере, если вы не хотите добавлять дополнительные подкаталоги.

Напишите следующий код для установки apk с именем appName.apk в первичной внешней файловой системе:

При записи в личный каталог вашего собственного приложения во внешней файловой системе разрешение также не требуется.

Я написал здесь библиотеку AutoUpdate, в которой я использовал вышеуказанное.

Что ж, я покопался глубже и нашел исходники приложения PackageInstaller из Android Source.

Из манифеста я обнаружил, что для этого требуется разрешение:

И собственно процесс установки происходит после подтверждения.

Я просто хочу поделиться тем фактом, что мой apk-файл был сохранен в каталоге «Data» моего приложения и что мне нужно было изменить права доступа к apk-файлу, чтобы он был доступен для чтения всем, чтобы его можно было установить таким образом, иначе система выдавал «Ошибка синтаксического анализа: возникла проблема при синтаксическом анализе пакета»; поэтому используя решение от @Horaceman, которое делает:

Это может очень помочь другим!

Первое:

Во-вторых: для Android 7 и более поздних версий вы должны указать поставщика в манифесте, как показано ниже!

В-третьих: определите path.xml в папке res / xml, как показано ниже! Я использую этот путь для внутреннего хранилища, если вы хотите изменить его на что-то другое, есть несколько способов! Вы можете перейти по этой ссылке: FileProvider

Читайте также:  Время для драконов андроид

Четвертый: Вы должны добавить это разрешение в манифест:

Позволяет приложению запрашивать установку пакетов. Для использования Intent.ACTION_INSTALL_PACKAGE приложения, ориентированные на API-интерфейсы более 25, должны иметь это разрешение.

Убедитесь, что полномочия провайдера совпадают!

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

Не забываем запрашивать разрешения:

Добавьте в AndroidManifest.xml поставщика и разрешение:

Создайте поставщик XML-файлов res / xml / provider_paths.xml

Используйте приведенный ниже пример кода:

Да, это возможно. Но для этого вам понадобится телефон для установки непроверенных источников. Например, это делает slideMe. Я думаю, что лучшее, что вы можете сделать, — это проверить, присутствует ли приложение, и отправить намерение для Android Market. вы должны использовать схему URL для Android Market.

Я точно не знаю, как начать действие, но если вы начнете действие с таким URL-адресом. Он должен открыть рынок Android и предоставить вам выбор для установки приложений.

Стоит отметить, что если вы используете DownloadManager для начала загрузки, обязательно сохраните ее во внешнем расположении, например setDestinationInExternalFilesDir(c, null, » ).apk»; . Намерению с типом пакет-архив, похоже, не нравится схема content: , используемая для загрузки во внутреннее расположение, но нравится file: . (Попытка обернуть внутренний путь в объект File, а затем получить путь, тоже не работает, даже если это приводит к URL-адресу file: , поскольку приложение не анализирует apk; похоже, что это должно быть внешний.)

В Android Oreo и более поздних версиях мы должны использовать разные методы для программной установки apk.

В версии Oreo и выше нам нужно разрешение на установку неизвестного ресурса. поэтому в результате действия вы должны проверить результат на разрешение

Просто расширение, если кому-то нужна библиотека, может помочь . Спасибо Рагхаву

Источник

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

Установка приложения под Android 8.0

каталог

Предисловие. После обновления системы Android до версии 8.0 Google удалил коммутатор для установки неизвестных приложений (все приложения, которые первоначально включили этот коммутатор, предоставили бы это разрешение), и заменил его списком управления приложениями из неизвестных источников. Установите разрешения для приложений из неизвестных источников. Если вы не обрабатываете разрешения этого неизвестного источника, он заблокирует внутреннее приложение, чтобы начать процесс установки, что приведет к тому, что приложение вообще не сможет быть обновлено и может быть загружено только снова на рынке приложений.

Так как бороться с этим разрешением?

1. Процесс установки приложения

1. Сначала поговорим о процессе установки до 8.0:

Скачайте приложение с сервера на локальный >> Откройте код приложения установки >> Установка завершена

2. Процесс установки приложения после 8.0:

Загрузите приложение с сервера на локальный >> Код, чтобы открыть интерфейс приложения источника местоположения установки >> Предоставить разрешения >> Откройте код приложения установки >> Установка завершена

Где «Код открывает интерфейс приложения источника местоположения установки» будет блокировать процесс установки приложенияПроцесс установки не может продолжаться, пока вы не получите разрешение на установку неизвестных приложений.

3. Чтобы смоделировать загрузку обновлений приложений из Интернета, я поместил приложение непосредственно во внутреннее хранилище, нажал «Установить» и непосредственно выполнил процесс установки 8.0.

2. Сначала обратитесь за разрешением

Обработка прав чтения SD-карты, код выглядит следующим образом:

3. Нажмите кнопку, чтобы установить приложение

Код прост, кнопка для выполнения установки

4. Проверьте, есть ли у вас разрешения для неизвестных источников приложения

Комментарий очень ясен, здесь упоминаются только ключевые моменты: boolean b = getPackageManager (). CanRequestPackageInstalls (); эта строка кода проверяет, есть ли у вас разрешения для неизвестных источников приложения. Если у вас есть прямая установка, Откройте интерфейс неизвестного источника приложения без него. Обратите внимание, что это не то же самое, что подать заявку на разрешения во время выполнения (Многие люди путают разрешения во время выполнения!)

Читайте также:  Activity класс android studio

Обработайте результат обратного вызова в onActivityResult (), код выглядит следующим образом:

5. Выполните процесс установки

Выполните код установки:

Здесь нужно сказать, что параметр uri в intent.setDataAndType (uri, «application / vnd.android.package-archive») также должен быть адаптирован для систем 7.0 и выше, а поставщик должен быть установлен.

Я помещаю приложение прямо в корневой каталог:

Поставщик настроен следующим образом:

Файл file_paths_public.xml выглядит следующим образом:

путь = «.» означает корневой каталог внутреннего хранилища

Это введено в части провайдера, поэтому я не буду повторять это здесь.

Вы почти закончили, но есть несколько вещей, на которые стоит обратить внимание:

1. Для установки приложений из внутреннего хранилища необходимы разрешения времени выполнения SDCard. Если у вас нет этого разрешения, появится сообщение об ошибке разбора!

2. При запуске интерфейса установки intent.setDataAndType (uri, «application / vnd.android.package-archive»), пожалуйста, не забудьте выполнить адаптацию 7.0 в uri!

3. При тестировании apk, apk, помещенный во внутреннюю директорию хранилища, должен быть собран через build >> Build Apk (s), в противном случае приложение получит запрос, что оно не установлено во время установки! Смотри ниже

Поэтому, когда вы решите адаптироваться к 8.0, вы должны заняться другими адаптациями!

Источник

Установить приложение программно на Android

Мне интересно знать, возможно ли программно установить динамически загруженный apk из пользовательского приложения для Android.

Вы можете легко запустить ссылку на магазин Play Play или приглашение к установке:

Однако вы не можете установить .apks без явного разрешения пользователя ; нет, если устройство и ваша программа не рутированы.

У меня была такая же проблема, и после нескольких попыток у меня все получилось. Я не знаю почему, но установка данных и типа по отдельности провалила мои намерения.

Решения, предоставленные на этот вопрос, все применимы к targetSdkVersion с 23 и ниже. Однако для Android N, то есть уровня API 24 и выше, они не работают и аварийно завершают работу со следующим исключением:

Это связано с тем, что, начиная с Android 24, Uri изменился адрес для загруженного файла. Например, установочный файл с именем, appName.apk хранящимся в основной внешней файловой системе приложения с именем пакета, com.example.test будет иметь вид

для API 23 и ниже, тогда как что-то вроде

за API 24 и выше.

Более подробную информацию об этом можно найти здесь, и я не собираюсь проходить через это.

Чтобы ответить на вопрос targetSdkVersion о 24 и выше, необходимо выполнить следующие шаги: Добавьте следующее в AndroidManifest.xml:

2. Добавьте следующий paths.xml файл в xml папку res в src, main:

Это pathName то, что показано в приведенном выше примере содержимого и pathValue является фактическим путем в системе. Было бы неплохо поставить «.» (без кавычек) для pathValue в приведенном выше, если вы не хотите добавлять какие-либо дополнительные подкаталоги.

Напишите следующий код для установки apk с именем appName.apk в основной внешней файловой системе:

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

Я написал здесь библиотеку автообновления, в которой я использовал вышеизложенное.

Источник

Оцените статью