文章摘要
白衣 DeepSeek

前言

思路:从远程服务器的text.lua文件获取版本信息,比较版本号与软件版本号大小,从而检测是否需要更新,此外支持内置下载(必须直链)以及调用外部浏览器下载(不作要求)我们 默认的是内置下载。其余的以注释形式展示,按需更改即可。

一.服务器text.lua文件

1
2
3
4
【版本】2.2.0【版本】
【软件大小】6.62MB【软件大小】
【内容】更新内容...【内容】
【更新地址】https://example.com/app.apk【更新地址】

注意:直接更改前后中括号包裹起来的文本即可,服务器文本格式需严格遵循示例格式

  • 【版本】2.2.0【版本】 此处填写的版本如果大于软件本身的版本,则会执行更新,版本比较使用字符串直接比较(注意多位数版本号问题,避免出现2.10.0,因为字符串比较是逐个比较的,一般来讲我们只写个位数就可以了,例如2.9.9然后3.0.0)
  • 【内容】更新内容…【内容】 此处填写你的更新说明,支持多行,不需要换行符,直接回车即可
  • 【更新地址】此处填写下载直链【更新地址】 这里来填写直链下载地址,此实例默认内置更新,因此必须填写直链,带协议头或者直接//

我用的是GitHub的pages,你也可以用云存储,或者自己的服务器,但值得注意的是,这个链接必须保证稳定性。

二.你的项目程序main文件

main文件里填入以下代码,只需要更改get的链接地址以及系统下载中的文件名即可,别的不需要改动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
require "import"
import "android.content.Intent"
import "android.net.Uri"
import "com.google.android.material.dialog.MaterialAlertDialogBuilder"
import "com.androlua.Http"
packinfo=this.getPackageManager().getPackageInfo(this.getPackageName(),((32552732/2/2-8183)/10000-6-231)/9)
当前版本=tostring(packinfo.versionName)
--我们假设已经完成了第一步,将内容按格式填入text.lua文件,并且上传到了服务器,然后你需要更改这里的链接,这里的链接就是text.lua的地址
Http.get("https://baiyinet.github.io/rewards/update/text.lua",nil,nil,nil,function(code,content)
if code==200 then
content=content:gsub("。","\n") or content;
更新=content:match("【版本】(.-)【版本】")
版本=content:match("【版本】(.-)【版本】")
大小=content:match("【软件大小】(.-)【软件大小】")
文本=content:match("【内容】(.-)【内容】")
更新地址=content:match("【更新地址】(.-)【更新地址】")
if 更新<=当前版本 then--如果text.lua版本小于当前版本,就是最新版,不需要更新
print("恭喜,当前是最新版本")

else--否则弹出更新对话框

dialog=MaterialAlertDialogBuilder(activity)
.setTitle(当前版本.."→"..版本)
.setCancelable(true)
.setMessage("软件大小:"..大小.."\n内容:\n"..文本)
.setPositiveButton("内置更新",{onClick=function()

print("正在下载,请前往通知栏查看")
--[[url=""..更新地址--更新地址
viewIntent = Intent("android.intent.action.VIEW",Uri.parse(url))
activity.startActivity(viewIntent)
activity.finish()]]--这里注释掉的是调用系统浏览器打开下载

--这里是内置下载:
import "android.app.DownloadManager"
function 系统下载(文件名,下载链接)
import "android.content.Context"
import "android.net.Uri"
downloadManager=activity.getSystemService(Context.DOWNLOAD_SERVICE);
url=Uri.parse(下载链接);
request=DownloadManager.Request(url);
request.setTitle(文件名);--通知标题
request.setDescription("正在下载");--通知描述
--request.setMimeType("application/cn.trinea.download.file");
--设置下载的文件类型,这里下载的APP
request.setMimeType("application/vnd.android.package-archive");
--wifi,移动网络(数据流量)都可以下载
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
--存放文件夹,下载文件名
request.setDestinationInExternalPublicDir("Download",文件名);
--通知提示,VISIBILITY_VISIBLE_NOTIFY_COMPLETED表示下载完成后显示通知栏提示。VISIBILITY_HIDDEN表示不显示任何通知栏提示
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
downloadManager.enqueue(request);
end
系统下载("览色.apk",""..更新地址)--远程文件text.lua填写更新地址,你只需要更改文件名即可,将 览色.apk 换成你的文件名
--系统下载("实例.apk","此处填写直链地址")--必须是直链,如果想要远程控制下载链接地址 ,参考上面一行写法
end})
.show()
end
else
print("服务器超时,请联系作者反馈")
end
end)

结语

经过以上两步,就可以实现了,如果报错或者还是没能成功,请检查 :

  • 需要的是否导入完整
  • 服务器text.lua文件格式是否按要求填写
  • 用户已授予存储权限以及调用系统下载管理器权限
  • 提供的下载地址是否是有效的直链
  • 支持跨域访问(如果使用服务器)