小工具知识网

当前位置: 首页 > 行业知识 > 【Android】-- 如何对APP版本控制/更新?

行业知识

【Android】-- 如何对APP版本控制/更新?

2026-11-10 07:51:43 来源:互联网转载

目录

一、 前提准备

1、获取服务器

2、使用工具操作云服务器

 二、Json格式网页

 三、创建file_paths.xml及修改AndroidManifest.xml

四、在java代码加入更新检测代码


效果如图:

        可以强制更新和非强制更新,和浏览器下载安装包。

一、 前提准备

1、获取服务器

        首先去获取云服务器,如:阿里云服务器(学生可免费领取六个月)、腾讯云服务器、华为云服务器等。具体操作参考:从零开始用阿里云服务器搭建网页_阿里云怎么装修网页打开_zstar-_的博客-CSDN博客

        云服务器用于存放json格式网页和安装包,json可以对app进行版本控制更新、显示版本、显示更新内容、提供安装包下载位置等信息。

2、使用工具操作云服务器

        可以使用指令控制,也可以使用工具控制服务器,选用putty软件进行远程控制,winSCP软件进行文件传输。下载链接

       以下是winSCP界面的服务器文件:可按下面文件找到存放安装包和网页的文件夹。

如下就是对APP进行版本更新的网页和安装包存放的文件夹:

 二、Json格式网页

以下是html网页代码:

UFCFans
let btn = document.querySelector('#json');let data = {"hasUpdate": true,"NoIgnorable": true,"versionCode": 2,"versionName": "2.0","updateLog": "\n1、新增本地缓存。\n2、解决部分BUG。\n3、优化使用体验。","apkUrl": "http://8.130.127.118:8080/ufcfans.apk","webUrl": "http://8.130.127.118:8080/ufcfans.apk","apkSize": "29.5MB"};btn.textContent = JSON.stringify(data, null, 2);

下面是相关变量说明:

{    hasUpdate: true,  //是否有更新 默认true    NoIgnorable: true, //不 可忽略更新  强制:true 非强制:false    versionCode: 51,   //服务端的版本号      versionName: "2.4.1", //服务端的版本名    updateLog: "\n1、更改保存图片的存储路径。\n2、更改软件更新的提示模式。\n3、调整非强制更新控制方式。\n4、新增存储权限的申请授权位置。", //更新提示内容    apkUrl: "https://www.yuming.com/assets/a某o130.apk",//新版本APK直链下载地址    webUrl: "https://yirj.gitee.io/update111",//浏览器更新链接,随意放(直链、蓝奏、官网均可)    apkSize: "29.5MB" //新版本的大小 随意写就好}

 三、创建file_paths.xml及修改AndroidManifest.xml

 创建file_paths.xml

    

 修改AndroidManifest.xml

                                                                .........

四、在java代码加入更新检测代码

        在软件的检测更新界面的Oncreate方法下,加入检测更新的代码。

        NoIgnorable变量为true则强制更新,无取消按钮,为false有取消按钮;

versionName, updateLog, apkSize, apkUrl, webUrl和upl变量为你的网页网址,如:UFCFanshttp://8.130.127.118:8080

public static JSONObject jSONObject = null;    private static boolean hasUpdate = true;    private static boolean NoIgnorable; //是否有更新。 不可忽略的更新    private static int versionCode = 0;    private static String versionName, updateLog, apkSize, apkUrl, webUrl;    private static  String[] upl;
   /**     * 获取当前使用的软件包的版本号     */    public int getVersionCode() {        try {            //获取packagemanager的实例            PackageManager packageManager = getPackageManager();            //getPackageName()是你当前类的包名,0代表是获取版本信息            PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);            Log.e("TAG", "版本号" + packInfo.versionCode);  //更新软件用的是版本号            return packInfo.versionCode;        } catch (Exception e) {            e.printStackTrace();        }        return 1;    }    /**     * 提示版本更新的对话框     */    public void showDialogUpdate() {        //hasUpdate为true且程序版本号= 24) {            Uri apkUri = FileProvider.getUriForFile(this, "com.example.ufcfans.fileprovider", file); //这里要写你程序的包名,已实验不可使用${applicationId}            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");        } else {            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");        }        this.startActivity(intent);    }    /**     * 从服务器获取apk文件的代码     * 传入网址uri,进度条对象即可获得一个File文件     * (要在子线程中执行哦)     */    public static File getFileFromServer(String uri, ProgressDialog pd) throws Exception {        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {            URL url = new URL(uri);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setConnectTimeout(5000);            //获取到文件的大小            pd.setMax(conn.getContentLength());  //字节的方式显示下载进度            InputStream is = conn.getInputStream();            //获取直链链接最后一个“/”后文字作为文件名,下载存储到手机            File file = new File(Environment.getExternalStorageDirectory(), apkUrl.substring(apkUrl.lastIndexOf("/", apkUrl.lastIndexOf("")) + 1));            FileOutputStream fos = new FileOutputStream(file);            BufferedInputStream bis = new BufferedInputStream(is);            byte[] buffer = new byte[1024];            int len;            int total = 0;            while ((len = bis.read(buffer)) != -1) {                fos.write(buffer, 0, len);                total += len;                //获取当前下载量                pd.setProgress(total);//字节方式显示下载量            }            fos.close();            bis.close();            is.close();            return file;        } else {            return null;        }    }    /**     * 权限的验证及处理,相关方法     */    private void getReadPermissions() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {                if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {                    ActivityCompat.requestPermissions(this,                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,                                    Manifest.permission.READ_EXTERNAL_STORAGE}, 10001);                } else {//没有则请求获取权限,示例权限是:存储权限,需要其他权限请更改或者替换                    ActivityCompat.requestPermissions(this,                            new String[]{                                    Manifest.permission.READ_EXTERNAL_STORAGE,                                    Manifest.permission.WRITE_EXTERNAL_STORAGE}, 10001);                }            } else {//如果已经获取到了权限则直接进行下一步操作                Log.e(TAG, "全部权限已经授权成功");            }        }    }    /**     * 一个或多个权限请求结果回调     * 循环回调获取权限,除非勾选禁止后不再询问,之后提示用户引导用户去设置     */    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        switch (requestCode) {            case 10001:                for (int i = 0; i   

至此,已完成对应用的版本控制更新,通过

更改html文件的versionVode控制更新,如:默认为1,改为2时,用户APP会弹出更新框。


上一篇:怎么自己建应用?

下一篇:宝塔面板怎么加速网站?