如何从build.gradle提取compileSdkVersion和buildToolsVersion至.travis.yml
解决Android项目中Gradle与Travis配置参数同步的问题
每次更新compileSdkVersion和buildToolsVersion时,既要改app/build.gradle又要改.travis.yml确实很麻烦。这里有两种可靠的方法,能让Travis自动从Gradle配置里读取这些值,彻底告别重复维护:
方法一:用Shell命令直接提取(无需修改Gradle配置)
Travis运行在Linux环境下,我们可以用grep结合Perl正则表达式,直接从app/build.gradle里匹配出需要的值。
在.travis.yml中,把原来硬编码的env.global配置替换成before_install阶段的提取脚本:
# 移除原来的硬编码配置,比如: # env: # global: # - ANDROID_API_LEVEL=24 # - ANDROID_BUILD_TOOLS_VERSION=27.0.3 before_install: # 提取compileSdkVersion(匹配数字部分) - export ANDROID_API_LEVEL=$(grep -oP 'compileSdkVersion\s+\K\d+' app/build.gradle) # 提取buildToolsVersion(匹配引号内的版本字符串) - export ANDROID_BUILD_TOOLS_VERSION=$(grep -oP 'buildToolsVersion\s+"\K[^"]+' app/build.gradle)
注意事项:
- 如果你的
build.gradle里写法是compileSdkVersion = 24(带等号),需要把正则调整为'compileSdkVersion\s*=\s*\K\d+' - 本地测试时,可以直接在终端运行这两个
grep命令,确认能正确输出对应的值
方法二:用Gradle任务输出值(更稳定可靠)
如果担心正则表达式会因为Gradle配置格式变化失效,可以在app/build.gradle里添加一个专门的任务来输出版本信息,再让Travis读取这些输出:
- 在
app/build.gradle的android代码块外添加以下任务:
task printAndroidVersions { doLast { println "ANDROID_API_LEVEL=${android.compileSdkVersion}" println "ANDROID_BUILD_TOOLS_VERSION=${android.buildToolsVersion}" } }
- 在
.travis.yml中调用这个任务并提取值:
before_install: # 运行Gradle任务输出版本信息到文件 - ./gradlew printAndroidVersions > android_versions.txt # 从文件中读取并设置环境变量 - export $(grep ANDROID_API_LEVEL android_versions.txt) - export $(grep ANDROID_BUILD_TOOLS_VERSION android_versions.txt)
这种方法的优势是完全依赖Gradle的API获取值,不管你的配置格式怎么变(比如换行、加注释),都能准确拿到正确的版本号。
验证效果
设置完成后,你可以在Travis的构建日志里查看before_install阶段的输出,确认ANDROID_API_LEVEL和ANDROID_BUILD_TOOLS_VERSION已经被正确设置。之后只要更新app/build.gradle里的版本号,Travis就会自动同步使用新的值啦!
内容的提问来源于stack exchange,提问作者JJD
相关产品推荐
相关产品推荐

