Android app 增量更新
Android app 增量更新
参考https://github.com/cundong/SmartAppUpdates
该app未提供服务端代码(服务端代码的增量更新实现可参考diff.c和patch.c,原理和客户端一致)
implementation 'com.wang.appupdate:appupdate:1.0.2'
app\build\intermediates\classes\debug
目录下对应类的包名下会自动创建出PatchUtil.claseeapp\build\intermediates\classes\debug
目录下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
根目录下)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的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