1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xuexiangjys-XUpdate

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

XUpdate

api I Star

English | ChineseВидеоурок

XUpdate — это облегчённый фреймворк для обновления версий Android с высокой доступностью. Нажмите на инструкцию, чтобы попробовать!

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

Перед использованием внимательно прочитайте инструкцию. Важные вещи следует повторить трижды!!

Перед использованием внимательно прочитайте инструкцию. Важные вещи следует повторить трижды!!

Перед использованием внимательно прочитайте инструкцию. Важные вещи следует повторить трижды!!

Обо мне

WeChat public number juejin zhihu CSDN jianshu segmentfault bilibili toutiao
Моё путешествие по открытым исходникам Android Нажмите здесь Нажмите здесь Нажмите здесь Нажмите здесь Нажмите здесь Нажмите здесь Нажмите здесь

Простота использования

Если вы хотите использовать XUpdate быстрее, уменьшить сложность интеграции, поддерживать продолжение загрузки с точки останова и другие функции расширения, вы можете попробовать использовать XUpdateAPI.

Быстрая интеграция X-Library

Чтобы упростить быструю интеграцию X-Library, я предоставляю шаблон проекта для вашей справки: https://github.com/xuexiangjys/TemplateAppProject


Особенности

  • Поддерживает запросы Post или Get для проверки версии, а также пользовательские сетевые запросы.

  • Поддерживается только обновление версии при подключении к Wi-Fi.

  • Поддержка тихой загрузки (фоновое обновление) и автоматического обновления версии.

  • Предоставляется удобное всплывающее окно с обновлением версии для настройки стиля темы.

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

  • Поддерживаются MD5-проверка файлов, игнорирование версии, принудительное обновление версии и другие функции.

  • Поддерживается пользовательский метод проверки файлов (по умолчанию проверка MD5).

  • Поддерживается настраиваемый API-интерфейс запросов.

  • Совместимость с Android 6.0–11.0.

  • Поддерживаются китайский и английский языки (интернационализация).

  • Поддерживается использование плагина flutter: flutter_xupdate.

  • Поддерживается использование react native плагина: react-native-xupdate.

Звёзды за всё время

Звёзды за всё время

Структура состава

Этот фреймворк ссылается на некоторые идеи и пользовательский интерфейс AppUpdate, различные части обновления версии разделены на следующие части:

  • IUpdateChecker: проверка последней версии.

  • IUpdateParser: анализ результатов данных. 2.3. Информация о сущности обновления версии

(1) UpdateEntity

Поле Тип Значение по умолчанию Описание
mHasUpdate boolean false Есть ли последняя версия
mIsForce boolean false Принудительная установка: приложение нельзя использовать без установки
mIsIgnorable boolean false Можно ли игнорировать версию
mVersionCode int 0 Код последней версии
mVersionName String unknown_version Имя последней версии
mUpdateContent String "" Содержание обновления
mDownloadEntity DownloadEntity / Сущность информации о загрузке
mIsSilent boolean false Скачивать ли молча: при наличии новой версии не предлагать скачать напрямую
mIsAutoInstall boolean true Устанавливать ли приложение автоматически после завершения загрузки

(2) DownloadEntity

Поле Тип Значение по умолчанию Описание
mDownloadUrl String "" Адрес для скачивания
mCacheDir String "" Каталог файлов для загрузки
mMd5 String "" Зашифрованное контрольное значение файла для скачивания (по умолчанию используется шифрование MD5), которое используется для проверки и предотвращения замены скачанного APK-файла (в последней демоверсии есть инструмент для расчёта контрольного значения). Обратите внимание, что значение MD5 здесь — это не значение MD5 файла подписи приложения!
mSize long 0 Размер файла для скачивания [единица измерения: КБ]
mIsShowNotification boolean false Показывать ли прогресс загрузки в панели уведомлений

(3) PromptEntity

