在 Jenkins 上构建 Android Studio 项目? android.compileSdkVersion 丢失
Posted
技术标签:
【中文标题】在 Jenkins 上构建 Android Studio 项目? android.compileSdkVersion 丢失【英文标题】:Building Android Studio project on Jenkins? android.compileSdkVersion is missing 【发布时间】:2015-07-14 12:22:22 【问题描述】:我正在尝试设置我的第一个 android 项目以在 Jenkins 上构建。
我正在运行带有 1.24 版 Gradle 插件的 Jenkins 1.6.2。在 Windows 7 Professional SP1 上运行。
我已经在我的构建机器上安装了 Android Studio 和 Java7 JDK,并且通过 Android Studio 或从命令行运行 gradlew.bat 时,软件的签出版本构建得很好。但在我的 Jenkins 工作中,我无法让 Invoke Gradle 脚本构建任务工作。
在配置项目页面上有一对单选按钮:
调用 Gradle 使用 Gradle 包装器如果我选择“Invoke Gradle”,系统会要求我选择一个“Gradle 版本”,这是我在配置系统中设置的。
我创建了一个 GRADLE_HOME 设置为“D:\Program Files\Android Studio\gradle\gradle-2.2.1”的 gradle 安装。这给了我一个警告,“D:\Program Files\Android Studio\gradle\gradle-2.2.1 不是 Jenkins master 上的目录....”
当我运行构建时,我收到一个错误“无法检索 Gradle 可执行文件”。
这可能与抱怨目录的 gradle 插件有关。但是目录是正确的。我试过用'/'代替'\',没有任何区别。
由于这不起作用,我尝试了替代方案,“使用 Gradle Wrapper”。有一个复选框:“从根构建脚本目录”。无论我检查与否,我都会收到“java.lang.IllegalArgumentException: android.compileSdkVersion is missing!”
我已经设置了 JAVA_HOME 和 ANDROID_HOME,所以这不是问题。
有什么想法吗?
作为后续,我删除了 gradle 任务,并添加了一个 Execute Windows 批处理命令任务:
SET ANDROID_HOME=d:\Program Files\Android\sdk
SET JAVA_HOME=d:\Program Files\Java\jdk1.7.0_79
.\gradlew.bat clean
当我运行它时,我仍然得到那个错误。
但是当我从构建机器上的命令行运行这些命令时,它们工作得很好。
从 Jenkins 运行 gradlew.bat 时,与从命令行运行时有什么不同?当我从命令行运行时,Jenkins 服务被配置为使用与我登录时相同的用户。我已经尝试明确设置我在命令行中设置的每个环境变量,在 Jenkins 任务中,我仍然看到错误。
有什么想法吗?
【问题讨论】:
我建议不要使用包装器。警告可能是问题所在。您是否已经尝试过 Jenkins 自动安装 gradle? (作业配置中的 gradle 版本可能只是“默认”。) 我正在尝试使用作为 Android Studio 一部分安装的 gradle。正如我所说,我在作业配置中指定的 gradle 版本是我创建的指向作为 Android Studio 一部分安装的 gradle 的版本。 我尝试过自动安装 Gradle,但在 Gradle Installations 配置中,版本下拉列表为空 您的 build.gradle 中是否设置了compileSdkVersion
?这就是 Gradle 包装器所抱怨的。
是的。当我从命令行运行 gradle 时,它可以找到它。但是当我从 Jenkins 运行它时,它不能。
【参考方案1】:
您的 local.properties 文件必须包含: sdk.dir="你的 android sdk 的路径"
【讨论】:
我的 local.properties 文件是相同的,从命令行运行时和从 Jenkins 运行时一样。【参考方案2】:我也在使用 jenkins 来构建我的应用程序并且遇到了类似的问题。 我通过 jenkins 执行 gradle wrapper 来修复它,而不使用 jenkins gradle 插件。
cd $WORKSPACE
./gradlew assembleRelease
如果你想使用 lint 添加第二个 shell exec
cd $WORKSPACE
./gradlew lint
请注意,这些命令适用于 linux 系统,但它们可以在 windows 上正常工作(前段时间有一个 windows 构建服务器并做了同样的事情)
【讨论】:
【参考方案3】:我也遇到过这个问题,不知道我的解决方案是否适合你。
我的情况如下,在我的项目 build.gradle 文件中:
apply plugin: 'com.android.library'
apply from: 'maven_push.gradle'
dependencies
......
android
compileSdkVersion 19
buildToolsVersion "21.1.0"
......
当我运行时:gradle clean build
,错误信息显示:
* Where:
Script 'C:\xxxxxx\Project\maven_push.gradle' line: 32
* What went wrong:
A problem occurred evaluating script.
> android.compileSdkVersion is missing!
我的解决方案是将此脚本apply from: 'maven_push.gradle'
的位置更改为build.gradle文件的底部,然后BUILD SUCCESSFUL!:
apply plugin: 'com.android.library'
dependencies
......
android
compileSdkVersion 19
buildToolsVersion "21.1.0"
......
apply from: 'maven_push.gradle'
我认为你应该注意错误命令行中的“Where”消息。
【讨论】:
【参考方案4】:我不能确定它会解决你的问题,但也许你可以考虑使用sdk-manager-plugin 直接从 gradle 下载和安装 android sdk。
如果它起作用了,它可能不会告诉你为什么你当前的配置不起作用,但至少你不会再被卡住了。
【讨论】:
以上是关于在 Jenkins 上构建 Android Studio 项目? android.compileSdkVersion 丢失的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jenkins 构建 Android 项目时出现问题(未找到任务)
通过Jenkins自动化构建Unity-Android-AAB包
在 Jenkins 构建期间动态添加 Android 项目依赖项