Jenkins实战之动态替换Android应用图标

4,212 阅读2分钟

前言

最近公司运营活动比较多,所以App的发版也比较频繁,而且每次发版都会更改App的图标和欢迎页,以前都是运营和产品单独发给我,我再手动替换到工程中去,虽说这样就有了和运营妹子交流的机会,但本吊心里只有技术,次数多了就觉得麻烦。正好最近在学用Jenkins进行Android持续集成的东西,正好可以用来解决这个问题。

实战

不懂如何配置Jenkins和用Jenkins进行Android多渠道打包的,可以看下我的上一篇文章Jenkins+Git+Walle+AndResGuard打造Android多渠道打包系统,当然网上更详细的教程也有很多,就不再赘述了。
进入项目的配置里面,在general里面选择参数化构建过程,加入两个参数:

加好以后,在Inject environment variables to the build process里面加入图标的路径参数(找不到这个选项的需要安装Environment Injector插件);

SOURCE_TARGET=app
SOURCE_SRC=src
SOURCE_JAVA=main
SOURCE_SRC=src
SOURCE_RES=res

再在构建里面加入Execute Shell,注意要放在Invoke Gradle Script,也就是实际的gradle编译过程之前。内容如下:

cd ${WORKSPACE}
iconFile="launcher.png"
# 上传的图标会放在当前Jenkins项目的根目录,下面判断$iconFile是否存在
if [ true == $isCustom ] && [ -f "$iconFile" ]; then
  Launcher_xxxh="${WORKSPACE}/${SOURCE_PATH}/${SOURCE_TARGET}/${SOURCE_SRC}/${SOURCE_JAVA}/${SOURCE_RES}/mipmap-xxxhdpi"
  Launcher_xxh="${WORKSPACE}/${SOURCE_PATH}/${SOURCE_TARGET}/${SOURCE_SRC}/${SOURCE_JAVA}/${SOURCE_RES}/mipmap-xxhdpi"
  Launcher_xh="${WORKSPACE}/${SOURCE_PATH}/${SOURCE_TARGET}/${SOURCE_SRC}/${SOURCE_JAVA}/${SOURCE_RES}/mipmap-xhdpi"
  Launcher_h="${WORKSPACE}/${SOURCE_PATH}/${SOURCE_TARGET}/${SOURCE_SRC}/${SOURCE_JAVA}/${SOURCE_RES}/mipmap-hdpi"

  sips -z 512 512 launcher.png --out ic_launcher.png
  mv ic_launcher.png ${Launcher_xxxh}

  sips -z 384 384 launcher.png --out ic_launcher.png
  mv ic_launcher.png ${Launcher_xxh}

  sips -z 256 256 launcher.png --out ic_launcher.png
  mv ic_launcher.png ${Launcher_xh}

  sips -z 192 192 launcher.png --out ic_launcher.png
  mv ic_launcher.png ${Launcher_h}
fi

上面的shell脚本比较简单,用到了一个图片处理命令,就是将上传的图片调整到对应大小后分别放入对应的文件夹里,然后开始编译就行了:

上面就是替换利用Jenkins替换App图标的方式了,替换欢迎页图片也是同样的步骤。看下最终效果:

不过这样处理不足之处是只能适用于欢迎页数量固定的情况。所以如果图片数量不固定可以考虑统一上传一个压缩包,然后在Jenkins解压遍历图片文件。

好了,现在发版前运营和产品妹子再也不会找我换图片了。