1、引言
诸如下载文件之类的操作必然会大量占用服务器的带宽,影响用户访问,今天就教大家实现无后端模式下实现应用更新,整个过程中不需要我们提供对应的后端程序,自然也不需要消耗我们的服务器资源,而且还可以动态更改数据,让用户能获取到最新版本应用的信息并实现下载功能,源码下载地址会放在文章末尾,请自行下载源码对照。
2、实现原理
要实现此功能需要借助爬虫程序主动获取数据,这里我是把下载更新相关的信息放在百度网盘,让用户去爬取该数据,然后解析出对应的蓝奏云网盘的真实下载地址,实现下载功能,用户可以更改分享出去的百度网盘链接的子文件目录数据,让用户获取到不同的数据,从而动态改变需要下载的最新版本应用的下载地址和版本号。
3、实现步骤
3.1、应用上传
这里需要把apk文件更改文件后缀为zip后上传蓝奏云网盘,因为蓝奏云网盘apk格式文件下载规则有变化,所以需要修改文件后缀,我目前的解析规则不能直接下载apk格式文件,上传后保存下载链接。
3.2、数据加密
先把蓝奏云下载链接转化为16进制文本数据,然后在加密后的16进制文本数据前加上分隔符和版本更新标记和版本号,并用分隔符隔开。说明一下,这里使用16进制文本加密的意义是因为我是使用文件夹名称存储数据,部分符号不能使用,所以需要加密,我的加密后的最终数据如下图所示:
3.3、16进制加密和解密代码
这个加密和解密方式是网上找的,这里感谢提供加密算法的那位朋友,自己使用时请更改代码中加密字符串所需的字符顺序,防止被别人解析。
/**
* 字符串转换成为16进制(无需Unicode编码),转化后大小会翻倍
* @param str
* @return
*/
public static String strToHex(String str) {
char[] chars = "54E017CD9623AB8F".toCharArray();//这里改变编码顺序
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
// sb.append(' ');
}
return sb.toString().trim();
}
/**
* 16进制直接转换成为字符串(无需Unicode解码)
* @param hexStr
* @return
*/
public static String hexToStr(String hexStr) {
String str = "54E017CD9623AB8F";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
3.4、把加密数据放在百度网盘
在百度网盘中创建一个文件夹,然后把链接分享出去,并放在应用在,然后在该文件夹中创建一个子文件夹,把子文件夹名字用加密后的最终数据表示,效果如图所示:
3.5、b站效果演示
android中无后端模式下实现动态应用更新演示视频
4、源码下载地址
http://code.drjtrtj.xyz/downCode?id=4