Ad

Unable To Get Transitive Dependencies Of My Library In My Android App

I created an Android Library in Android studio, which has some external dependencies(Retrofit, for example). But when i tried to use this Library in an Android app, The app doesn't include the transitive dependencies(the ones included in the library).

I've already tried publishing the library to Bintray, change the 'implementation' keyword in app-gradle file to 'api'. I've also tried setting transitive = true in my app's gradle file

When trying to build the Android app, It shows Resource Linking Failed for CardView which's used in my Library.

Ad

Answer

I faced the same problem while building a Library for Android. I was trying to directly upload the .aar file from the android studio to the bintray. But appparantly, it was not including the pom.xml file. So I followed this tutorial to generate the zip file. Then create a new version at bintray and then manually upload the zip file using the UI upload option Also, do not forget to check the explode this Archive option while uploading. Your can then, publish the library and use it with all its transitive dependencies. Here's an example build.gradle code:

def version = 'your.version'
def localReleaseDest = "${buildDir}/release/${version}"
uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = 'your.package.name'
        pom.artifactId = 'yourModuleName'
        pom.version = 'your.version'
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file://${localReleaseDest}")
    }
}

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}
task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "release-${version}.zip"
}

task generateRelease {
    doLast {
        println "Release ${version} can be found at ${localReleaseDest}/"
        println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
    }
}

generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)

put this code outside all blocks in your app level gradle after modifying it as needed. Now, sync project and open terminal inside the Android studio, and execute this command:

./gradlew clean build generateRelease

this will generate a .zip file in your app/build directory which you can upload to bintray like described above

Ad
source: stackoverflow.com
Ad