Android Studio无法解析导入的AAR模块中的符号

17
所有类似问题的答案都谈到了手动编辑gradle文件。但是我已经使用Android Studio导入了AAR文件并检查了build.gradle文件,它们看起来都是正确的。
我的问题是这个:
我已经导入了ShowCaseView v5.0.0 AAR,但是当我尝试在我的Tutorial.java文件中导入这些类(如图中所示),Android Studio无法识别这些类。 Android Studio只能识别com.github.amlcurran.showcaseview.R。
我还尝试过清除和重新构建项目以及关闭和重新打开Android Studio,但都没有帮助。
请注意忽略缺少的XML文件,因为那是在我将它们复制到项目之前的情况。
Gradle文件
ShowCaseView-5.0.0 > build.gradle:
configurations.create("default")
artifacts.add("default", file('ShowCaseView-5.0.0.aar'))

我的应用的 build.gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.giraffeweather"
        minSdkVersion 19
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile project(':ShowCaseView-5.0.0')
}

Android Studio 项目的 build.gradle 文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

gradle设置文件settings.gradle:

include ':app', ':ShowCaseView-5.0.0'

“已检查了build.gradle文件,它们似乎都是正确的”--我们无法帮助您确认,因为您尚未发布build.gradle(在这种情况下,显然还有settings.gradle)文件。为什么不像库的文档中所示一样将AAR作为构件引用呢? - CommonsWare
我已经检查了类似问题的答案,并与我的build.gradle和settings.gradle文件进行了比对,结果与那些答案相同。实际上,由于Android Studio为我创建了这些文件,我认为不会有任何问题。我不知道gradle或如何使用compile 'com.github.amlcurran.showcaseview:library:5.0.0'命令 - 我想这就是你所指的。我刚从Eclipse ADT转到Android Studio,这是我第一次看到“gradle”这个词。此外,我仍然想知道为什么如果我导入AAR文件,就不能像JAR文件一样引用类文件。 - Ozzy
是的,我的意思是我不想得到关于Gradle文件及其内容的答案,因为它们都没有帮助到我 :-). 感谢提供的链接,我会查看的。@CommonsWare - Ozzy
所以第一个链接只是告诉我做了我已经做过的事情,那个页面没有涉及导入模块。"从在线源导入不应有任何区别" - 是的,这是不同的。我建议您改用文档中所指的“远程二进制依赖项”。 - CommonsWare
那个页面没有涉及导入模块。图11:“文件>新建模块”,尽管示例是针对在线源的,但导入本地AAR的菜单相同。 - Ozzy
显示剩余2条评论
2个回答

4

最近,我遇到了同样的问题。我需要将一个AAR库导入到我的项目中,但这个库只提供了AAR文件。我通过将AAR文件放在libs/文件夹中,并在我的应用模块的gradle文件中添加以下行来解决了这个问题:

dependencies {
    ...
    compile files('libs/theFirstLib.aar')
}

您也可以像这样添加多个AAR文件:
dependencies {
    ...
    compile files('libs/theFirstLib.aar', 'libs/theSecondLib.aar')
}

如果您正在使用Gradle 3.0.0或更高版本,则可能需要将compile替换为implementation
implementation files('libs/theFirstLib.aar')

非常成功!

注意:有时导入AAR会导致另一个“无法解析符号”的错误,我在这里解决了Android Studio和Gradle不一致的问题。


当我这样做时,我得到了“项目应用程序:仅支持Jar类型的本地依赖项”。 - FirstOne
Gradle同步成功完成了吗? - user1506104
你可能想在一个新问题中发布这个问题。然后在解决它后发布你自己的答案,对未来的某些人可能会有帮助。 :) - user1506104

2
您需要在项目的build.gradle文件中指定“ShowCaseView-5.0.0.aar”的位置。例如,ShowCaseView-5.0.0.aar文件位于名为“libs”的文件夹下,该文件夹位于项目的根目录下,请更新您的build.gradle文件以添加以下内容。
allprojects {
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

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