Kotlin安卓app版本自动升级设计实现

序:

app项目上线后需要持续发版迭代,通过版本控制自动升级(或者说当app启动时,自动检测有最新版本,自动安装升级)就显得尤为重要,那么接下来设计具体如何落地。

总体思路就是当app启动时,去调用后端一个查询最新版本号的接口,与app的当前版本号比较,如果接口里发布了大于当前版本号的app就提示用户升级,用户点击升级后,自动下载安装。

一、数据库设计:

我这里使用的mysql5.7,表结构设计如下:

sql 复制代码
CREATE TABLE `app_sersion` (
  `app_version_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `app_version` varchar(255) DEFAULT NULL COMMENT 'app版本号',
  `app_download_url` varchar(255) DEFAULT NULL COMMENT 'app下载地址',
  PRIMARY KEY (`app_version_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='app版本管理';

二、java后端接口设计:

写一个app_sersion表的增删改查,代码这里不贴出来了,连同安卓端代码和sql统一打包到以下链接,有需要的朋友可以下载。

代码下载地址:

https://download.csdn.net/download/gaowenhui2008/92856583

三、安卓端(Kotlin实现)设计:

复制代码
MyLoginActivity.kt
复制代码
onCreate方法中调用update_soft()方法
Kotlin 复制代码
   public fun update_soft() {

        val manager = UpdateManager(this)
        manager.checkUpdate();

    }
Kotlin 复制代码
 /**
     * 检测软件更新
     *
     * @throws IOException
     * @throws NotFoundException
     */
    @Throws(Resources.NotFoundException::class, IOException::class)
    fun checkUpdate() {
        Thread(object : Runnable {
            override fun run() {
                // TODO Auto-generated method stub

                try {
                    if (isUpdate) {
                        // 显示提示对话框
                        Looper.prepare()
                        showNoticeDialog()
                        Looper.loop()
                       // Log.d("消息", "有新版本")
                    } else {
                        // Toast.makeText(mContext, R.string.soft_update_no,
                        // Toast.LENGTH_LONG).show();

                        // Log.d("消息", "已是最新版本");
                    }
                } catch (e: Resources.NotFoundException) {
                    // TODO Auto-generated catch block
                    // Toast.makeText(UpdateManager.this, "QQ空间", 2).show();
                    e.printStackTrace()
                } catch (e: IOException) {
                    // TODO Auto-generated catch block
                    e.printStackTrace()
                }
            }
        }).start()
    }
Kotlin 复制代码
/**
     * 显示软件更新对话框
     */
    private fun showNoticeDialog() {
        // 构造对话框
        val builder: AlertDialog.Builder = Builder(mContext)
        builder.setTitle(R.string.soft_update_title)
        builder.setMessage(R.string.soft_update_info)
        builder.setCancelable(false)
        // 更新
        builder.setPositiveButton(
            R.string.soft_update_updatebtn,
            object : DialogInterface.OnClickListener {
                public override fun onClick(dialog: DialogInterface?, which: Int) {
                    //dialog.dismiss();
                    // 显示下载对话框
                    showDownloadDialog()
                }
            })
        // 稍后更新
        builder.setNegativeButton(
            R.string.soft_update_later,
            object : DialogInterface.OnClickListener {
                public override fun onClick(dialog: DialogInterface, which: Int) {
                    dialog.dismiss()
                }
            })
        val noticeDialog: Dialog = builder.create()
        noticeDialog.show()
    }
Kotlin 复制代码
  /**
     * 显示软件下载对话框
     */
    private fun showDownloadDialog() {
        // 构造软件下载对话框
        val builder: AlertDialog.Builder = Builder(mContext)
        builder.setTitle(R.string.soft_updating)
        // 给下载对话框增加进度条
        val inflater = LayoutInflater.from(mContext)
        val v: View = inflater.inflate(R.layout.layout_softupdate_progress, null)
        mProgress = v.findViewById<View?>(R.id.update_progress) as ProgressBar
        builder.setView(v)
        // 取消更新
        builder.setNegativeButton(
            R.string.soft_update_cancel,
            object : DialogInterface.OnClickListener {
                public override fun onClick(dialog: DialogInterface, which: Int) {
                    dialog.dismiss()
                    // 设置取消状态
                    cancelUpdate = true
                }
            })
        mDownloadDialog = builder.create()
        mDownloadDialog!!.show()
        // 现在文件
        downloadApk()
    }

四、最终效果:

相关推荐
博客zhu虎康1 小时前
小程序按钮实现先表单校验再走手机号获取功能
android·javascript·小程序
码途漫谈1 小时前
Easy-Vibe高级开发篇阅读笔记(十三)——多平台开发之Android App 原生开发
android·人工智能·笔记·ai·开源·ai编程
街灯L1 小时前
【ADB】使用ADB工具箱卸载安卓系统软件
android·adb
赏金术士2 小时前
Kotlin 从入门到进阶 之泛型 模块(七)
android·开发语言·kotlin
恋猫de小郭2 小时前
经典,Flutter iOS 又修复了一个构建问题,还是很抽象
android·前端·flutter
Kapaseker2 小时前
不吹牛逼!精通 Compose 绘制(一)
android·kotlin
黄林晴2 小时前
Android 终于做桌面了,而三星 DeX 早已把路趟完
android
Digitally2 小时前
如何连接安卓手机到 Mac?2026 年 7 种可靠方法
android·macos·智能手机
克里斯蒂亚诺更新2 小时前
Android Studio的运行一个简单的apk和模拟器
android·ide·android studio