I've been pulling out my hair over this in the past two days and searched
the Internet for best practices when it comes to organizing reusable code
in an Android Studio project. Coming from an Eclipse development background
it's not really all that intuitive to understand. This post is a bit
longer, so bear with me.
*TL;DR:* *What's your best practice when it comes to module organization
and version control?*
The way I organized code so far using Eclipse for development and Apache
Ant for building projects allowed me to easily keep the app project
separate from its library projects. They could reside in different
directories that belong to different version control system repositories.
Now with Android Studio and my limited understanding of Gradle and the new
build process I am basically forced to have all so-called library
*modules* arranged as sub-directories of the main app project directory.
In terms of code organization I have the following options:
- *I use only a single massive repository *that is basically an Android
Studio project that hosts all my Android app modules and custom library
modules
- This is not going to happen
- I keep app projects in separate repositories and *I import my
custom library modules*
-
*Importing a module creates a copy of the original *
- This means *redundancy* and *code synchronization issues*. I may
forget to merge back changes I've done to one of the library modules
- Unfortunately this is the official solution provided by the
IntelliJ IDEA documentation
https://www.jetbrains.com/idea/help/sharing-android-source-code-and-resources-using-library-projects.html#d806616e254
- I keep app projects in separate repositories and *check out my
library modules from a separate repository as a Git submodule
http://git-scm.com/book/en/v2/Git-Tools-Submodules*
- I *cannot cherry-pick the needed library modules* from the Git
repository. Git submodule checks out the whole library repository
- It does not play nicely with that one level deep project/module
directory structure for Android Studio projects
- I set up a *Maven repository for my library modules* and add the
needed modules as dependencies to my app project
- Very elegant, but...
- Every single tiny change in my library code requires rebuilding and
deploying the module.
- I also fear that I need to increase the version code / build number
every single time so the local Maven cache gets updated? I have no
experience with this. :-/
*Here is what I am currently doing* and I'm not sure if it's good enough or
can be considered a best practice:
This is my directory structure for app projects:
\ projects
\ my-android-libs (checked out from library modules repository)
\ module-1
\ module-2
\ ...
\ App-1 (checked out from App-1 repository)
\ app
\ ...
\ App-2 (checked out from App-2 repository)
\ app
\ ...
As suggested in this post http://stackoverflow.com/a/17490233/1473663, in
any of those app projects I need to alter the settings.gradle file and add
the desired module dependency like this:
include ':app'
include ':module-1'
project(':module-1').projectDir = new File(settingsDir,
'../my-android-libs/module-1)
Then I also need to add to the app module's build.gradle file a compile
project statement to the dependencies list:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(':module-1')
}
This workaround works so far and right now it's the lesser evil for me.
However, I'm still totally new to Android Studio, Gradle and Maven and I'd
like to hear if you guys know some best practices when it comes to module
organization, project setup and version control. I'm especially interested
if anyone of you goes with the private Maven repository solution and how
that works for you.
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
---
You received this message because you are subscribed to the Google Groups
Android Developers group.
To unsubscribe from this group and stop receiving emails from it, send an email
to android-developers+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.