android APK更新原理以及代码实现

关于androidAPK版本升级,其实是很多APK必须的,现在就分享一下我对于APK更新原理的理解和代码实现。

apk更新原理

首先需要明白两点:
1:服务器需要提供URL1(服务器存储的apk版本信息)
2:服务器需要提供URL2(下载新版本apk文件)

下面开始说一下APK升级原理:
1:我们需要先通过URL1从服务器拉取服务器存储的apk版本信息;
2:然后我们在获取本地版本号;比较两者版本号,如果两个版本号相等,那就是无需更新;反之前者版本号 大于本地版本号,需要更新;
3:此时应该弹出一个Dialog,提示用户是否需要更新;
4:如果用户选择升级,此时应该在弹出一个Dialog用于显示下载进度,同时也就应该开启一个线程(路径:URL2)用于下载新版本apk文件,下载过程中更新显示进度Dialog;
5:下载完成之后,安装apk。

至此apk更新原理大致就完了。

注意点:
试想一下如果有的用户下载完新版本apk文件之后,不安装。那么每一次在进入app时,都得重新下载apk文件,为了防止这种恶意操作,因此,在下载新版本apk的时候,先将本地存储的apk文件版本号与本应用版本号做对比,如果大于,就无需下载了,直接进行安装即可;反之,我们删除本地apk文件,从服务器重新下载apk文件

附上原理图:

这里写图片描述

PS:字写得不好,将就着看吧,这不是重点。。。

apk更新代码实现

1:关于从服务器拉去版本信息,这一步略过(平时的网络访问获取数据,这个没啥好写的)
2:获取应用版本号

    /**
     * 获取本地版本号
     * @return
     */
    private int getVersionCode(){
        PackageManager packageManager = context.getPackageManager();
        int versionCode = 0;
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            versionCode = packageInfo.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionCode;
    }

3:关于下载新版本apk文件,略过(同上)
4:安装新版本apk;

    /**
     * 安装apk
     */
    private void installApk(){
        //新下载apk文件存储地址
        File apkFile = new File(Environment.getExternalStorageDirectory() + "/cache/app/apkDownLoad.apk");
        if(! apkFile.exists()){
            Toast.makeText(context, "安装包不存在", Toast.LENGTH_SHORT).show();
            return;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.parse("file://" + apkFile.toString()), "application/vnd.android.package-archive");
        context.startActivity(intent);
    }

下面附上源码地址: http://download.csdn.net/download/lmq121210/9975321

PS:源码中没有实现用户恶意操作的防护(上文中的注意点),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值