Question: I've been reading some articles about the new adoption of Gradle as the standard build system for Android apps. Well, coming from standard Java development I usually depend on *jar* files in order to build my project. However it seems that Android has also *aar* packages, which are the equivalent to the *dll* files in a Windows OS, as mentioned [here](http://blog.glassdiary.com/post/67134169807/how-to-share-android-archive-library-aar-across):

> 
> First, you have to realize that the Android platform does not allow application-level “shared libraries”. In the “traditional” programming language platforms, C, C++, Java, you name it, we have this mechanism of sharing runtime libraries. (E.g., DLL on Windows, DSO on Unix, Jar on JVM, etc.). On Android, however, you cannot do that, unless you are Google or a handset manufacturer (See Footnote 1 below). As an application developer, this can be a fundamental limitation. “Sharing” or “reusing” codes, both at build time and run time, is a very important part of software engineering practice. This is rather hard (not impossible, just harder) on Android because of the aforementioned limitation.
> 
> 
> 

However, I have some doubts around this concept. I mean, when should a developer be interested including *aar* dependencies in its application? Are this dependencies tightened to some SDK minimum version?

For example, in one project I access a COM port, which I use [NDK precompiled](https://developer.android.com/tools/sdk/ndk/index.html) *.so* libraries for. Do I have to create an aar if I want to share this utility?

Answer: 
`AAR` files are more similar to `Jar`s than to `Dll`s for the following reason:

> 
> `Dll`s can be shared across applications where as `AAR`s and jars are
>  packaged in with your app.
> 
> 
> 

`AAR`s vs `Jar`s:

> 
> The main difference between a `Jar` and a `AAR` is that `AAR`s include
>  resources such as `layouts, drawables` etc. This makes it a lot easier
>  to create self-contained visual components. For example if you have
>  multiple apps that use the same login screen, with `Jar`s you could
>  share classes but not the layout, styles, etc., you still had to
>  duplicate them. With `AAR`s everything is bundled in one neat package.
> 
> 
> 

In conclusion, `AAR`s are a big step in the right direction.

**Note:**  
 Similar attempts were made with `apk-lib`s but they are now obsolete as `AAR`s are much better.
The statement "*The main difference between a Jar and a AAR is that AARs include resources such as layouts, drawables etc.*" does not correspond to the JAR file specification and therefore is not a truth.
According the [JAR file specification](http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html): 

> 
> JAR file is a file format based on the popular ZIP file format and is used for aggregating many files into one. A JAR file is essentially a zip file that contains an optional META-INF directory.
> 
> 
> 

As you can see, there is no content limitation which forbids including resources such as layouts, drawables etc. in a JAR file. For more detail see article 5.3 "Creation and Loading" of The Java® Virtual Machine Specification.

So on the question Android Archive Library (aar) vs standard jar. The answer depends on what build tool are you using.

If you are using Android Studio as a build tool (respectively as a project organizer) you'd definitely better use \*.aar files to share encapsulated resources between Android projects. AAR file format is a part of Android Studio build and as it's commented in the other comments here its user interface supports aar format for Android Libraries.

But except Android Studio the rest of the world does not know what is that thing aar file (artifact). For example, if your Android build is based on Maven the preferred file for resources sharing will be jar because that is the native Maven java project artifact and there is no limitation what to put in the standard jar file. In addition, there is a way to explain Maven any file format, include aar by using lifecycle enhancement with a new component. A simple example is available here [How do I create a new packaging type for Maven?](https://stackoverflow.com/questions/1427722/how-do-i-create-a-new-packaging-type-for-maven)