• 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
  • 相关阅读:
    Python集成开发环境Pycharm+Git+Gitee(码云)
    【AI图像识别二】JMeter轻松实现大数据量AI图像识别接口测试
    pycharm中django同步数据库问题
    绿盟-WEB应用漏洞扫描系统
    Python脚本轻松实现批量图片重命名
    Linxu下JMeter进行接口压力测试
    依赖Anaconda环境安装TensorFlow库,避免采坑
    【AI图像识别一】人脸识别测试探索
    Postgresql死锁的处理
    PostgreSQL 9.5,带来 UPSERT 等新特性
  • 原文地址:https://www.cnblogs.com/liuzhou1/p/13985359.html
Copyright © 2020-2023  润新知