Android Studio how to package single AAR from multiple library projects?

AndroidGradleAndroid StudioAndroid Gradle-Plugin

Android Problem Overview


I am building android library project, which has a dependency on another internal library project.

I am wondering if there is a way to package a single AAR library, which already contains internal library inside it. I would like to share only 1 AAR library package to my application developers.

This is how my build.gradle files look currently, but currently they produce separate AAR files and both needs to be included in Application's build.gradle. As application is being built by another company, we need to share the final AAR file with them and not the complete library projects.

----- internalLib -------->>>>>>>>>>

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion '18.1.1'
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

----- externalLib --------

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion '18.1.1'
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile project(':internalLib')
}

Android Solutions


Solution 1 - Android

There is no mechanism to combine library. It's a bit complicated as you probably want to control which dependencies get merged (for instance you probably don't want to include support-v4 in there). Also you'd need to merge the resources and Android manifest.

At this time there's no way to easily hack something, unless you are sure the resources have no conflicts between the two res folders (for instance you could have strings_a.xml in one lib and strings_b.xml in the other lib). This way you can just "merge" the two res folders by copying them both into the same location (as opposed to do a merge at the android res level).

For the Manifest it'd be more complicated, but doable with some custom code.

Providing a built-in mechanism for this is very low on our priority so don't expect it anytime soon.

Solution 2 - Android

For the sake you have to upload each library as separately on maven and use its implementation in parent library modules till the main library module. Only then when you publish your main library on maven will include your all child dependencies.

Solution 3 - Android

As far as we have only one option add aar as api dependency inside the module. For that we have to generate aar file and publish it to Maven and make it accessible by another module and consume it in app.

https://developer.android.com/studio/projects/android-library

As mentioned above android developer document.

> The library module with source code is copied to your project, so you can actually edit the library code. If you want to maintain a single version of the library code, then this is probably not what you want and you should instead add the compiled AAR file as described above.

If there anything else we can do, please let us know by jot down in the command section.

Solution 4 - Android

It is not supported

It is not recommended to include one library into another because it leads to a serious issues with managing versions and complexity of creating and supporting such solution.

You should stick to native approaches like dependency manager or rearchitect your codebase

[iOS Umbrella framework]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRahul JainView Question on Stackoverflow
Solution 1 - AndroidXavier DucrohetView Answer on Stackoverflow
Solution 2 - AndroidMuhammad OmerView Answer on Stackoverflow
Solution 3 - AndroidArulView Answer on Stackoverflow
Solution 4 - AndroidyoAlex5View Answer on Stackoverflow