Андроид как делать обновление своей программы

Реализация кода функции автоматического обновления приложения Android

Реализация кода функции автоматического обновления приложения Android

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

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

  1. < version >2
  2. < name >baidu_xinwen_1.1.0
  3. < url >http://gdown.baidu.com/data/wisegame/f98d235e39e29031/baiduxinwen.apk

Здесь я использую файл XML для легкого чтения. Поскольку содержимое файла XML является относительно небольшим, файл можно проанализировать с помощью метода DOM:

ОБНОВЛЕНИЯ АНДРОИД и GOOGLE PLAY о КОТОРЫХ МАЛО КТО ЗНАЕТ!!

  1. public class ParseXmlService
  2. public HashMap parseXml(InputStream inStream) throws Exception
  3. HashMap hashMap = new HashMap();
  4. // Создание фабрики документооборота
  5. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  6. // Получить конструктор документов через фабрику компоновщиков документов
  7. DocumentBuilder builder = factory.newDocumentBuilder();
  8. // Создание экземпляра документа через построитель документов через документ
  9. Document document = builder.parse(inStream);
  10. // Получить корневой узел файла XML
  11. Element root = document.getDocumentElement();
  12. // Получить все дочерние узлы
  13. NodeList childNodes = root.getChildNodes();
  14. for ( int j = 0 ; j < childNodes.getLength(); j++)
  15. // Обходить дочерние узлы
  16. Node childNode = (Node) childNodes.item(j);
  17. if (childNode.getNodeType() == Node.ELEMENT_NODE)
  18. Element childElement = (Element) childNode;
  19. // Номер версии
  20. if ( «version» .equals(childElement.getNodeName()))
  21. hashMap.put( «version» ,childElement.getFirstChild().getNodeValue());
  22. >
  23. // Название программного обеспечения
  24. else if (( «name» .equals(childElement.getNodeName())))
  25. hashMap.put( «name» ,childElement.getFirstChild().getNodeValue());
  26. >
  27. // Скачать адрес
  28. else if (( «url» .equals(childElement.getNodeName())))
  29. hashMap.put( «url» ,childElement.getFirstChild().getNodeValue());
  30. >
  31. >
  32. >
  33. return hashMap;
  34. >
  35. >

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

Как установить iOS 16

Код версии, полученный этим методом, соответствует android: versionCode в AndroidManifest.xml. Два атрибута android: versionCode и android: versionName соответственно представляют номер версии и имя версии. versionCode — это целое число, а versionName — это строка. Поскольку versionName предназначено для пользователей, сравнивать размер нелегко, вы можете проверить код версии во время проверки обновления. Сравнивая полученную версию приложения на мобильном телефоне с версией на стороне сервера, приложение может определить, нужно ли обновлять программное обеспечение.

Читайте также:
Программа 1 с автоматизирует такие разделы как

Поток обработки

Код обработки

Renderings

Проверьте, существует ли файл загрузки в симуляторе SDCARD:

Источник: russianblogs.com

Как можно программно обновлять своё приложение на android?

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

Отслеживать
задан 9 июл 2016 в 20:51
1,150 2 2 золотых знака 13 13 серебряных знаков 35 35 бронзовых знаков
Я вообще не понял о чем вы спросили ) Даже интересно что конкретно Вы имеете ввиду
9 июл 2016 в 20:53
9 июл 2016 в 21:04

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Стандартными средствами и без рута — никак.

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

Согласно en-SO, если у вы программно скачаете новый apk, у коего версия больше версии текущего и идентичные пакет и сертификат, то вы можете запустить системный Intent на обновление приложения так:

Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.fromFile(new File(pathToApk)); intent.setDataAndType(uri, «application/vnd.android.package-archive»); startActivity(intent);

Далее юзер должен будет, по идее, подтвердить установку обновления.

Если девайс рутован, то можно вот так запустить установку apk через систему без участия юзера:

public static void installNewApk() < try < Runtime.getRuntime().exec(new String[] ); > catch (IOException e) < System.out.println(e.toString()); System.out.println(«no root»); >>

Реализовать же логику запуска этого интента/команды можно примерно так:

  1. При первом запуске приложения запишите во внутренние ресурсы (sharedPrefereneces) номер версии.
  2. С к-л переодичностью проверяйте есть ли у вас где-то на к-л сервере новая версия.
  3. Если да — скачивайте apk и по завершении запускайте интент/команду.

Источник: ru.stackoverflow.com

Как внедрить In-app Updates в Android-приложение на React Native

В 2019 году Google выпустила In-app Updates — возможность обновлять Android-приложения без перехода в Google Play. Однако до сих пор довольно мало приложений поддерживают этот способ обновления.

Когда я внедрял In-app Updates в приложение Профи для специалистов — без сложностей не обошлось. Пришлось покопаться в документации, статьях и даже пару раз переписать реализацию.

Читайте также:
Как удалить программу с LG Smart TV

Чтобы меньше людей наступали на мои грабли, я сделал пошаговую инструкцию по интеграции In-app Updates в Android-приложение на React Native. Если следовать ей — сможете внедрить эту опцию за день.

Оговорка

Уже разработали несколько библиотек, инкапсулирующих реализацию In-app Updates. Например, эту или эту. Моя статья для тех, кто хочет добавить интеграцию самостоятельно.

Что будем делать

  1. Разберёмся, как тестировать эту фичу. Ведь она требует взаимодействия с Google Play.
  2. Поддержим immediate-обновления.
  3. Добавим поддержку flexible-обновлений.

Подготовка к тестированию