Поле Тип Значение по умолчанию Описание
mThemeColor int R.color.xupdate_default_theme_color Цвета темы (цвета фона для индикаторов выполнения и кнопок)
mTopResId int R.drawable.xupdate_bg_app_top Идентификатор ресурса фонового изображения сверху
mTopDrawableTag String "" Тег фонового изображения сверху
mButtonTextColor int 0 Цвет текста кнопки
mSupportBackgroundUpdate boolean false Поддерживается ли фоновое обновление
mWidthRatio float -1 (неограниченно) Отношение ширины окна запроса на обновление версии к экрану
mHeightRatio float -1 (неограниченно) Отношение высоты окна запроса на обновление версии к экрану
mIgnoreDownloadError boolean false Игнорировать ли исключение при загрузке (окно запроса на обновление не исчезнет, если загрузка завершится неудачно)

2.4. Метод проверки шифрования файлов

В этом фреймворке по умолчанию используется метод проверки шифрования MD5. Конечно, если вы не хотите использовать шифрование MD5, вы также можете настроить File Encryptor IFileEncryptor. Ниже приведена реализация MD5 File Encryptor для справки:

/**
 * В качестве шифрования по умолчанию для зашифрованных файлов используется шифрование MD5
 *
 * @author xuexiang
 * @since 2019-09-06 14:21
 */
public class DefaultFileEncryptor implements IFileEncryptor {
    /**
     * Зашифрованные файлы
     *
     * @param file
     * @return
     */
``` Наконец, вызовите метод `XUpdate.get().setIFileEncryptor`, настройки вступят в силу.

---

## 3. Версия обновления

### 3.1. Обновление версии по умолчанию

Вы можете напрямую вызвать следующий код для выполнения операции обновления версии:

XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl) .update();


Следует отметить, что при обновлении версии по умолчанию формат JSON, возвращаемый сервером запросов, должен включать следующее содержимое:

```json
{
  "Code": 0,
  "Msg": "",
  "UpdateStatus": 1,
  "VersionCode": 3,
  "VersionName": "1.0.2",
  "ModifyContent": "1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。",
  "DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk",
  "ApkSize": 2048,
  "ApkMd5": ""
}

Описание полей:

  • Code: 0 означает, что запрос выполнен успешно, не 0 — сбой.
  • Msg: информация об ошибке запроса.
  • UpdateStatus: 0 означает отсутствие обновления, 1 — обновление версии, принудительное обновление не требуется, 2 — обновление версии и требуется принудительное обновление.
  • VersionCode: номер версии, увеличивается самостоятельно. Используется для сравнения, является ли версия последней версией.
  • VersionName: отображаемое имя версии.
  • ModifyContent: содержание обновления версии.
  • DownloadUrl: адрес загрузки файла APK приложения.
  • ApkSize: размер файла APK приложения в КБ.
  • ApkMd5: примените значение MD5 к файлу APK. Если нет, нельзя гарантировать, что APK будет полным, и он будет загружаться каждый раз заново. Фреймворк использует шифрование MD5 по умолчанию.

3.2. Автоматическое обновление версии

Автоматическое обновление версии: автоматическая проверка версии + автоматическая загрузка APK + автоматическая установка APK (тихая установка).

Вам нужно только установить isAutoMode(true). Однако, если на устройстве нет прав root, оно не сможет выполнить автоматическое обновление (поскольку тихая установка требует прав root).

XUpdate.newBuild(getActivity())
        .updateUrl(mUpdateUrl)
        .isAutoMode(true) // Если вам нужно полностью автоматизировать процесс и обновлять автоматически, вам нужны права root【требуется для тихой установки】
        .update();

3.3. Поддержка фонового обновления

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

XUpdate.newBuild(getActivity())
        .updateUrl(mUpdateUrl)
        .supportBackgroundUpdate(true)
        .update();

3.4. Принудительное обновление версии

Если пользователь не обновится, программа не будет работать нормально. Серверу нужно только вернуть поле UpdateStatus равным 2.

Конечно, если вы настраиваете API возврата запроса, вам нужно только установить поле mIsForce объекта UpdateEntity в true.

3.5. Пользовательская тема всплывающего окна с обновлением версии

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

  • promptThemeColor: установить цвет темы.
  • promptButtonTextColor: установить цвет текста кнопки.
  • promptTopResId: установить фоновое изображение сверху Resource ID.
  • promptTopDrawable: установить фоновый рисунок сверху.
  • promptTopBitmap: установить растровое изображение сверху.
  • promptWidthRatio: установить отношение ширины всплывающего окна обновления версии к экрану. Значение по умолчанию -1 (ограничение не требуется).
  • promptHeightRatio: установить соотношение высоты всплывающего окна обновления версии к экрану. Значение по умолчанию -1 (ограничение не требуется).
XUpdate.newBuild(getActivity())
        .updateUrl(mUpdateUrl) ### 3.6, Custom version update parser

Реализация интерфейса `IUpdateParser` позволяет создать пользовательский парсер.  

XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl3) .updateParser(new CustomUpdateParser()) // Устанавливаем пользовательский парсер обновлений версии .update();

public class CustomUpdateParser implements IUpdateParser { @Override public UpdateEntity parseJson(String json) throws Exception { CustomResult result = JsonUtil.fromJson(json, CustomResult.class); if (result != null) { return new UpdateEntity() .setHasUpdate(result.hasUpdate) .setIsIgnorable(result.isIgnorable) .setVersionCode(result.versionCode) .setVersionName(result.versionName) .setUpdateContent(result.updateLog) .setDownloadUrl(result.apkUrl) .setSize(result.apkSize); } return null; } }

3.7, Custom version update checker + version update parser + version update prompter

  • Реализуя интерфейс IUpdateChecker, можно настроить проверку обновлений.

  • Реализуя интерфейс IUpdateParser, можно настроить парсер обновлений.

  • Реализуя интерфейс IUpdatePrompter, можно настроить запрос на обновление.

XUpdate.newBuild(getActivity())
        .updateUrl(mUpdateUrl3)
        .updateChecker(new DefaultUpdateChecker() {
            @Override
            public void onBeforeCheck() {
                super.onBeforeCheck();
                CProgressDialogUtils.showProgressDialog(getActivity(), "查询中...");
            }
            @Override
            public void onAfterCheck() {
                super.onAfterCheck();
                CProgressDialogUtils.cancelProgressDialog(getActivity());
            }
        })
        .updateParser(new CustomUpdateParser())
        .updatePrompter(new CustomUpdatePrompter(getActivity()))
        .update();


public class CustomUpdatePrompter implements IUpdatePrompter {

    private Context mContext;

    public CustomUpdatePrompter(Context context) {
        mContext = context;
    }

    @Override
    public void showPrompt(@NonNull UpdateEntity updateEntity, @NonNull IUpdateProxy updateProxy, @NonNull PromptEntity promptEntity) {
        showUpdatePrompt(updateEntity, updateProxy);
    }

    /**
     * Show custom version update prompter
     *
     * @param updateEntity
     * @param updateProxy
     */
    private void showUpdatePrompt(final @NonNull UpdateEntity updateEntity, final @NonNull IUpdateProxy updateProxy) {
        String updateInfo = UpdateUtils.getDisplayUpdateInfo(mContext, updateEntity);

        new AlertDialog.Builder(mContext)
                .setTitle(String.format("是否升级到%s版本?", updateEntity.getVersionName()))
                .setMessage(updateInfo)
                .setPositiveButton("升级", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        updateProxy.startDownload(updateEntity, new OnFileDownloadListener() {
                            @Override
                            public void onStart() {
                                HProgressDialogUtils.showHorizontalProgressDialog(mContext, "下载进度", false);
                            }

                            @Override
                            public void onProgress(float progress, long total) {
                                HProgressDialogUtils.setProgress(Math.round(progress * 100));
                            }

                            @Override
                            public boolean onCompleted(File file) {
                                HProgressDialogUtils.cancel();
                                return true;
                            }});
        }}).create().show();
    }
``` Контакт

[![](https://img.shields.io/badge/QQGroup-720212425-blue.svg)](http://shang.qq.com/wpa/qunwpa?idkey=37ea606864cafa3c8a5d6b07f04fd672936a50fd6e535c13702baf705d57e6e8)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xuexiangjys-XUpdate.git
git@api.gitlife.ru:oschina-mirror/xuexiangjys-XUpdate.git
oschina-mirror
xuexiangjys-XUpdate
xuexiangjys-XUpdate
master