Android app 增量更新
参考https://github.com/cundong/SmartAppUpdates
该app未提供服务端代码(服务端代码的增量更新实现可参考diff.c和patch.c,原理和客户端一致)
implementation 'com.wang.appupdate:appupdate:1.0.2'
- 首先下载NDK
- 在项目的gradle.properties文件下添加android.useDeprecatedNdk=true
- 新建含有native方法的类(如 PatchUtil.java)
- 编译一下在
app\build\intermediates\classes\debug目录下对应类的包名下会自动创建出PatchUtil.clasee - 点击Android Studio的Terminal进入
app\build\intermediates\classes\debug目录下 - 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根目录下) - 新建jni文件夹
创建的.h文件剪切过来。编写对应的c文件(命名随意) - 在app的build.gradle配置
- 运行即可,对应的.so在文件夹
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失败
String getMd5ByFile(File file)
获取对应文件的md5值boolean checkMd5(File file, String md5)
判断文件的MD5是否为指定值boolean checkMd5(String filePath, String md5)
判断文件的MD5是否为指定值
PackageInfo getInstalledApkPackageInfo(Context context, String packageName)
获取已安装apk的PackageInfoboolean 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




