XUpdate
XUpdate — это облегчённый фреймворк для обновления версий Android с высокой доступностью. Нажмите на инструкцию, чтобы попробовать!
Пожалуйста, прочитайте «Мудрость задавать вопросы» перед тем, как поднимать вопрос, и строго следуйте шаблону вопроса, чтобы заполнить его и сэкономить время всех.
Перед использованием внимательно прочитайте инструкцию. Важные вещи следует повторить трижды!!
Перед использованием внимательно прочитайте инструкцию. Важные вещи следует повторить трижды!!
Перед использованием внимательно прочитайте инструкцию. Важные вещи следует повторить трижды!!
WeChat public number | juejin | zhihu | CSDN | jianshu | segmentfault | bilibili | toutiao |
---|---|---|---|---|---|---|---|
Моё путешествие по открытым исходникам Android | Нажмите здесь | Нажмите здесь | Нажмите здесь | Нажмите здесь | Нажмите здесь | Нажмите здесь | Нажмите здесь |
Если вы хотите использовать XUpdate быстрее, уменьшить сложность интеграции, поддерживать продолжение загрузки с точки останова и другие функции расширения, вы можете попробовать использовать XUpdateAPI.
Чтобы упростить быструю интеграцию 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": ""
}
Описание полей:
Автоматическое обновление версии: автоматическая проверка версии + автоматическая загрузка APK + автоматическая установка APK (тихая установка).
Вам нужно только установить isAutoMode(true)
. Однако, если на устройстве нет прав root, оно не сможет выполнить автоматическое обновление (поскольку тихая установка требует прав root).
XUpdate.newBuild(getActivity())
.updateUrl(mUpdateUrl)
.isAutoMode(true) // Если вам нужно полностью автоматизировать процесс и обновлять автоматически, вам нужны права root【требуется для тихой установки】
.update();
После включения фонового обновления пользователи могут перейти к фоновому обновлению после нажатия кнопки «фоновое обновление».
XUpdate.newBuild(getActivity())
.updateUrl(mUpdateUrl)
.supportBackgroundUpdate(true)
.update();
Если пользователь не обновится, программа не будет работать нормально. Серверу нужно только вернуть поле UpdateStatus
равным 2.
Конечно, если вы настраиваете API возврата запроса, вам нужно только установить поле mIsForce
объекта UpdateEntity
в true.
Установив изображение обновления сверху, цвет темы, цвет текста кнопки, соотношение ширины к высоте и т. д.
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; } }
Реализуя интерфейс 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();
}
``` Контакт
[](http://shang.qq.com/wpa/qunwpa?idkey=37ea606864cafa3c8a5d6b07f04fd672936a50fd6e535c13702baf705d57e6e8)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )