Простая и удобная библиотека для обновления версий приложений, совместимая с Android N и O. Простое подключение, поддержка кастомных сетевых запросов, кастомных сообщений о версии и т.д.
Использование:
Добавьте зависимость:
implementation 'com.sk.appupdate:sk_appupdate:1.0.1'
Нажмите "Sync Project with Gradle Files". Если синхронизация не удалась, добавьте следующий код в файл build.gradle
проекта:
allprojects {
repositories {
google()
jcenter()
maven {
url "https://dl.bintray.com/smarkorg/maven"
}
}
}
После синхронизации библиотека будет доступна для использования.
Инициализация (передайте адрес или URL версии):
SkAppUpdater.init(this)
.setUpdateUrl("https://smark-file.oss-cn-shanghai.aliyuncs.com/updateApp/json_test.txt");
Использование:
Тихое обновление:
SkAppUpdater.checkUpdate(MainActivity.this, SkAppUpdater.SILENT_CHECK);
Активное обновление:
SkAppUpdater.checkUpdate(MainActivity.this, SkAppUpdater.INITIATIVE_CHECK);
Шаблон данных для обновления:
{
"new_version": "1.0.2",
"new_version_code": "2",
"apk_file_url": "https://smark-file.oss-cn-shanghai.aliyuncs.com/updateApp/newApp.apk",
"update_log": "1. Улучшение пользовательского опыта\n2. Исправление ошибок продукта",
"target_size": "2М",
"new_md5": "fc9b5152cbd56f896123e3f08fe5a4db",
"constraint": false
}
new_version: Название версии
new_version_code: Код версии
apk_file_url: URL для загрузки нового APK
update_log: Лог обновления target_size: Размер обновления
new_md5: Новый MD5-хэш для проверки целостности обновления
Теперь настройка обновлений версий приложения завершена. Так просто!!!
Только эти функции? Уведомление об обновлении выглядит слишком простым. Что делать? Продолжайте читать:
Эта библиотека предоставляет два вида пользовательского интерфейса: SimpleNotifyDialog и CustomNotifyDialog. Конечно, вы можете создать собственный пользовательский интерфейс, наследуя BaseUpdateDialog. Примеры использования:
Примеры кастомного Dialog:
public class SimpleNotifyDialog extends BaseUpdateDialog {
private static final String TAG = "SimpleNotifyDialog";
@Override
protected int getLayoutId() {
return R.layout.simple_dialog_layout;
}
@Override
protected BaseUpdateDialog getCustomDialog() {
return new SimpleNotifyDialog();
}
```Текст кода оставлен без изменений, так как он содержит имена переменных, функций и другие элементы кода, которые не подлежат переводу.
```java
@Override
protected void bindView(View view) {
TextView new_version_name = view.findViewById(R.id.new_version_name);
TextView size = view.findViewById(R.id.size);
TextView content = view.findViewById(R.id.content);
final TextView cancer = view.findViewById(R.id.cancer);
final TextView update = view.findViewById(R.id.update);
if (mUpdateInfoBean != null) {
new_version_name.setText(String.format("Новая версия: V%s", mUpdateInfoBean.getNew_version()));
size.setText(String.format("Размер обновления: %s", mUpdateInfoBean.getTarget_size()));
content.setText(mUpdateInfoBean.getUpdate_log());
if (mUpdateInfoBean.isConstraint()) {
cancer.setVisibility(View.GONE);
} else {
cancer.setVisibility(View.VISIBLE);
}
}
cancer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
v.setEnabled(false);
update.setText("Обновление в процессе...");
cancer.setVisibility(View.GONE);
File apkFile = new File(getActivity().getCacheDir(), "target.apk");
SkAppUpdater.getINetManager().downloadApk(mUpdateInfoBean.getApk_file_url(), apkFile, new INetDownloadCallBack() {
@Override
public void success(File apkFile) {
v.setEnabled(true);
dismiss();
String fileMd5 = AppUtil.getApkMd5(apkFile);
Log.e(TAG, "newApkMd5: " + fileMd5);
if (fileMd5 != null && fileMd5.equalsIgnoreCase(mUpdateInfoBean.getNew_md5())) {
Продолжение:
} else {
Toast.makeText(getActivity(), "Обновление не удалось", Toast.LENGTH_SHORT).show();
}
}
@Override
public void fail() {
v.setEnabled(true);
update.setText("Обновление не удалось");
cancer.setVisibility(View.VISIBLE);
}
});
}
});
}
``````markdown
AppUtil.installApp(getActivity(), apkFile);
} else {
Toast.makeText(getActivity(), "Проверка установочного пакета не пройдена, обновление не удалось!", Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
``` }
```markdown
public void progress(int progress) {
update.setText(String.format("%d%%", progress));
}
@Override
public void failed(Throwable e) {
v.setEnabled(true);
e.printStackTrace();
dismiss();
Toast.makeText(getActivity(), "Обновление не удалось!", Toast.LENGTH_SHORT).show();
}
}, SimpleNotifyDialog.this);
}
});
}
``` }
``` Как использовать?
При инициализации просто передайте параметры:
SkAppUpdater.init(this) .setUpdateUrl("https://smark-file.oss-cn-shanghai.aliyuncs.com/updateApp/json_test.txt") .setCustomDialog(new SimpleNotifyDialog());
В моем проекте есть сетевые запросы, и я не хочу использовать встроенный метод. Что делать?
Ответ: используйте собственные!
В библиотеке используется класс `OkHttpNetManager`, который использует `okhttp` для выполнения запросов. Если вы не хотите использовать этот класс, вы можете реализовать интерфейс `INetManager` и определить свой собственный сетевой запрос.
Собственные сетевые запросы можно задать при инициализации с помощью метода `setINetManager`.
**Внимание**: при использовании необходимо выполнить некоторые настройки для Android N/O:
В файле `Manifest` добавьте:
В папке `res/xml` создайте файл `fileproviderpath.xml`:
Содержимое:
В файле Manifest
добавьте разрешение:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES">
Рассказывал много, а что это даст?
Пример опыта использования APK:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )