资讯专栏INFORMATION COLUMN

一种用环境变量配置android build的方案

smartlion / 2848人阅读

摘要:目标能方便地在服务器配置每个的版本和签名信息不需要在中包含密码等东西每个有一致且单调递增的版本号以上设定都是可选的,其他人仍然可以代码后立刻在运行设计用服务器的生成版本号签名信息只写在用环境变量传递版本号和签名信息没有环境变量时使用默认设置

目标

能方便地在CI服务器配置每个build的版本和签名信息

不需要在commit中包含keystore, key密码等东西

每个release build有一致且单调递增的版本号

以上设定都是可选的,其他人仍然可以clone代码后立刻在IDE运行

设计

用CI服务器的build script生成版本号

签名信息只写在build script

用环境变量传递版本号和签名信息

没有环境变量时使用默认设置

代码 build.gradle
// 从环境变量中读取字符串或整数
def env = { System.getenv it }
def envInt = { Integer.parseInt(env(it)) }

android {
    defaultConfig {
        if (env("ANDROID_VERSION_CODE")) {
            versionCode envInt("ANDROID_VERSION_CODE")
            versionName env("ANDROID_VERSION_NAME")
        } else {
            // 没有环境变量时的默认设置
            versionCode 1
            versionName "1.0"
        }
    }
}

if (env("ANDROID_SIGN_APK"))
// 有环境变量时 才设置apk签名信息
android {
    signingConfigs {
        releaseSigning {
            storeFile file(env("ANDROID_KEYSTORE_PATH"))
            storePassword env("ANDROID_KEYSTORE_PASS")
            keyAlias env("ANDROID_KEY_ALIAS")
            keyPassword env("ANDROID_KEY_PASS")
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.releaseSigning
        }
    }
}
Jenkins的build script
#!/bin/bash

# JDK/SDK路径
export ANDROID_HOME=/somewhere/android-sdk-linux
export JAVA_HOME=/somewhere/jdk1.8.0_65

# 签名信息
export ANDROID_KEYSTORE_PATH=/somewhere/keys.jks
export ANDROID_SIGN_APK=yes
export ANDROID_KEYSTORE_PASS=secret
export ANDROID_KEY_ALIAS=secret
export ANDROID_KEY_PASS=secret

# versionCode: 从当前commit可到达的commit数量 === 祖先commit数量+1
# 如果release build都在一个固定分支, versionCode会单调增加 (但是未必是连续整数)
export ANDROID_VERSION_CODE="$(git rev-list HEAD --count)"
# versionName: 当前commit的sha1的开头8字符
export ANDROID_VERSION_NAME="${GIT_COMMIT:0:8}"

exec sh gradlew clean aR

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12791.html

相关文章

  • 为什么我们要做三份 Webpack 配置文件

    摘要:时至今日,已经成为前端工程必备的基础工具之一,不仅被广泛用于前端工程发布前的打包,还在开发中担当本地前端资源服务器模块热更新等角色,结合等代码检查工具,还可以实现在对源代码的严格校验检查。时至今日,Webpack 已经成为前端工程必备的基础工具之一,不仅被广泛用于前端工程发布前的打包,还在开发中担当本地前端资源服务器(assets server)、模块热更新(hot module repla...

    silencezwm 评论0 收藏0
  • Android Gradle系列-进阶篇

    摘要:如果你有新建一个项目的经历,那么你将看到推荐的方案在的中使用来定义版本号全局变量。例如之前的版本号就可以使用如下方式实现因为使用的是语言,所以以上都是语法例如版本控制,上面代码的意思就是将有个相关的版本依赖放到的变量中,同时放到了中。 showImg(https://segmentfault.com/img/bVbsh3m?w=2560&h=1280); 上篇文章我们已经将Gradle...

    endless_road 评论0 收藏0
  • Android Gradle系列-进阶篇

    摘要:如果你有新建一个项目的经历,那么你将看到推荐的方案在的中使用来定义版本号全局变量。例如之前的版本号就可以使用如下方式实现因为使用的是语言,所以以上都是语法例如版本控制,上面代码的意思就是将有个相关的版本依赖放到的变量中,同时放到了中。 showImg(https://segmentfault.com/img/bVbsh3m?w=2560&h=1280); 上篇文章我们已经将Gradle...

    lvzishen 评论0 收藏0
  • Android-构建不同环境Apk

    摘要:只是传递给了值还不能解开始说的三个问题。下面再看下如何在中配置不同的环境。但是在中只能设置两个变量和中只有两种配置,在的时候只能生产出两个和,需要第三种环境的就需要定义一种新的,用来构建测试环境的新增加一种新增加叫做注意不能使用开头。 在开发Android过程中,常常需要构建不同环境的Apk,比如我们有可能会需要有三个环境 开发环境 测试环境 线上环境 三种环境对应不同的服务器地址...

    CrazyCodes 评论0 收藏0
  • 让前端开发者失业技术,Flutter Web初体验

    摘要:掌握可能是前端开发者翻盘的唯一机会。是开发必须的代码库。区别与应用,我们导入的是库而非,这是因为目前的接口并非和的完全通用,不过随着谷歌开发的继续,它们最终会被合并到一块。 Flutter是一种新型的客户端技术。它的最终目标是替代包含几乎所有平台的开发:iOS,Android,Web,桌面;做到了一次编写,多处运行。掌握Flutter web可能是Web前端开发者翻盘的唯一机会。 show...

    shiguibiao 评论0 收藏0

发表评论

0条评论

smartlion

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<