Skip to content

Latest commit

 

History

History
266 lines (185 loc) · 5.56 KB

README-zh.md

File metadata and controls

266 lines (185 loc) · 5.56 KB

🌐 English | 中文

DroidUp

简单、灵活的 Android App 自更新库。

Workflow JitPack License


特性

  • 简单:在 ~500 行内完成开箱即用的自更新流程

  • 灵活:为方便替换而解耦的更新模块

  • Kotlin 哲学:提供最快捷的 droidUp {} 构造器来秒速配置更新

安装

AAR

下载

Gradle

JitPack

// 项目 build.gradle(/build.gradle)
allprojects {
    repositories {
        // ...
        maven { url 'https://jitpack.io' }
    }
}

// 模块 build.gradle(/app/build.gradle)
dependencies {
    implementation 'com.ilharper:droidup:latest.version.here'
    // 或者使用最新的快照
    // implementation 'com.ilharper:droidup:master-SNAPSHOT'
}

使用

快速上手

MainActivity 加载完成后运行:

droidUp {
    useSimpleChecker("https://my.app/releases")
}.check()

完成!DroidUp 会自动在后台线程内检查更新,在发现新版本时提示用户, 下载并校验 apk 文件,最后安装新的 App。

流程 & 模块

DroidUp 按照顺序调用以下 Handler:

1. checker

var checker: (DroidUpContext) -> DroidUpInfo

checker 用来检查新版本。 useSimpleChecker()checker 的默认实现。

首先,在你的静态站或 CDN 上创建一个 latest.json 文件 (比如这样的 → https://my.app/releases/latest.json):

{
    "version": 8, // apk 的 versionCode
    "url": "./app-8.apk", // 可以是相对或绝对路径
    "hash": "YVbrfcHla+8RriE+h2qIMavqIq/s0noO8mpIHerDHHxBYRVEgWrVV96CGSx9GbHYCUKw2EMIiCLVsvyjWtshFw==", // 默认为 SHA512
    "size": 60294047, // long
    "releaseNote": "Add new features" // 将会在「发现新版本」对话框中显示
}

我们提供了一个 droidup-gen CLI 来从 apk 文件自动生成 latest.json

然后,使用 useSimpleChecker() 设置更新源:

  droidUp {
+     useSimpleChecker("https://my.app/releases")
  }

Apk 的下载 url 会被解析为 https://my.app/releases/app-8.apk

如果你想使用更复杂的 API 解析更新或有其他需求, 可以自己实现 checker,然后

  droidUp {
+     checker = myCustomChecker
  }

2. comparator

var comparator: (DroidUpContext) -> Boolean

comparator 用来判断服务器上的版本号是否更新。 useSimpleComparator()comparator 的默认实现, 无需手动调用。

useSimpleComparator() 只有在服务器的 DroidUpInfo.version 大于 当前 App 的版本时才会触发更新。

使用自定义的 comparator

  droidUp {
+     comparator = myCustomComparator
  }

3. prompter

var prompter: (DroidUpContext, () -> Unit) -> Unit

prompter 用来弹出更新对话框。 useSimplePrompter()prompter 的默认实现, 无需手动调用。

useSimplePrompter() 使用 AlertDialog

使用自定义的 prompter 来定制对话框:

  droidUp {
+     prompter = myCustomPrompter
  }

4. downloader

var downloader: (DroidUpContext, (File) -> Unit) -> Unit

downloader 用来下载 apk 文件。 useSimpleDownloader()downloader 的默认实现, 无需手动调用。 它会在下载时显示进度条通知。

使用自定义的 downloader

  droidUp {
+     downloader = myCustomDownloader
  }

5. verifier

var verifier: (DroidUpContext) -> Boolean

verifier 用来对下载好的 apk 进行哈希校验。 useSimpleVerifier()verifier 的默认实现, 无需手动调用。 它使用 base64 加密的 SHA-512 哈希串。

使用自定义的 verifier

  droidUp {
+     verifier = myCustomVerifier
  }

6. installer

var installer: (DroidUpContext) -> Unit

installer is for installing app. useSimpleInstaller()installer 的默认实现, 无需手动调用。

如果你想使用 ROOT 权限自动安装或有其他需求, 可以使用自定义的 installer

  droidUp {
+     installer = myCustomInstaller
  }

高级

单例模式

推荐使用 DroidUp.default 单例:

DroidUp.default = (DroidUp.default ?: (droidUp {
    useSimpleChecker("https://my.app/releases")
})).check()

这样 DroidUp 实例就不会被多次创建。

手动检查更新

使用 check(true) 在检查更新时弹出 Toast:

droidUp {
    useSimpleChecker("https://my.app/releases")
}.check(true)

指定 Activity

DroidUp.check() 会自动使用当前活动的 Activity。 使用 check(activity) 手动指定 Activity:

droidUp {
    useSimpleChecker("https://my.app/releases")
}.check(activity)

Bugs & 问题

请自由创建 Issues!

贡献

我们欢迎 PR!请自由对项目做出贡献。

Changelog

请参阅 Releases

许可

MIT