Нам придётся неоднократно тестировать код. Поэтому сперва разберёмся, как это делать.

Для проверки In-app обновлений Google разработала специальную тестовую среду, в которую можно загрузить apk-файл или bundle приложения и затем установить на устройство. Через неё же будем имитировать появление обновления.

Устанавливать приложения из тестовой среды можно как на реальные устройства, так и на эмуляторы. В любом случае нужно настроить Google Play (названия кнопок на вашем устройстве могут отличаться, но суть одна):

  • Заходим в Google Play, кликаем на своё фото, выбираем «Настройки».
  • В разделе «Сведения» кликаем много раз подряд на «Версию Google Play», пока не станем разработчиком.
  • Включаем тогл «Внутренний доступ к приложениям» в разделе «Личные» или «Общее».
  1. Собираем apk- или aab-файл приложения.

Для тестирования подойдёт обычная debug-сборка, без каких-либо подписей и js-бандлов. В Android Studio это Build -> Build Bundle(s) / APK(s) -> . Такое приложение после установки будет при запуске подключаться к js-бандлеру и загружать js-код.

Ещё к нему можно подключить дебаггер Android Studio, чтобы отлаживать нативный код. Для этого нужно нажать на «жучка со стрелочкой» в панели инструментов Android Studio (Attach debugger to Android Process) и выбрать запущенное приложение.

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

Советую добавлять к названию инкрементируемое число, чтобы не путаться. Тестирование вряд ли ограничится двумя-тремя сборками.

  1. Копируем ссылку на приложение, открываем на устройстве и устанавливаем.
  1. Готовим обновление.

Чтобы имитировать обновление, нужно повторить шаги 2–4 со следующими нюансами:

  • номер сборки (versionCode) должен быть больше номера установленной сборки;
  • желательно добавить изменения, которые заметны сразу при запуске. Так проще понять, что приложение обновилось;
  • устанавливать сборку не нужно. Надо перейти по ссылке и попасть на экран с кнопкой «Обновить» или Update.

Если не использовать Internal App Sharing — обновление будет недоступно.

Поддержка immediate-обновлений

Immediate-обновления почти полностью реализует Google. Нужно только запросить проверку на наличие новой версии. Если она есть, Google покажет пользователю полноэкранный баннер, загрузит, установит обновление и перезапустит приложение.

Читайте также:
К графическим редакторам относятся программы векторной графики

(Здесь и далее код на Kotlin и JavaScript)

Проверяем наличие новой версии. Если она есть, то запускаем обновление. APP_UPDATE_REQUEST_CODE — это числовая константа, определяющая наш запрос. С её помощью мы идентифицируем сигнал, если в процессе обновления произойдёт ошибка.

override fun onActivityResult( activity: Activity?, requestCode: Int, resultCode: Int, data: Intent? ) < if (requestCode == APP_UPDATE_REQUEST_CODE) < if (resultCode != Activity.RESULT_OK) < // Сделать что-нибудь с ошибкой >> >

Чтобы иметь возможность переопределить метод onActivityResult в нативном модуле, нужно реализовать интерфейс ActivityEventListener .

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

// AppUpdate — название нашего нативного модуля. NativeModules.AppUpdate.checkForAppUpdate();

И вуаля — всё работает.

  1. Поддержим установку обновления после сворачивания.

В процессе установки пользователь может свернуть приложение. Установка при этом должна продолжиться. А если пользователь вновь развернёт приложение, нужно убедиться, что процесс не остановился. Для этого добавим метод в нативном модуле:

Нужно вызывать его каждый раз, когда приложение становится активным. Для этого в React Native зарегистрируем слушателя изменений AppState :

componentDidMount() < AppState.addEventListener(‘change’, this.handleAppStateChange); >componentWillUnmount() < AppState.removeEventListener(‘change’, this.handleAppStateChange); >handleAppStateChange = (nextAppState) => < if (nextAppState === ‘active’) < NativeModules.AppUpdate.resumeUpdate(); >>

Поддержка flexible-обновлений

Процесс flexible-обновлений выглядит так:

  • Google Play предлагает пользователю обновить приложение;
  • если пользователь соглашается, начинается фоновая загрузка обновления;
  • после загрузки мы предлагаем установить обновление с полноэкранной заставкой от Google Play и перезапуском приложения в конце;
  • eсли пользователь отказывается установить обновление в моменте, предлагаем ему повторно. Google рекомендует делать это на каждое разворачивание приложения, но тут воля ваша. Кстати, если приложение будет в фоне на момент завершения загрузки, то установка обновления произойдёт автоматически.

В отличие от immediate-обновлений, здесь придётся написать чуть больше кода.

  1. Модифицируем написанные ранее методы, чтобы при их вызове можно было указать требуемый тип обновления.

Достаточно добавить аргумент для типа обновления в нативные методы checkForAppUpdate и resumeUpdate .

  1. Объявим слушателя для наблюдения за процессом.

Слушатель должен реализовывать интерфейс InstallStateUpdatedListener .

private val appUpdatedListener: InstallStateUpdatedListener by lazy < object : InstallStateUpdatedListener < override fun onStateUpdate(installState: InstallState) < // здесь пока пусто, но скоро мы это исправим if (installState.installStatus() == InstallStatus.INSTALLED) < appUpdateManager.unregisterListener(this) >> > >

Зарегистрируем его в методе checkForAppUpdate перед вызовом startUpdateFlowForResult :

if (updateType == AppUpdateType.FLEXIBLE) appUpdateManager.registerListener(appUpdatedListener)

  1. Добавим трансляцию процесса обновления на уровень JS.
Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru