安卓工作室0.8版本中出现“android.support.v4.app包不存在”的错误。

68

我最近将Android Studio IDE更新到0.8版本以使用新的Android L SDK。首先,我导入了一个在旧版Android Studio中没有错误的完成的Android项目。但是,在0.8版本中,出现了像以下这样的代码:

import android.support.v4.app.Fragment;
出现了“Support cannot be resolved”的错误,导致其他代码也出现了错误。logcat返回了101个实例。

Error:(8, 30) error: package android.support.v4.app does not exist

每次在导入语句中调用支持库时,我都会遇到这个问题。

我尝试过:

  • 重新安装IDE
  • 删除.idea文件夹中的所有内容
  • 重新安装所有SDK - 包括支持库
  • 同步gradle
  • 手动将支持库复制到libs文件夹中
  • 重建项目
  • 创建一个新项目以测试该库

不太确定还有什么需要做的。


Gradle同步成功了吗?支持库是否在您的依赖列表中? - nhaarman
Gradle构建失败,我已将其添加到依赖列表中。 - user3381665
你是否已经从SDK管理器中安装了仓库? - H.Rabiee
16个回答

114

好的,我遇到了同样的问题,并在Udacity论坛上找到了解决方案:

在Android Studio中:

  1. 右键单击项目的“app”文件夹,然后点击->模块设置
  2. 单击“依赖项”选项卡
  3. 单击+号以添加新的依赖项,然后选择“库依赖项”
  4. 查找所需的库并添加它

1
也许对我没用,从Eclipse导入后没有app文件夹。我看到一些有关支持包版本冲突的消息。之前只是将新版本复制到旧版本上,但我认为某些内容已经更新了。 - John
它对我有效...虽然简单,但如果我们发现问题会让我们感到沮丧。 - muhnizar
对我也有用。必须包含 android.support 依赖项,现在所有与 android.support.v4.app 包未找到有关的构建错误都已消失。 - shivisuper
在Android Studio 3.6中,右键单击“app”文件夹时没有“模块设置”选项,但是在右键单击顶层项目时有一个“打开模块设置”的选项。快捷键是F4。然而,它的“依赖项”选项卡中列出的内容没有引用support-v4库。 - Silas S. Brown

39

@boernard的回答解决了这个问题,但如果你想要了解背后发生了什么,只需要简单地更新gradle构建文件即可:

你可以在IDE中编辑build.gradle文件(左侧窗格:Gradle Scripts -> build.gradle (Module: app)),也可以使用原始路径(<proj_dir>/app/build.gradle),并添加/更新以下依赖项部分:

dependencies {
    //
    // IDE setting pulls in the specific version of v4 support you have installed:
    //
    //compile 'com.android.support:support-v4:21.0.3'

    //
    // generic directive pulls in any available version of v4 support:
    //
    compile 'com.android.support:support-v4:+'
}

通过上述的通用编译指令,您可以将代码发送给任何人,前提是他们安装了某个版本的Android Support Libraries v4


1
太好了,我也是这样做的...并且对我有效...我添加到Gradle编译'com.android.support:support-v4:+'。 - Alexiscanny

38

以上的解决方法都对我没有用,最后成功的方法是:

不是使用

import android.support.v4.content.FileProvider;

使用这个

import androidx.core.content.FileProvider;

此路径已更新为AndroidX(重新打包的Android Support库)。


谢谢!这让我也导入了ContextCompat! - Sandy Garrido

11

删除

/.idea/libraries

然后同步gradle以构建项目。


这对我来说是解决方法。依赖项之前已在gradle中正确设置,但Kotlin插件版本更新破坏了一切,解决方法是删除.idea/libraries,然后在Android Studio中执行Invalidate Caches/Restart - x1a4
这对我来说没有起作用,但它帮助我朝着解决方案迈进了一步,因为我期望的所有文件都没有被重新创建成文件夹。 - Paul McCarthy

10

[出于某些原因,本回答与Android Studio无关,请注意!]

您是否尝试将支持库设置为类路径?这个链接来自于Android开发者网站,其中提供了一些如何实现的信息。

请按照网站上的以下步骤进行操作:

