Error : Ambiguous method call. Both findViewById (int) in AppCompactActivity and Activity

Error : Ambiguous method call. Both findViewById (int) in AppCompactActivity and Activity

我在使用 Android Studio 3.0 RC1 初始化工具栏时遇到错误:"Ambiguous method call"。我已经使用 AppCompatActivity 扩展了我的 Activity 并使用 'compileSdkVersion 26' 编译了我的应用程序。 附上错误截图。

你有

import android.support.v7.app.AppCompatActivity
import android.app.Activity

都在您的代码中。 如我所见,删除 import android.app.Activity,您不需要它。

可能你觉得compileSdkVersion和targetSdkVersion不一样

升级到 appcompat 27 为我解决了这个问题

"File - Invalidate Caches / Restart" 解决了我的问题。

我 运行 与 Android Studio 3.0.0 build 171.4408382 遇到了同样的问题。通过 Gradle 在命令行上构建工作得很好,但是 IDE 向我显示了上述错误。我曾尝试将 API 级别 26 与 appcompat v26.1.0 一起使用,并将 API 级别 27 与 appcompat v27.0.1 一起使用,但两种组合均无效。

我的 "solution" 是将 compileSdkVersion 和 targetSdkVersion 降级到 API 级别 25,并将 appcompat 库降级到版本 25.4.0。

对于所有提到的版本组合,我使用了 Gradle 插件 v3.0.0 和 Android 构建工具 v27.0.1。

如果答案不能解决您的问题,您可以重置您的 android 工作室。 我通过重置 android 工作室解决了问题。 对于重置:

对我来说,将构建工具版本更改为 27.0.2 是可行的,因为所有其他依赖项也是 API 27。

buildToolsVersion '27.0.2'

我最近升级到构建工具版本 27.0.2 并遇到了同样的问题。但注意到我将 compileSdk 版本设置为 25。将 compileSdk 更改为 27 解决了这个问题。

对我来说 none 的给定解决方案有效,但是我遇到了这个问题,因为我的计算机上同时安装了 25 和 27 android sdk。一旦我删除了 sdk 25,问题就消失了。

首先确保您没有使用旧支持库的传递依赖项。 运行 以下命令并确保没有使用旧的支持库。

gradlew :app:dependencies

确保您的 gradle 文件已更新为最新的依赖项。例如:compileSdkVersion 27、targetSdkVersion 27、buildToolsVersion 27.0.3。等等。确保您的所有应用风格都没有使用自定义 targetSdkVersion 也有好处。

Ctrl + 单击 findViewById 方法。它将向您展示 2(也许更多?)相互冲突的方法。在我的例子中,冲突发生在 API 23 和 API 27 的 findViewById 方法之间。因此我不得不删除 Android 版本 23 的 SDK 和源代码。一旦我删除它并执行 Invalidate Caches/Restart 它解决了我的问题。

如果您最近将项目更新为 API,请尝试

File -> Invalidate Caches / Restart

然后

File -> Sync Project with Gradle Files

这是我的决心。

当 运行 像 FindBugs-IDEA 这样的代码分析器时,这可能会突然出现。清除警告的一种快速方法是临时更改 app/build.gradle 中的 buildToolsVersion 然后再将其更改回来。

例如,按照以下步骤操作:

  1. 打开您的 app/build.gradle 文件。
  2. buildToolsVersion 更改为 '26.0.1' 然后同步项目(按下 'Sync Now' 按钮 当它出现在顶部时)
  3. buildToolsVersion 改回之前的状态。
  4. 按下 'Sync Now' 按钮

这应该可以清除错误。

对我来说,compileSdkVersion 与使用的支持库不同

我的 compileSDK 版本低于 targetSDK 版本,所以我只需要匹配它们并同步项目,错误就解决了。

删除 "Android Fast Networking" 库解决了我的问题

我遇到了同样的问题
我的与 compileSdkVersion 编号有关 build.gradle app.
更改为最新版本,对我有用。

升级您的 targetSdkVersionbuildToolsVersion 可能会解决问题。

如果这是一个新项目,则无需使缓存失效/重新启动。

我正在处理一个新项目,在 gradle 文件中没有设置版本号,minsdkversion 和 targetsdkversion 之间有“N”,更改为所需的 sdk 版本解决了问题

appcompat 升级到 27 并将 compleSdkVersion 升级到 30 适用于 me.Just 升级 gradle build.

就我而言,我删除了 build.gradle (app) 文件中的约束布局依赖项,它解决了问题。

dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implementation 'com.android.support:appcompat-v7:25.1.0'
  //implementation 'com.android.support.constraint:constraint-layout:2.0.4'
}

只需升级您的 minSdkVersion 26 它适合我。

当我们创建一个最低 SDK 低于 16 的 Android 项目,然后我们想使用 'New/Activity/Gallery' 添加新的 activity 时,我们看到指示 'Selected activity templates has minimum SDK level of 16'。所以我们需要修改 build.gradle 文件中的 'minSdkVersion',这会导致我们进入 'Sync Now' 过程。

如果我们必须构建和维护最低 SDK 低于 16 的应用程序,我们必须将 'constraint layout' 更改为另一种布局。然而,当我们这样做时,约束布局依赖项仍然保留在 'build.gradle' 文件的依赖项部分。这导致了我的错误。

综上所述,当我们需要构建一个最低 SDK 版本低于 16 的 android 项目时,这是适用的。

  1. 当我们添加一个新的activity时,我们更改'16'上方build.gradle中的minSdkVersion然后点击'Sync Now'。之后我们可以选择 activity 模板之一并创建一个新的 activity.

  2. 现在我们将 xml 文件中的 'constraint layout' 对应于我们创建的新 activity 例如 'linear layout' 或 'relative layout'

  3. 此时我们确定删除'build.gradle'中引用约束布局的依赖,然后再次点击'Sync Now'。

我认为避免此错误消息的最佳做法是使用最低 SDK 16 及更高版本制作 Android 项目。

这些步骤在 Android Studio for Mac(Arctic Fox v11)上对我有用:

  1. 在 'build.gradle' 文件(对于模块)中,将 appcompat 实现版本更改为无效的版本(例如,将 'com.android.support:appcompat-v7:25.1.0' 更改为 'com.android.support:appcompat-v7:25')

  2. 点击'Gradle sync now'让它完成。这应该会产生很多错误

  3. 将版本更正为原始版本(例如 'com.android.support:appcompat-v7:25.1.0')。点击'Gradle sync now'让它完成

findViewId 的原始问题应该消失