无服务器实现APP外网在线升级功能

功能描述:在APP开发过程中,你如果需要频繁的发布测试版APP,而你又不熟悉后端接口,或者不好意思频繁麻烦后端同学,本文给你提供一种简单地解决方案,因国内网速体验 “码云” 优于 “Github” ,所以用“码云”演示。

一、基本的Git操作能力

默认你已经具有基本的Git操作能力,默认你的PC正确安装了Git。

  • 熟悉“Github” 或者 “码云”。
  • 熟悉基本的 Git 操作。

二、码云库操作方法一(复杂)

1、在“码云”创建Git仓库

在这里插入图片描述

2、克隆仓库到本地

复制仓库地址
在这里插入图片描述
将远程仓库克隆到本地
在这里插入图片描述

3、在本地仓库下新建“Update.json”文件,并推送到码云

新建"Update.json”文件
在这里插入图片描述

//Update.json 文件内容
{
    "versionCode":2,
    "versionName": v2.0,
	"updateInf":[
		"修复BUG",
		"优化功能",
		"增加新的功能"
	],
    "url": "www.baidu.com"
}

推送的远程码云仓库
在这里插入图片描述

4、将升级APK,放在本地仓库下,并推送到码云

apk放在指定目录下
在这里插入图片描述
APK推送到码云
在这里插入图片描述

5、在码云Git仓库中,更改Update.json文件中的Url链接

获取上传的Apk链接
在这里插入图片描述
更改远程仓库中的Json文件
在这里插入图片描述

6、获取Update.json 文件的链接

在这里插入图片描述
在这里插入图片描述

获取到升级文件的Url之后,服务端的工作我们就完成了。

三、码云库操作方法二(简单)

码云在B端有文件直接上传功能,我们可以省去本地GIt相关操作

1、建库

在这里插入图片描述

2、添加相关文件

在这里插入图片描述

3、在码云Git仓库中,更改Update.json文件中的Url链接

获取上传的Apk链接
在这里插入图片描述
更改远程仓库中的Json文件
在这里插入图片描述

4、获取Update.json 文件的链接

在这里插入图片描述
在这里插入图片描述

四、Android升级代码简单实现

本文主要提供一种无服务器下APP在线升级的解决方案,Android端具体的升级代码实现简略叙述。

Android端升级使用第三方库:

//库源码在github
implementation 'com.allenliu.versionchecklib:library:2.1.9'

升级代码

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

import com.allenliu.versionchecklib.v2.AllenVersionChecker;
import com.allenliu.versionchecklib.v2.builder.UIData;
import com.allenliu.versionchecklib.v2.callback.RequestVersionListener;
import com.google.gson.Gson;

public class MainActivity extends AppCompatActivity {

    private int versionCode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FloatingActionButton fab = findViewById(R.id.fab);
        TextView tvInf = findViewById(R.id.tv_show);
        try {
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
            //获得版本号
            versionCode = packageInfo.versionCode;
            String versionName = packageInfo.versionName;//获得版本名称
            tvInf.setText("软件版名称:" + versionName + "\n软件版本号:" + versionCode);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateApk();
            }
        });
    }

    private void updateApk() {
        AllenVersionChecker
                .getInstance().requestVersion()
                .setRequestUrl("https://gitee.com/csdn_note/AppUpdate/raw/master/APP_0/update.json")
                .request(new RequestVersionListener() {
                    @Nullable
                    @Override
                    public UIData onRequestVersionSuccess(String result) {
                        //拿到服务器返回的数据,解析,拿到downloadUrl和一些其他的UI数据
                        //如果是最新版本直接return null
                        if (result!=null){
                            
                            UpdateBean updateBean = new Gson().fromJson(result,UpdateBean.class);

                            if (versionCode >= updateBean.getVersionCode()){
                                //不需要升级
                                Toast.makeText(MainActivity.this, "不需要升级", Toast.LENGTH_SHORT).show();
                                return null;
                            }

                            UIData uiData = UIData.create().setDownloadUrl(updateBean.getUrl());
                            String content = "";
                            for (int i = 0; i < updateBean.getUpdateInf().size(); i++) {
                                content += (i + 1 +"、" + updateBean.getUpdateInf().get(i) +"。\n" );
                            }

                            uiData.setContent(content);
                            uiData.setTitle("有新的升级");

                            return uiData;
                        }
                        return null;
                    }
                    @Override
                    public void onRequestVersionFailure(String message) {
                    }
                })
                .executeMission(MainActivity.this);
    }
}

在这里插入图片描述

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值