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> 的模糊方法重载”而失败的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Gradle 构建会因退出代码 137 而死?

Android Gradle 构建因缓存文件失败

修复Gradle因代理设置导致的超时问题

修复Gradle因代理设置导致的超时问题

liquibaseDiffChangelog gradle 任务因 java.lang.UnsupportedOperationException 出错:应用程序必须提供 JDBC 连接

解决XUI 1.1.7版本报错问题:gradle因umeng仓库配置失效,导致编译出错