Rahul Jain
Rahul Jain

Reputation: 833

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

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

Upvotes: 70

Views: 24228

Answers (4)

yoAlex5
yoAlex5

Reputation: 34175

Android Studio package single AAR from multiple libraries

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]

Upvotes: 1

Arul
Arul

Reputation: 1179

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.

Upvotes: 0

Muhammad Omer
Muhammad Omer

Reputation: 229

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.

Upvotes: 1

Xavier Ducrohet
Xavier Ducrohet

Reputation: 28529

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.

Upvotes: 43

Related Questions