Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Benefits in Android to importing a library internally vs externally

Post ADT 17, non-Android libraries need to be included either in the "libs" folders of the project or exported via the "Order and Export" tab in the build path. What's the difference (if any) between importing a library externally:

External1

External2

And internally:

Internal2

Internal1

Is there an advantage to importing a library in a way that it is included in the "Android Dependencies" group?

like image 840
Jason Robinson Avatar asked May 07 '12 07:05

Jason Robinson


3 Answers

How do you add external jar dependencies into your Android project's build path (internally or externally) make no difference on the actual build process (more specifically at compile and dex step), all it does is to tell build process where to looking for the required jars at compile and dex step.

The Android Dependencies element shown in Java Build Path - Libraries window is just another abstract layer that ADT plugin used for managing/grouping jar dependencies. where your external jar files (in your case android-support-v4.jar) appears (inside or outside Android Dependencies) in that window makes no difference.

Since r17, dependencies management has been much improved, and it is recommended to use libs/ directory store all jar dependencies (refer to you internal way), which is considered as a automation approach (as ADT plugin becomes more smarter now), see Revisions for ADT 17.0.0:

New build features

  • Added feature to automatically setup JAR dependencies. Any .jar files in the /libs folder are added to the build configuration (similar to how the Ant build system works). Also, .jar files needed by library projects are also automatically added to projects that depend on those library projects. (more info)

However, you can still use the old way (refer to you external way) if you prefer, which is considered as a manual approach (as ADT plugin was stupid before), see Recent Changes‎ for r17 Release:

Important: If you are still referencing jar libraries manually instead of putting them under libs/ be aware of the following:

  • If the project is a Library project, these jar libraries will not be automatically visible to application projects. You should really move these to libs/

  • If the project is an application, this can work but you must make sure to mark the jar files as exported.

Is there an advantage to importing a library in a way that it is included in the "Android Dependencies" group?

Automation vs. Manual from dependency management perspective, automation is always considered as more errorless than manual in the world of computer science.

like image 97
yorkw Avatar answered Oct 22 '22 09:10

yorkw


The number one, show stopping, 'I can't believe they didn't test this', disadvantage of putting external jars in the libs directory is that you can't set the javadocs location for them, as the option shows as 'None (non modifiable)'.

Hence I still use Export option in build properties

like image 23
NickT Avatar answered Oct 22 '22 08:10

NickT


It has to do with library dependency management of Android. for details see http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

like image 25
k3b Avatar answered Oct 22 '22 09:10

k3b