Android所需的aar文件依赖项无法加载。

4
我在从maven中央存储库加载依赖项时遇到了问题。我有一个库项目,不同的客户端使用我的库。我的库依赖于GoolgePlayService和appcompat-v7。最近我开始使用Gradle代替ant。所以我使用了andoird-library插件,并将库.aar文件推送到了本地依赖项中。现在,在我的TestApp中,我从本地maven加载aar文件,但它无法加载来自maven中央存储库的依赖项文件。
以下是我的build.gradle文件:
apply plugin: '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”时,它可以上传到我的本地Maven仓库,其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文件 应用插件: 'android' 应用插件: 'maven'
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')
    }

}

我遇到了以下错误:

   错误代码:
        1
      输出:
        /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1549: error: 找不到与给定名称 '@style/Widget.AppCompat.Light.ActionBar.Solid' 匹配的资源。 
        /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1552: error: 找不到与给定名称 'background' 匹配的资源。  
        /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1556: error: 找不到与给定名称 'subtitleTextStyle' 匹配的资源。  

然而,如果我在我的TestApp build.gradle文件中的dependencies部分再次指定我的库依赖项,则一切正常。这意味着它正在从本地maven存储库加载我的library.aar文件,但没有从maven中央存储库加载appcompat-v7。

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

先感谢您, Samba Damerla

2个回答

2
在我的情况下,我通过以下方式使其正常工作:
  • uploading the aar files into our my Nexus
  • add my Nexus to allprojects:repositories:maven:url
  • specify transitive=true on the dependency, like:

    compile('com.snapfish:library:1.0.0_Build-1@aar'){
        transitive=true
    }
    
  • If I am pulling in SNAPSHOT Maven builds, I also have to set this:

    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'
    }
    

1

目前,Gradle无法处理传递依赖。

有关更多详细信息,请参见此答案: https://dev59.com/yHrZa4cB1Zd3GeqPyRun#20530181

"仅考虑当前解析配置的项目的存储库声明,即使涉及传递依赖项也是如此。"


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