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

Posted

技术标签:

【中文标题】Android Studio 无法解析导入的 AAR 模块中的符号【英文标题】:Android Studio cannot resolve symbols from imported AAR module 【发布时间】:2015-05-18 20:08:16 【问题描述】:

类似问题中的所有答案都涉及手动编辑 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 引用为工件,如 the library's documentation 所示? 我已经针对我的 build.gradle 和 settings.gradle 文件检查了类似问题的答案,并且与这些答案中的答案相同。事实上,由于 Android Studio 为我创建了它们,我认为它不会有任何问题。我不知道 gradle 或如何使用这个 compile 'com.github.amlcurran.showcaseview:library:5.0.0' 命令 - 我认为这就是你所指的。我刚刚从 Eclipse ADT 切换到 Android Studio,这是我第一次看到“gradle”这个词。此外,我还想知道为什么如果我导入 AAR,我不能像 JAR 一样引用类文件。 “我已经根据我的 build.gradle 和 settings.gradle 文件检查了类似问题的答案,并且与那些答案相同”——这并不意味着我们可以帮助您他们,因为我们看不到他们。 “这是我第一次看到“gradle”这个词”——它在the Android Studio overview 的第一个项目符号中。 including dependencies 上还有文档,例如您要查找的库。 是的,关键是我不想要关于 gradle 文件及其内容的答案,因为它们都没有帮助我:-)。感谢您的链接,我会看看。 @CommonsWare 所以第一个链接只是告诉我做我所做的,文件>导入模块。我下载了库并从本地文件系统导入它,与从在线资源导入它应该没有什么不同。第二个链接描述了我的 gradle 文件中已有的内容,因为我使用了 File > Import Module 向导。 @CommonsWare 【参考方案1】:

最近,我遇到了同样的问题。我有一个 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 不同意时,我解决了 here。

【讨论】:

当我这样做时,我得到 "Project app: Only Jar-type local dependencies are supported." gradle同步是否成功完成? 您可能想在新问题中发布该问题。解决后发布您自己的答案。将来可能对某人有所帮助。 :)【参考方案2】:

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

allprojects 
    repositories 
        flatDir 
            dirs 'libs'
        
    

【讨论】:

以上是关于Android Studio 无法解析导入的 AAR 模块中的符号的主要内容,如果未能解决你的问题,请参考以下文章

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

Android Studio 无法解析 dart 文件中的嵌套导入

尝试访问导入库中的方法时,Android Studio 显示“无法解析符号”

将 jar 文件导入 Android Studio 但仍然无法解析我的课程?

Android Studio 突然无法解析符号

Android Studio:从 G​​ithub 导入项目并使用 gradle 文件重建/清理/同步后“无法解析符号 R”