Gradle for Android AAR Depending Upon AAR, Both In The Same Remote Repository?

前端 未结 3 1950
独厮守ぢ
独厮守ぢ 2020-12-14 06:40

There are a few questions floating around regarding transitive dependencies with AAR files in Gradle:

  • Android Studio 0.2.3 cannot resolve transitive aar depend
相关标签:
3条回答
  • 2020-12-14 07:18

    I don't have a public example but I have this scenario successfully setup in a internally-hosted Nexus repository. Here is the setup:

    App - Android application project LibraryB - Android library project picasso - Open source library from Square (available on Maven Central) LibraryA - Android library project

    App depends on LibraryB and picasso LibraryB depends on LibraryA

    Here is the POM for LibraryB (downloaded from Nexus)

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>com.example</groupId>
       <artifactId>LibraryB</artifactId>
       <version>0.1</version>
       <packaging>aar</packaging>
       <dependencies>
          <dependency>
             <groupId>com.example</groupId>
             <artifactId>LibraryA</artifactId>
             <version>3.0.1</version>
             <scope>compile</scope>
          </dependency>
          <dependency>
             <groupId>com.squareup.picasso</groupId>
             <artifactId>picasso</artifactId>
             <version>2.1.1</version>
             <scope>compile</scope>
          </dependency>
       </dependencies>
    </project>
    

    Here is the build.gradle for LibraryB

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.6.+'
        }
    }
    apply plugin: 'android-library'
    apply plugin: 'maven'
    
    version versionProp
    group 'com.example'
    
    repositories {
        mavenCentral()
        maven {
            url(exampleReleaseRepoUrl)
        }
    }
    
    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.0"
    
        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 19
        }
        release {
            runProguard false
            proguardFile 'proguard-rules.txt'
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
    
    dependencies {
        compile 'com.example:LibraryA:3.0.1'
        compile 'com.squareup.picasso:picasso:2.1.1'
    }
    
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: uri(exampleReleaseRepoUrl)) {
                    authentication(userName: nexusUsername, password: nexusPassword)
                }
                snapshotRepository(url: uri(exampleSnapshotRepoUrl)) {
                    authentication(userName: nexusUsername, password: nexusPassword)
                }
            }
        }
    }
    

    Here is the POM for LibraryA (downloaded from Nexus)

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>com.example</groupId>
       <artifactId>LibraryA</artifactId>
       <version>3.0.1</version>
       <packaging>aar</packaging>
       <dependencies>
          <dependency>
             <groupId>com.android.support</groupId>
             <artifactId>support-v4</artifactId>
             <version>19.0.0</version>
             <scope>compile</scope>
          </dependency>
       </dependencies>
    </project>
    

    The build.gradle for LibraryA is very similar to the one for LibraryB above.

    The artifacts and POM for LibraryA and LibraryB were uploaded via the following Gradle command

    gradle uploadArchives
    

    The build.gradle for App looks like this

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.6.+'
        }
    }
    apply plugin: 'android'
    
    repositories {
        mavenCentral()
        maven {
            url(exampleReleaseRepoUrl)
        }
    }
    
    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.0"
    
        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 19
        }
        buildTypes {
            release {
                runProguard false
                proguardFile getDefaultProguardFile('proguard-android.txt')
            }
        }
        productFlavors {
            defaultFlavor {
                proguardFile 'proguard-rules.txt'
            }
        }
    }
    
    dependencies {
        compile 'com.android.support:support-v4:19.0.0'
        compile 'com.android.support:appcompat-v7:19.0.0'
        compile 'com.example:LibraryB:0.1'
    }
    

    If you need any further information let me know.

    0 讨论(0)
  • 2020-12-14 07:21

    Starting from Android Studio 0.4.4 using .AAR dependencies is as straightforward as using .JAR dependencies. Just put it into \libs directory and reference it in build.gradle:

    compile files('libs/YOUR_LIBRARY_NAME.aar')
    
    0 讨论(0)
  • 2020-12-14 07:34

    It appears that my problem has cleared up with Gradle 1.9 and com.android.tools.build:gradle:0.7.+. Leastways, I can no longer reproduce the problem.

    0 讨论(0)
提交回复
热议问题