Android aar 文件所需的依赖项未加载

标签 android dependencies aar

我在从 Maven 中心存储库加载依赖项时遇到问题 我有一个图书馆项目,我的不同客户使用我的图书馆。我的库依赖于 GoolgePlayService 以及 appcompat-v7。 最近我开始使用 Gradle 而不是 ant。所以我使用了 andoird-library 插件并将我的 library.aar 文件推送到我的本地依赖项中。 现在在我的 TestApp 中,我从本地 maven 加载了 aar 文件,但它没有从 maven 中央存储库加载 depenecy 文件。

下面是我的build.gradle文件

应用插件:'android-library'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0'
    }
}

apply plugin: 'maven'

version = "1.0.0_Build-1"
group = "com.sflibrary"

 repositories {
    mavenCentral()
 }

dependencies {
     compile ('com.google.android.gms:play-services:4.0.30') {
        exclude module: 'support-v4'
     }
     compile 'com.android.support:appcompat-v7:+'
     compile files('libs/android-support-v4.jar')
     compile files('libs/libGoogleAnalyticsServices.jar')
}


android {
    buildToolsVersion "17.0.0"
    compileSdkVersion 17
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 17
    }

    lintOptions {
        abortOnError false
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']

            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']

            renderscript.srcDirs = ['src']

            res.srcDirs = ['res']
            assets.srcDirs = ['assets']

        }


        instrumentTest.setRoot('tests')
    }

}

uploadArchives {
  repositories {
    mavenDeployer {
      repository(url: "file://${System.env.HOME}/.m2/repository/")
    }
  }
}

当我运行“gradle uploadArchives”时,它能够上传到我的本地 mavel 存储库,它的 pom 文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.sflibrary</groupId>  
  <artifactId>library</artifactId>  
  <version>1.0.0_Build-1</version>  
  <packaging>aar</packaging>  
  <dependencies>  
        <dependency>  
           <groupId>com.google.android.gms</groupId>  
           <artifactId>play-services</artifactId>  
           <version>4.0.30</version>  
      <scope>compile</scope>  
    </dependency>  
    <dependency>  
      <groupId>com.android.support</groupId>  
      <artifactId>appcompat-v7</artifactId>  
      <version>+</version>  
      <scope>compile</scope>  
    </dependency>  
  </dependencies>  
</project> 

下面是我的TestApp build.gradle文件 apply plugin: 'android' apply plugin: 'maven'

<pre><code>buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.7.+' } } repositories { mavenCentral() mavenLocal() } dependencies { compile('com.snapfish:library:1.0.0_Build-1@aar') compile files('libs/httpmime-4.2.1.jar') } android { buildToolsVersion "17.0.0" compileSdkVersion 17 defaultConfig { minSdkVersion 14 targetSdkVersion 17 } lintOptions { abortOnError false } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } instrumentTest.setRoot('tests') } } </code></pre> <p>I am getting below error </p>
   Error Code:
        1
      Output:
        /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1549: error: Error retrieving parent for item: No resource found that matches the given name '@style/Widget.AppCompat.Light.ActionBar.Solid'.  
        /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1552: error: Error: No resource found that matches the given name: attr 'background'.  
        /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1556: error: Error: No resource found that matches the given name: attr 'subtitleTextStyle'.  

但是,如果我再次在我的 TestApp build.gradle 文件依赖项部分中指定我的库依赖项,它会工作正常。这意味着它从本地 maven 存储库加载我的 library.aar 文件,但不从 maven 中央存储库加载 appcompat-v7。

我不知道我在这里犯了什么错误。

提前致谢 桑巴达默拉

最佳答案

就我而言,我能够通过以下方式让它工作:

  • 将 aar 文件上传到我们的 Nexus
  • 将我的 Nexus 添加到 allprojects:repositories:maven:url
  • 在依赖项上指定 transitive=true,例如:

    compile('com.snapfish:library:1.0.0_Build-1@aar'){
        transitive=true
    }
    
  • 如果我要引入 SNAPSHOT Maven 构建,我还必须进行以下设置:

    configurations.all {
        // check for updates every build (If a version number ends in -SNAPSHOT it is implicitly changing when looking for it in a maven repository)
        resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
    }
    

关于Android aar 文件所需的依赖项未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21930494/

相关文章:

android-ndk - UnsatisfiedLinkError 找不到 "libnative-lib.so"且 libnative-lib.so 在 aar 文件中可见

android - 如何在 android 中以编程方式应用低音效果

android - 我可以在 iOS 中使用 C++ 模板吗?

java - 如何在 SQLite 中根据 3 个值而不是仅一个值返回一行? (已经完成1的代码)

java - 如何获取 Maven Artifact 的文件路径?

R:as.environment(pos) 中的错误/结束时出错:搜索列表中没有名为 "package:[package]"的项目

Android 分配跟踪器与 Mapview 的理解

android - 库 com.google.android.gms :play-services-base is being requested by various other libraries at [[15. 0.1,15.0.1]],但解析为 16.0.1

android - Kotlin AAR 库 w/proguard : How to keep ONLY class and method names?

android - Android Studio 3.0 不再在输出文件夹中创建 AAR 库