• Android打包脚本和上传apk托管平台


    前言

    作为Android开发经常需要打包提交测试,多数情况我们都是通过Android studio手动点点进行,后来项目由于环境较多(开发,测试,预发布,发布等),手动打包就容易出错,所以后边就引起通过脚本打包提升效率和准确的需求。

    内容部分
    1. 编写脚本前,需要在app目录下的build.gradle中进行相关证书配置。

      注意signingConfigs需要在用它之前声明

      // storeFile 文件放到app目录下直接写文件名即可
      signingConfigs{
           debug {
                  keyAlias '别名'
                  keyPassword '密码'
                  storeFile file('签名文件路径')
                  storePassword '密码'
              }
           release {
                  keyAlias '别名'
                  keyPassword '密码'
                  storeFile file('签名文件路径')
                  storePassword '密码'
              }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    2. 声明完成签名信息后,在构建配置中引用,如下:

       buildTypes {
              release {
                  ...省略
                  signingConfig signingConfigs.release
              }
              debug {
                  ...省略
                  signingConfig signingConfigs.debug
              }
          }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    3. 然后就是配置多渠道打包的维度了,我简单配置几个,代码如下:

      //先定义变种维度
      defaultConfig{
         flavorDimensions "versionCode"
      }
      
      productFlavors{
          dev{
              dimension "version"
               // 服务端接口地址
              buildConfigField "String", "API_BASE_URL", '"http://test.com/"'
          }
         sit{
              dimension "version"
               // 服务端接口地址
              buildConfigField "String", "API_BASE_URL", '"http://test.com/"'
          }
          pub{
              dimension "version"
               // 服务端接口地址
              buildConfigField "String", "API_BASE_URL", '"http://test.com/"'
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22

    配置完成后就可以build variants 中找到你设置的多渠道打包命令了,如下图:

    在这里插入图片描述

    配置中使用不同的host,代码可以直接引用,通过BuildConfig.API_BASE_URL实现切换不同的host。

    配置到这里就可以实现版本区分打包了,通过Android studio进行不同的操作,打包出不同host的包了。

    shell脚本编写

    脚本的时间其实就是自动化了打包的步骤,代替我们一步一步点的操作。这里使用shell脚本,贴出核心代码吧。

    #通过不同的表示标识来确定执行不同的打包命令
    echo "开始执行build======================"
    echo "flavor ${flavor}"
    # 开始构建apk
    flavor="dev"
    if [[ ${runEnvNumber} == 1 ]];then
     flavor="dev"
     gradlew clean assembleDevRelease
    elif [[ ${runEnvNumber} == 2 ]];then
     flavor="sit"
     gradlew clean assembleSitRelease
    elif [[ ${runEnvNumber} == 3 ]];then
     flavor="pub"
     gradlew clean assemblePubRelease
    else
       flavor="dev"
       gradlew clean assembleDevRelease
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    后续就是把apk包移动到指定的目录:

    # 最终的apk文件
    # 拷贝文件到指定目录
    buildSourcePath="app/build/outputs/apk/$flavor"
    apkSourcePath=$(find ${buildSourcePath} -name "*.apk")
    
    echo "apk source path========"
    echo "$apkSourcePath"
    echo "apk source path========"
    
    # 构建目录,并拷贝
    rm -rf $buildPath
    mkdir $buildPath
    echo "====copy apk source path===="
    cp $apkSourcePath $buildPath
    apkPath=$(find ${buildPath} -name "*.apk")
    finalPath=${apkPath}
    
    echo "finalPath ====="
    echo "$finalPath"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    再后来就是上传蒲公英/fir啥的啦,这里就不赘述了。具体可以看官方的文档了。

    还是贴个fir的代码吧,API比较简单:

    #!/usr/bin/env bash
    
    echo "清除登录信息"
    rm -f $HOME/.fir-cli
    path=$1
    desc=$2
    echo "上传path $path "
    echo "上传描述  ${desc} "
    upload() {
        echo "开始上传"
        fir publish "${path}" -c "${desc}" --force-pin-history
    }
    
    me=$(fir me|grep 'ERROR')
    if [[ $me ]];then
      echo "登录"
     fir login '你的fir token'
     upload
    else
     upload
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    结尾

    脚本的合理使用能够给我们节省很多时间,并且产生错误的概率很低。就这些,谢谢观看!

  • 相关阅读:
    模拟手写实现Spring
    Python进阶--爬取美女图片壁纸(基于回车桌面网的爬虫程序)
    详解小程序配置服务器域名
    视频分析:走路看手机行为
    天星金融细说社保 筑牢民生保障防线
    MySQL和Oracle JDBC驱动包下载步骤
    Shell编程实际应用
    OpenGL ES freeglut 下载和使用
    最新全自动磁环电感线圈绕法跟磁环绕线后产品工艺流程介绍
    【JVM】如何定位、解决内存泄漏和溢出
  • 原文地址:https://blog.csdn.net/shayubuhuifei/article/details/132736437