创建一个基于支持库代码的库项目:

  • 确保已使用SDK Manager下载了Android Support Library。
  • 创建一个库项目,并确保项目构建路径中包含所需的JAR文件:

    • 选择 文件 > 导入
    • 选择 从现有的Android代码中导入到工作区 ,然后点击下一步。
    • 浏览到SDK安装目录,然后转到Support Library文件夹。例如,如果您要添加 appcompat 项目,则浏览到 /extras/android/support/v7/appcompat/。
    • 单击完成以导入该项目。对于v7 appcompat项目,您现在应该会看到一个名为 android-support-v7-appcompat 的新项目。
    • 在新的库项目中,展开 libs/ 文件夹,右键单击每个 .jar 文件,然后选择 构建路径 > 添加到构建路径 。例如,在创建v7 appcompat项目时,将android-support-v4.jar和android-support-v7-appcompat.jar文件都添加到构建路径中。
    • 右键单击库项目文件夹,然后选择 构建路径 > 配置构建路径
    • 顺序和导出 选项卡中,选中刚刚添加到构建路径中的 .jar 文件,以便这些文件可以用于依赖于此库项目的应用程序项目。例如,appcompat项目需要您导出android-support-v4.jar和android-support-v7-appcompat.jar文件。
    • 取消选中 Android依赖项
    • 点击确定来完成更改。
  • 现在您已经拥有了一个库项目,其中包含您选择的Support Library,可以与一个或多个应用程序项目一起使用。

    • 将库添加到您的应用程序项目中:
    • 项目资源管理器中,右键单击您的项目并选择属性
    • 在对话框左侧的类别面板中,选择Android
    • 窗格中,点击添加按钮。
    • 选择库项目,然后点击确定。例如,appcompat项目应列为android-support-v7-appcompat。
    • 在属性窗口中,点击确定。

当我尝试这样做时,我会收到错误消息:在org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@ad93a93上找不到方法complie()的参数[com.android.support:support-v4:18.0.+]请从Android SDK管理器中安装Android支持库。 <a href="openAndroidSdkManager">打开Android SDK管理器</a> - user3381665

5

// 运行这个命令 - 它会修复所有问题。

ionic cordova plugin add cordova-plugin-androidx-adapter


4
在我的情况下,错误出现在我的项目的一个模块上。我通过添加解决了这个问题。
dependencies {
    implementation 'com.android.support:support-v4:20.0.+'
}

这是相应模块在Gradle中的依赖关系。


2

tl;dr 从你的settings.gradle中移除所有未使用但依赖于support库的模块。

长版本:

在我们的情况下,我们已经在一个common.gradle文件中为所有模块(一个app模块和多个library模块)声明了support库作为依赖项,并由每个模块导入。然而,有一个库模块没有被声明为任何其他模块的依赖项,因此没有被构建。每隔几次同步,Android Studio会选择那个精确的模块来查找support库(这就是为什么它对我们来说似乎是随机发生的原因)。由于该模块从未被使用,因此它从未被构建,这反过来导致jar文件不在模块的intermediates文件夹中。

settings.gradle中移除此库模块并重新同步即可为我们解决问题。


1
如果以上解决方案都无效,您需要将项目进行Jetify以完全支持AndroidX。请尝试运行以下命令:npm i -D jetifier,然后运行npx jetify。您可以在此处找到更多详细信息:https://github.com/michalchudziak/react-native-geolocation/issues/39#issuecomment-514566895,这应该可以解决问题。请告诉我是否有效。同时,请确保在gradle.properties中添加以下内容:android.useAndroidX=trueandroid.enableJetifier=true

1
这个有效了。但是为什么? - Iva
React Native 应用程序不是标准的 Android 应用程序。带有本地Java代码的 React Native 模块通常将该代码作为源码分发,并直接链接源代码。当您更新模块时,来自 React Native 依赖项的最新安装的 Java 代码将不再被转换为 AndroidX,并且您的构建将失败。因此,每次更新带有本地 Java 代码的 React Native 模块时,您必须在已链接的源上执行 AndroidX 迁移。这就是这个工具所做的 - 它可以在您调用它时重写 node_modules 中的源代码。 希望能对您有所帮助。 - Sahil bakoru
1
谢谢!是的,那非常有见地。 - Iva

1
在Eclipse Luna中,我通过使用项目上的内容菜单解决了这个问题:Android工具>添加支持库...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接