AppAddUpdate

Introduction: Android app 增量更新
More: Author   ReportBugs   
Tags:

Download

Android app 增量更新

参考https://github.com/cundong/SmartAppUpdates

该 app 未提供服务端代码(服务端代码的增量更新实现可参考 diff.c 和 patch.c,原理和客户端一致)

ScreenShoots

Gradle

implementation 'com.wang.appupdate:appupdate:1.0.2'

Android Studio NDK

  1. 首先下载 NDK
  2. 在项目的gradle.properties文件下添加android.useDeprecatedNdk=true
  3. 新建含有 native 方法的类(如 PatchUtil.java)
  4. 编译一下在app\build\intermediates\classes\debug目录下对应类的包名下会自动创建出 PatchUtil.clasee
  5. 点击 Android Studio 的 Terminal 进入app\build\intermediates\classes\debug目录下
  6. Android Studio2.0 及以上输入javah -classpath . -jni om.wang.appupdate.util(packName).PatchUtil(ClassName) 其他版本输入javah -jni om.wang.appupdate.util(packName).PatchUtil(ClassName)创建对应的.h 文件(在app\build\intermediates\classes\debug根目录下)
  7. 新建 jni 文件夹

    创建的.h 文件剪切过来。编写对应的 c 文件(命名随意)
  8. 在 app 的 build.gradle 配置
  9. 运行即可,对应的.so 在文件夹

API

PatchUtil

  • int diff(String oldApkPath, String newApkPath,String patchPath)
    比较路径为 oldPath 的 apk 与 newPath 的 apk 之间差异,并生成 patch 包.
  • int patch(String oldApkPath, String newApkPath, String patchPath)
    使用路径为 oldApkPath 的 apk 与路径为 patchPath 的补丁包,合成新的 apk,并存储 newApkPath

    返回码

    0-success
    1-缺少文件路径
    2-读取旧 apk 失败
    3-读取新的 apk 失败
    4-打开或读取 patch 文件失败
    5-内存分配失败
    6-创建、打开或读取 patch 文件失败
    7-计算文件差异性或者写入 patch 文件失败
    8-计算压缩的大小差异数据失败
    9-无用的 patch 补丁
    10-合并 apk 失败

SignUtil

  • String getMd5ByFile(File file)
    获取对应文件的 md5 值

  • boolean checkMd5(File file, String md5)
    判断文件的 MD5 是否为指定值

  • boolean checkMd5(String filePath, String md5)
    判断文件的 MD5 是否为指定值

ApkUtil

  • PackageInfo getInstalledApkPackageInfo(Context context, String packageName)
    获取已安装 apk 的 PackageInfo
  • boolean isInstalled(Context context, String packageName)
    判断 apk 是否已安装
  • String getSourceApkPath(Context context, String packageName)
    获取已安装 Apk 文件的源 Apk 文件
  • String getSourceApkPath(Context context)
    获取已安装 Apk 文件的源 Apk 文件
  • void installApk(Context context, String apkPath)
    安装 Apk
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools