Gradle 找不到 android 支持 v4 的符号
Gradle cannot find symbol for android support v4
我正在将一个曾经使用 Maven 进行依赖管理的 Android 项目迁移到 Gradle。
我是 Gradle 的新手,我遇到了 Gradle 无法编译项目的问题,因为它没有说找不到一堆符号,所有这些都是方法是 support-v4 库的一部分。
我认为我正确地添加了依赖项,因为我遵循了一堆教程。它们在我的 build.gradle 文件中的列出方式如下:
dependencies {
compile ('com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar') {
exclude module: 'support-v4'
}
compile ('com.facebook.android:facebook-android-sdk:4.1.0') {
exclude module: 'support-v4'
}
compile (
'com.android.support:appcompat-v7:22.2.1',
'com.android.support:support-v4:22.2.1',
'com.android.support:recyclerview-v7:22.2.1',
'com.android.support:cardview-v7:22.2.1',
'com.google.android.gms:play-services:8.3.0',
'com.github.satyan:sugar:1.3',
'se.emilsjolander:stickylistheaders:2.5.2',
'br.com.estudio89:sentry:1.0-SNAPSHOT',
'br.com.estudio89:syncing:1.0.17',
'br.com.estudio89:push_messaging:1.0.3',
'com.joanzapata.android:android-iconify:1.0.9',
'com.squareup.picasso:picasso:2.5.2',
'info.hoang8f:android-segmented:1.0.5',
'joda-time:joda-time:2.7',
'com.afollestad:material-dialogs:0.7.5.1',
'com.facebook.rebound:rebound:0.3.8',
'commons-net:commons-net:3.3',
files("src/main/libs/YouTubeAndroidPlayerApi.jar")
)
}
我花了很多时间试图解决这个问题,但我做不到。
我在尝试从命令行构建项目时遇到的错误之一如下:
error: cannot find symbol
menuSettings = MenuItemCompat.getActionView(menu.findItem(R.id.action_settings));
^
symbol: method getActionView(MenuItem)
location: class MenuItemCompat
我做错了什么? Maven 可以使用相同的依赖集编译项目。
非常感谢!
我终于弄明白了...
依赖项 com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar
具有 support-v4 作为依赖项(作为 jar 包含在库中)。我知道这一点,因此我在该依赖项中添加了 exclude module: 'support-v4'
行。但是,排除似乎不起作用,gradle 实际上是在编译这个旧版本的支持库,而不是我在 build.gradle
文件中实际指定的那个。
我所做的是从使用 github 上托管的库切换到另一个存储库:fr.avianey.com.viewpagerindicator:library:2.4.1
我想这是一个非常特定于我的项目的错误,但我决定 post 在这里以防万一其他人 运行 遇到同样的问题。
您正在使用:
compile ('com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar') {
exclude module: 'support-v4'
}
这种排除是行不通的。
你正在从 jitpack 中获取这个库。
This library 将支持库添加为 jar 而不是 gradle 依赖项。
这意味着pom文件没有依赖关系,你不能用gradle排除jar文件,因为jar在aar文件里面(没有pom怎么能gradle 知道应该排除这些文件吗?)。
你可以查看 jitpack 仓库中的文件:
我正在将一个曾经使用 Maven 进行依赖管理的 Android 项目迁移到 Gradle。
我是 Gradle 的新手,我遇到了 Gradle 无法编译项目的问题,因为它没有说找不到一堆符号,所有这些都是方法是 support-v4 库的一部分。
我认为我正确地添加了依赖项,因为我遵循了一堆教程。它们在我的 build.gradle 文件中的列出方式如下:
dependencies {
compile ('com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar') {
exclude module: 'support-v4'
}
compile ('com.facebook.android:facebook-android-sdk:4.1.0') {
exclude module: 'support-v4'
}
compile (
'com.android.support:appcompat-v7:22.2.1',
'com.android.support:support-v4:22.2.1',
'com.android.support:recyclerview-v7:22.2.1',
'com.android.support:cardview-v7:22.2.1',
'com.google.android.gms:play-services:8.3.0',
'com.github.satyan:sugar:1.3',
'se.emilsjolander:stickylistheaders:2.5.2',
'br.com.estudio89:sentry:1.0-SNAPSHOT',
'br.com.estudio89:syncing:1.0.17',
'br.com.estudio89:push_messaging:1.0.3',
'com.joanzapata.android:android-iconify:1.0.9',
'com.squareup.picasso:picasso:2.5.2',
'info.hoang8f:android-segmented:1.0.5',
'joda-time:joda-time:2.7',
'com.afollestad:material-dialogs:0.7.5.1',
'com.facebook.rebound:rebound:0.3.8',
'commons-net:commons-net:3.3',
files("src/main/libs/YouTubeAndroidPlayerApi.jar")
)
}
我花了很多时间试图解决这个问题,但我做不到。
我在尝试从命令行构建项目时遇到的错误之一如下:
error: cannot find symbol
menuSettings = MenuItemCompat.getActionView(menu.findItem(R.id.action_settings));
^
symbol: method getActionView(MenuItem)
location: class MenuItemCompat
我做错了什么? Maven 可以使用相同的依赖集编译项目。
非常感谢!
我终于弄明白了...
依赖项 com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar
具有 support-v4 作为依赖项(作为 jar 包含在库中)。我知道这一点,因此我在该依赖项中添加了 exclude module: 'support-v4'
行。但是,排除似乎不起作用,gradle 实际上是在编译这个旧版本的支持库,而不是我在 build.gradle
文件中实际指定的那个。
我所做的是从使用 github 上托管的库切换到另一个存储库:fr.avianey.com.viewpagerindicator:library:2.4.1
我想这是一个非常特定于我的项目的错误,但我决定 post 在这里以防万一其他人 运行 遇到同样的问题。
您正在使用:
compile ('com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar') {
exclude module: 'support-v4'
}
这种排除是行不通的。
你正在从 jitpack 中获取这个库。
This library 将支持库添加为 jar 而不是 gradle 依赖项。
这意味着pom文件没有依赖关系,你不能用gradle排除jar文件,因为jar在aar文件里面(没有pom怎么能gradle 知道应该排除这些文件吗?)。
你可以查看 jitpack 仓库中的文件: