uniapp 证书 打包上线GooglePlay app自动升级

uniapp Android证书 打包上线GooglePlay app自动升级 

1.Android证书申请

要安装jdk并配置环境变量。

keytool -genkey -alias android -keyalg RSA -validity 36500 -keystore android.keystore

android:证书别名

android.keystore:证书名称

36500:时间,单位天

证书密钥很重要一定要记住。

到这里已经创建好了,新建的证书时间100年,上Googleplay证书时间不能低于25年。

查看证书信息,在 jieshenmode.keystore 文件的文件夹下输入命令行:

keytool -list -v -keystore jieshenmode.keystore
C:Usersadmin>keytool -list -v -keystore jieshenmode.keystore
输入密钥库口令:
密钥库类型: jks
密钥库提供方: SUN

您的密钥库包含 2 个条目

别名: jieshenmode
创建日期: 2020-11-18
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=sandaoliu, OU=****, O=****, L=****, ST=**, C=**
发布者: CN=sandaoliu, OU=****, O=****, L=****, ST=**, C=**
序列号: a79c913
有效期为 Wed Nov 18 11:25:09 CST 2020 至 Fri Oct 25 11:25:09 CST 2120
证书指纹:
         MD5:  ********************************
         SHA1: **************************************
         SHA256: *************************************************88
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

 2.上线Googleplay

上线Googleplay会遇到一下问题,

1.您上传的 APK 或 Android App Bundle 所使用的签名证书不久就会过期,请使用有效期更长的证书为 APK 或 Android App Bundle 签名。详细了解签名。

2.您的应用目前的目标 API 级别为 26,但其目标 API 级别必须最低为 29,这样才能确保应用基于最新 API 而构建,让安全性和性能达到最佳状态。请将应用的目标 API 级别至少更改为 29

3.此版本不符合 Google Play 关于提供 64 位版本应用的要求。以下 APK 或 App Bundle 面向 64 位设备,但只有 32 位原生代码:请向应用中添加 64 位和 32 位原生代码。使用 Android App Bundle 发布格式可自动确保每种设备架构仅收到所需的原生代码。这样可避免增加应用的总大小。

如下图所示:

 

解决方法:

1.生成证书的时候年限弄到100年

2.uniapp项目的manifest.json里面的App常用其他配置里面修改支持cpu类型和targetSdkVersion的级别。

/* 模块配置 */
  "distribute" : {
  /* 应用发布信息 */
      "android" : { 
         "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
         "targetSdkVersion" : "29"
      },
  }

配置好以后如下图:

 3.在打包的时候,在渠道包勾选GooglePlay,打出的包就可以正常上应用了:

3.uniapp自动升级 

打包的时候会有一个版本号,每一次重新打开app的时候判断存储的版本号,如果不一致,则下载后台返回的新app地址,下载后自动安装。这个版本没有提示直接下载的。

 // #ifdef APP-PLUS
          var server = baseUrl + "/tiny-shop/v1/site/app-update"; //检查更新地址
          uni.request({
            url: server,
            data: {appCurrentVer:plus.runtime.versionCode},
            method:'POST',
            success: res => {
              console.log(res)
              if (res.statusCode == 200 && res.data.code == 200) {
                let data = res.data.data;
                if (plus.runtime.versionCode == data.current) {
                } else {
                  var dtask = plus.downloader.createDownload(data.download, {}, function(d, status) {
                    // 下载完成
                    if (status == 200) {
                      plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {}, {}, function(error) {
                        uni.showToast({
                          title: '安装失败',
                          mask: false,
                          duration: 1500
                        });
                      })
                    } else {
                      uni.showToast({
                        title: '更新失败',
                        mask: false,
                        duration: 1500
                      });
                    }
                  });
                  dtask.start();
                  var prg = 0;
                  var showLoading = plus.nativeUI.showWaiting("正在下载");  //创建一个showWaiting对象
                  dtask.addEventListener('statechanged', function(task,status){
                        // 给下载任务设置一个监听 并根据状态  做操作
                    switch (task.state) {
                      case 1:
                        showLoading.setTitle("正在下载");
                        break;
                      case 2:
                        showLoading.setTitle("已连接到服务器");
                        break;
                      case 3:
                        prg = parseInt((parseFloat(task.downloadedSize) /parseFloat(task.totalSize)) *100);
                        showLoading.setTitle("正在更新下载" + prg + "%  ");
                        break;
                      case 4:
                        plus.nativeUI.closeWaiting();
                          //下载完成
                      break;
                    }
                  });
                }

              }
            }
          })
          // #endif
原文地址:https://www.cnblogs.com/liuzhou1/p/13985359.html