Android 使用 Gitlab CI 进行自动打包操作

2018-08-30  本文已影响443人  l蓝色梦幻

使用 Android Studio 进行命令行打包

Android Studio 使用的是 Gradle 打包。因此,要想实现命令打包的方式,需要在了解 Gradle

  1. 签名

    笔者所在的公司打包等操作都是由程序员自己来进行打包的。因此签名信息可以保存于源代码中。

    • 编写签名的 keystore 相关信息。这里笔者使用的是 signing.properties 方式保存。

      KEYSTORE_FILE=keystore路径
      KEYSTORE_PASSWORD=keystore密码
      KEY_ALIAS=keystore别名
      KEY_PASSWORD=keystore别名密码
      
    • 在 build.gradle 中添加 签名 配置。

      Properties props = new Properties()
      props.load(new FileInputStream(file("../signing.properties")))
      signingConfigs {
          release {
              keyAlias props['KEY_ALIAS']
              keyPassword props['KEY_PASSWORD']
              storeFile file(props['KEYSTORE_FILE'])
              storePassword props['KEYSTORE_PASSWORD']
          }
      }
      
    • 找到 buildTypes 选项,在 Release 中使用配置的签名。

      buildTypes {
          release {
              ...
              signingConfig signingConfigs.release
          }
      }
      

    到这里,我们在项目的根目录下执行 ./gradlew clean 清理一遍,然后使用 ./gradlew assembleRelease 就可以在命令行中打包了。包的位置在 ./app/build/outputs/apk/项目名/release 中。

  2. 配置多个 apk 打包

    在开发过程中,我们经常的需要针对 qa 和生产环境分开打包。这时候需要配置多个 apk。这时候我们需要使用 productFlavors 标签来完成这个操作。如下:

     flavorDimensions "default"//这个名字貌似随便取,也可以有多个,总之一定要有..
    //配置多版本的apk
    productFlavors {
        Citizen {
            // 修改打包环境的 url
            buildConfigField "String", "HOST_URL", "\"https://url1/\""
        }
        RVA311QA {
            // 修改打包环境的 url
            buildConfigField "String", "HOST_URL", "\"https://url2/\""
        }
    }
    

    defaultConfig 是默认的 productFlavors。在 productFlavors 中我们可以根据自己的需要配置多个 apk 。apk 的各种需要我们都可以在这里进行配置。这样我们在执行 ./gradlew assembleRelease 的时候就会出现多个 apk 了。

    笔者的项目中要求 qa ,生产环境是两个 url 地址。笔者是这么处理的:在 BuildConfig 文件中添加笔者项目访问的地址,在代码中使用 BuildConfig.HOST_URL。这样就可以在不同的 apk 中使用不同的 url。

    注意:我所在的版本的 gradle 如果使用了 productFlavors 必须添加 flavorDimensions。

Gitlab 打包

关于 Gitlab CI 配置,可以参考使用 gitlab 自动打包

碰到的错误

  1. 我们使用的打包平台是 Mac 平台。由于是刚刚安装 Android Studio,在我们触发 build 的过程中,发生了错误:SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

    原因:经查看,该错误产生的原因是 Android Studio 在打开我们工程的时候,会默认在我们的工程目录下面产生一个 local.properties 文件。里面包含了当前机器 Android SDK 位置。但是我们在触发 build 的时候,由于没有使用 Android Studio 打开工程,没有产生 local.properties 文件。出现错误。

    解决方案:在系统变量中声明 ANDROID_HOME 变量。
    .bash_profile 添加如下代码

    export ANDROID_HOME=~/Library/Android/sdk
    export PATH=${PATH}:${ANDROID_HOME}/tools
    export PATH=${PATH}:${ANDROID_HOME}/platform-tools
    

参考的博客文章:

Android Studio gradle打包实践
Android 使用gradle打包的各种配置
android studio gradle 多版本多apk打包(打包系列教程之五)
Gradle使用技巧总结
Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解

上一篇下一篇

猜你喜欢

热点阅读