Это простой проект, предоставляющий возможности инкрементального обновления для приложений Android.
Благодаря функции обновления вы можете динамически обновлять приложение, которое уже установлено на устройствах ваших пользователей. Вам больше не нужно полагаться на рынок приложений для обновления вашего приложения, вам больше не нужно отправлять новую версию вашего приложения на рынок приложений для проверки или выпуска. Эта функция особенно полезна, если вы часто выпускаете своё приложение и хотите, чтобы новые функции были доступны вашим пользователям как можно скорее.
С помощью функции инкрементного обновления вашим пользователям нужно только загрузить изменения из старой версии в новую, чтобы запустить приложение. Это поможет вашему пользователю сэкономить много времени и денег.
Но есть и некоторые ограничения для инкрементных обновлений:
Эти функции срочно необходимы, особенно играм, разработанным на C++.
Как мы все знаем, Android предоставляет разработчикам возможность разработки собственного кода. Когда мы пишем код на собственном языке (C или C++), инструменты сборки Android компилируют код в файл .so
, и приложение Android загружает их во время работы. На самом деле мы можем обновить файл so перед запуском приложения, и теперь приложение может работать с более новым кодом. Динамическое обновление приложения реализовано!
Благодаря инструментам bsdiff и bspatch мы можем использовать bsdiff для генерации изменений между двумя разными двоичными файлами и использовать bspatch с файлом патча и старым файлом для создания нового файла. С помощью этих инструментов реализовано инкрементное обновление приложения!
├── client // весь исходный код, необходимый клиенту
│ ├── droid-inc-update // lib android project, который должен интегрировать приложение
│ ├── droid-inc-update-demo // простая демонстрация
│ ├── droid-inc-update-demo-cocos // демонстрация cocos2dx с функцией инкрементного обновления
│ └── incupdatedata // каталог для сохранения сгенерированных файлов обновления
│ ├── binding_gen.py // инструмент для генерации кода привязки cocos2dx
│ ├── env.py // настройки, используемые во всех инструментах
│ ├── update_client_res_version.py // инструмент для обновления версии клиентских ресурсов
│ └── zip_update.py // инструмент для создания новой версии incupdate вашего приложения
└── server
├── config // файлы конфигурации
├── deploy.sh // скрипт развертывания
├── npm-install.sh // скрипт установки npm
└── src // исходный код сервера, написанный на nodejs
zip_update.py
сканирует все ваши ресурсы в каталогах assets/incupdatelibs
и assets/res
, чтобы создать версию ресурсов, затем сохраняет некоторую информацию в файлы assets/files.conf
и assets/incupdate.conf
в формате JSON. Версия фактически является новой версией выпуска. Инструмент также создаёт резервную копию ресурсов и генерирует файл update.zip
для всех старых версий. Файл update.zip
содержит всё необходимое для обновления со старой версии до новой.update_limit.py
обновляет файл updatelimit.json
в каталоге incupdatedata
, который содержит настройки ограничения обновления версии, например, может быть обновлена только версия приложения, работающая на Android 5.0. Сервер будет считывать файл updateLimit.json
, чтобы правильно доставить новую версию.assets/files.conf
или assets/incupdate.conf
. Затем сервер проверит версию и другую информацию об устройстве, чтобы определить, требуется ли клиенту обновление. Если да, сервер отправит файл update.zip
. to the app, и приложение завершит процесс обновления с данными, содержащимися в файле update.zip
.
project.properties
вашего проекта.android.library.reference.1=relative/path/to/droid-inc-update
Напишите привязки на C для всех ваших собственных методов, объявленных в коде Java, и сгенерируйте файл loader.so
. Зачем это нужно? Если вы используете API System.loadLibrary
или System.load
для загрузки файла .so
, он не будет перезагружен, даже если вы замените файл so и перезапустите приложение. Поскольку операционная система Android контролирует процесс загрузки файла .so
, нам нужен файл loader.so
для загрузки реального файла .so
и проксирования всех используемых в коде Java собственных методов (это то, что раньше называлось привязкой). С помощью API dlopen
, dlsym
и dlclose
этот механизм будет реализован. Обратитесь к файлу client/droid-inc-update-demo/jni/loader.c
, чтобы реализовать загрузчик.
Соберите собственный код в файл .so
и поместите файл .so
в каталог в активах. Создайте дерево каталогов, как показано ниже.
├── assets
│ ├── incupdatelibs // каталог для хранения файлов `.so`, которые необходимо обновить
│ │ ├── libdemo.so // ваш скомпилированный файл `.so`
│ └── res // корневой каталог всех ваших ресурсных файлов, которые необходимо обновить
Используйте client/tools/zip_update.py
, чтобы создать версию всех ваших ресурсных файлов и файлов .so
. Возможно, вам потребуется изменить настройку INCUPDATE_DATA_DIR
в файле client/tools/env.py
.
Соберите проект в apk. Этот apk теперь действительно поддерживает инкрементное обновление.
Измените исходный код файла .so
, например libdemo.so
, и соберите его. Замените файл в каталоге активов (assets/incupdatelibs/libdemo.so
). Используйте инструмент client/tools/zip_update.py
для создания новой версии ваших ресурсов. Запустите сервер с настроенным каталогом incupdata
. Запустите apk, собранный на шаге 5, и вы увидите, что изменения действительно применяются к apk.
Привязка Cocos2d-x уже выполнена проектом droid-inc-update. Вы можете посмотреть код в каталоге client/droid-inc-update/jni/cocosloader
. Привязка основана на версии 2.2.2 Cocos2d-x. Для других версий Cocos2d-x может потребоваться изменить что-то ещё.
Однако привязка Cocos2d-x требует изменения некоторого исходного кода Cocos2d-x. Файл cocos2dx/platform/android/CCFileUtilsAndroid.cpp
в корневом каталоге Cocos2d-x необходимо заменить на client/cocos-changes/CCFileUtilsAndroid.cpp
. Каталог cocos2dx/platform/android/java/src/
необходимо заменить на client/java
. Эти изменения должны быть сделаны, потому что Cocos2d-x загружает ресурсы из assets/
в apk, а нам нужно загрузить новейшие ресурсы из файловой системы.
Изменения в файле CCFileUtilsAndroid
:
Java_org_cocos2dx_lib_Config_initPath
и статические переменные s_assetsPath
, s_resDirRootPath
и s_useAssets
.CCFileUtilsAndroid::isFileExist
и CCFileUtilsAndroid::doGetFileData
, чтобы изменить путь поиска ресурсов.Изменения в коде Java:
Config.java
, чтобы инициализировать путь из кода Java и предоставить функцию fixPath
для другого кода Java, чтобы изменить ресурс в активах apk на ресурс в файловой системе.Config.fixPath
.Если вам нужно отладить код и вы не хотите использовать функцию обновления, вы можете установить com.comeplus.droidincupdate.Config.FORCE_EXTRACT
в значение true. Таким образом, вам не нужно каждый раз создавать обновлённую версию при обновлении кода. Всё будет новейшим, когда вы соберёте и запустите свой отлаживаемый apk.
Сервер разработан с использованием nodejs и полностью использует асинхронность nodejs. Поэтому он будет очень эффективным и поддержит высокую параллельность запросов.
Также этот проект уже предоставляет вам очень полезные функции:
client/tool/update_limit.py
, чтобы ограничить доставку.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )