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

来源:互联网 发布:淘宝大马士革刀真假 编辑:程序博客网 时间:2024/06/11 14:38

关于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:源码中没有实现用户恶意操作的防护(上文中的注意点),

原创粉丝点击