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

OSCHINA-MIRROR/smarkWzp-AppUpdater

Клонировать/Скачать
README.md 9.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 04.06.2025 15:09 59f091c

AppUpdater

Простая и удобная библиотека для обновления версий приложений, совместимая с Android N и O. Простое подключение, поддержка кастомных сетевых запросов, кастомных сообщений о версии и т.д.

Использование:

  1. Добавьте зависимость:

    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"
            }
        }
    }

    После синхронизации библиотека будет доступна для использования.

  2. Инициализация (передайте адрес или URL версии):

    SkAppUpdater.init(this)
            .setUpdateUrl("https://smark-file.oss-cn-shanghai.aliyuncs.com/updateApp/json_test.txt");
  3. Использование:

    1. Тихое обновление:

      SkAppUpdater.checkUpdate(MainActivity.this, SkAppUpdater.SILENT_CHECK);
    2. Активное обновление:

      SkAppUpdater.checkUpdate(MainActivity.this, SkAppUpdater.INITIATIVE_CHECK);
  4. Шаблон данных для обновления:

    {
      "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 )

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

1
https://api.gitlife.ru/oschina-mirror/smarkWzp-AppUpdater.git
git@api.gitlife.ru:oschina-mirror/smarkWzp-AppUpdater.git
oschina-mirror
smarkWzp-AppUpdater
smarkWzp-AppUpdater
master