前言
思路:从远程服务器的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)
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 print("恭喜,当前是最新版本")
else
dialog=MaterialAlertDialogBuilder(activity) .setTitle(当前版本.."→"..版本) .setCancelable(true) .setMessage("软件大小:"..大小.."\n内容:\n"..文本) .setPositiveButton("内置更新",{onClick=function()
print("正在下载,请前往通知栏查看")
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/vnd.android.package-archive"); request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI); request.setDestinationInExternalPublicDir("Download",文件名); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); downloadManager.enqueue(request); end 系统下载("览色.apk",""..更新地址) end}) .show() end else print("服务器超时,请联系作者反馈") end end)
|
结语
经过以上两步,就可以实现了,如果报错或者还是没能成功,请检查 :
- 需要的库是否导入完整
- 服务器text.lua文件格式是否按要求填写
- 用户已授予存储权限以及调用系统下载管理器权限
- 提供的下载地址是否是有效的直链
- 支持跨域访问(如果使用服务器)