Mac Jenkins 构建 Android App 时动态设置代码参数

前言

在日常构建打包的过程中,每次打包都需要修改 versionNameversionCode,还有 appNameappIcon 等代码参数,这些参数如何通过 Jenkins 的参数化构建来完成,实现构建时直接传入这些参数来时间自动化打包。

那么就需要将这些代码参数能够统一管理,我们平时的 appName appIcon 这些参数都是放在 AndroidManifest.xml 文件里,像这种参数都需要抽出来统一管理。

参数统一管理

这里我选择将需要动态化的参数统一放到项目根目录的 gradle.properties 文件中去,我的配置如下

# 忽略其他配置...

APP_NAME=我的App
APP_ICON=@mipmap/ic_launcher
VERSION_CODE=108
VERSION_NAME=1.0.8

这里我将以上这四个参数进行了参数化,我这里的 APP_ICON 参数是一个 adaptive-icon 的 xml 文件,他也可以是你的图片资源文件。
像这样:

APP_ICON=@drawable/icon_logo

那么接下来就是将以上的参数配置放在需要他们的地方,找到 app 工程目录下的 build.gradle 将以上参数放置进去。

android {
    defaultConfig {
        // 忽略其他参数...
        versionCode Integer.parseInt(VERSION_CODE) //打包时候的 versionCode
        versionName VERSION_NAME //打包时候的 versionName
    }

    buildTypes {
        // 打 debug 包的构建参数
        debug {
            // 忽略其他参数...
            manifestPlaceholders = [
                APP_NAME : getAppName(),
                APP_ICON : APP_ICON
            ]
        }

        // 打 release 包的构建参数
        release {
            // 在清单文件中需要引用的参数
            manifestPlaceholders = [
                APP_NAME : getAppName(),
                APP_ICON : APP_ICON
            ]
        }
    }
}

// 将从 gradle.properties 取出的中文转为 UTF-8 编码,防止乱码
def getAppName() {
    return new String(APP_NAME.getBytes("iso8859-1"), "UTF-8")
}

好,这个时候就差 AndroidManifest.xml 文件中的 appName 和 appIcon 了,打开清单文件
改为如下

<application
        android:name=".App"
        android:icon="${APP_ICON}"
        android:label="${APP_NAME}">
</application>

Jenkins 构建 Android App 时动态设置代码参数

配置 Jenkins

好,接下来我们开始配置 Jenkins

这里我使用 sed 命令,来对 gradle.properties 文件进行匹配内容替换操作。

添加构建步骤

我们添加一个执行shell的构建步骤

Mac Jenkins 构建 Android App 时动态设置代码参数

然后写入如下内容( Mac 上需要在 sed -i ‘’ 带两个单引号,Centos 不需要)

sed -i '' "s/APP_NAME.*/APP_NAME=$APP_NAME/g" $WORKSPACE/gradle.properties
sed -i '' "s/APP_ICON.*/APP_ICON=$APP_ICON/g" gradle.properties
sed -i '' "s/VERSION_CODE.*/VERSION_CODE=$VERSION_CODE/g" $WORKSPACE/gradle.properties
sed -i '' "s/VERSION_NAME.*/VERSION_NAME=$VERSION_NAME/g" $WORKSPACE/gradle.properties

然后将这四个参数都配置到参数化构建中,就可以在构建的时候输入这四个参数了。这里就不在赘述如何增加构建参数了。有一点需要注意的是,在Jenkins 立即构建配置参数时,APP_ICON 中有 / 需要进行反斜杠,防止转义

Mac Jenkins 构建 Android App 时动态设置代码参数

好了,现在就可以灵活配置 app 的版本号、名称、图标了,还有渠道、分支等也可以灵活配置,这里就不详细展开了。

参考文章

Android 如何使用gradle.properties
Jenkins 构建Android App时 动态打入jenkins 构建版本号
jenkins打包apk带入versionCode和versionName
build.gradle 访问 gradle.properties 乱码

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!