Gradle 因“方法 java.io.File#<init> 的模糊方法重载”而失败
Posted
技术标签:
【中文标题】Gradle 因“方法 java.io.File#<init> 的模糊方法重载”而失败【英文标题】:Gradle fails with "Ambiguous method overloading for method java.io.File#<init>" 【发布时间】:2014-07-11 18:08:34 【问题描述】:当gradle build
我的项目时,我收到了这个错误:
FAILURE:构建失败并出现异常。
位置:构建文件“App/build.gradle”行:45
出了什么问题: 评估项目 ':App' 时出现问题。方法重载不明确 java.io.File#. 无法解析调用哪个方法 [null, class java.lang.String] 由于原型重叠 之间: [类 java.lang.String,类 java.lang.String] [类 java.io.File,类 java.lang.String]
所说的行是第一条proguardFile
规则:
buildTypes
release
debuggable false
jniDebugBuild false
signingConfig signingConfigs.(System.getenv("SIGNING_CONFIG") ?: "release")
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
proguardFile 'proguard-rules.txt'
我没有任何local.properties
文件,也没有在Android Studio 中打开项目。
我的项目有什么问题?我该如何解决这个错误?
【问题讨论】:
【参考方案1】:The error message has been changed in September 2014.现在更清晰明确指出问题是Gradle找不到SDK;其余答案仍然适用于 Gradle 插件的旧版本 (
这是由于 Gradle 无法找到 SDK 位置,因此在执行需要 Android SDK 的操作时失败,例如获取默认的 Proguard 文件位置。
实际上,如果您暂时注释掉该行,Gradle 会告诉您:
未找到 SDK 位置。使用 local.properties 文件中的 sdk.dir 或使用 ANDROID_HOME 环境变量定义位置。
你可以修复它:
通过在 local.properties
中定义 SDK 位置:只需将 sdk.dir=/path/to/sdk
添加到该文件即可。
在环境变量ANDROID_HOME
中设置SDK位置:只需在gradle
前加上ANDROID_HOME=/path/to/sdk
即可设置环境变量。
例如:ANDROID_HOME=/path/to/sdk gradle build
.
当使用版本控制系统时,在本地设置位置在你自己的local.properties
中是非常好的,因为每次你需要使用 Gradle 时手动设置环境变量会很烦人。请确保不要将其签入您的存储库。
【讨论】:
在 Windows 上,如果你已经安装了 Android Studio,你的 SDK 路径可能类似于C:\users\user\AppData\Local\Android\android-studio\sdk
所以从 CVS 签出时,我们总是必须手动创建该文件?
是的,将文件包含在存储库中是没有意义的,因为 SDK 的路径可能不同(除非所有机器的环境都相同)。 ANDROID_HOME 环境变量似乎是避免为所有项目创建文件的最佳方法。
我有同样的错误,但这个答案对我不起作用。我没有使用 Android SDK,但我还是添加了它。同样的错误。 :-(【参考方案2】:
我每天都这样做,通过发出以下命令创建 local.properties(-p 是我的清单文件的路径,-t 是当前目标):
android project update -p . -t android-19
如果是 Gradle 构建:
android project update .p ./YourApp/src/main/ -t android-19
cp ./YourApp/src/main/local.properties ./local.properties # or ln if you feel so
【讨论】:
【参考方案3】:就我而言,我必须在我的 Android Studio 项目的模块设置中设置 Android NDK 和 SDK 位置。
【讨论】:
以上是关于Gradle 因“方法 java.io.File#<init> 的模糊方法重载”而失败的主要内容,如果未能解决你的问题,请参考以下文章
liquibaseDiffChangelog gradle 任务因 java.lang.UnsupportedOperationException 出错:应用程序必须提供 JDBC 连接