Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Local AAR file doesn't manage dependencies

I have worked on an Android library (an API client) that uses Retrofit and Joda DateTime.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'joda-time:joda-time:2.8.1'
}

Now that the library is completed I compiled it into an AAR file and I want to use it in an application, so I added it to the libs folder of the application and included it in the build.gradle file like so :

dependencies {
    compile(name:'s3papiandroidclient', ext:'aar')
    //Some other things
}

However, when I try to initialize the API client from the library, the application crashes when it comes to calling objects from RetroFit or DateTime (For instance, retrofit.RestAdapter). It looks like Gradle does not read the dependencies from the AAR library, thus doesn't install Retrofit and DateTime in my application. I tried to use the transitive=true parameter on my AAR file, does not help.

Other point that might help, I tried to generate a POM file, and the dependencies don't appear in it either. It looks like there's really something going on with these and I am completely stuck on that.

The only workaround I could find is to add manually the dependencies from the AAR file to the app's build.gradle file but it doesn't make sense, I assume Gradle can import dependencies on its own !

Regards,

Gyoo.

like image 585
Gyoo Avatar asked Jul 31 '15 11:07

Gyoo


People also ask

How do I add a dependency to AAR?

Add your AAR or JAR as a dependency To use your Android library's code in another app module, proceed as follows: Navigate to File > Project Structure > Dependencies. In the Declared Dependencies tab, click and select Jar Dependency in the dropdown.

What is .AAR file in Android Studio?

AAR files can contain Android resources and a manifest file, which allows you to bundle in shared resources like layouts and drawables in addition to Java classes and methods. AAR files can contain C/C++ libraries for use by the app module's C/C++ code.

What is the difference between API and implementation scopes?

The plugin exposes two configurations that can be used to declare dependencies: api and implementation. The api configuration should be used to declare dependencies which are exported by the library API, whereas the implementation configuration should be used to declare dependencies which are internal to the component.


1 Answers

It looks like Gradle does not read the dependencies from the AAR library

That is because there are no dependencies in an AAR file.

I tried to generate a POM file, and the dependencies don't appear in it either

Then there is a problem in how you are generating the POM file. Plus, AFAIK, you would need to put the AAR and its POM file in a repository, in order for Gradle to recognize the POM and use the dependency information inside of it.

like image 81
CommonsWare Avatar answered Sep 19 '22 00:09

CommonsWare