Tar_Tw45
Tar_Tw45

Reputation: 3222

Link module from external project in Android Studio

I'm migrating all my project from Eclipse to Android Studio (1.0.2, just download it yesterday) but having issue with external module.

In Eclipse, I have workspace like this

enter image description here

All the activities, fragments, models and classes are in 'Core' project. The Core project required some libraries to work (Such as Google Play Service, Facebook or Twitter) While App 1, App 2, App 3 and so on are just while label apps. Those app doesn't contain anything except icons, configuration files, loading images etc.

I manage to import "Core" app and all it dependencies to Android Studio as a new project. When I build the core, I got 0 errors and 0 warnings

enter image description here

Then, I create new project call "Test" and link "Core" project to it by following selected answer from this question

How to share a single library source across multiple projects

setting.gradle of Test Project

include ':Test'
include '..:..:AppyCore:Core'

build.gradle of Test Project

dependencies {
    compile 'com.android.support:support-v4:+'
    compile project('..:..:AppyCore:Core')
}

But, when I rebuild project, I got this error

Error:(41, 0) Project with path ':SlidingMenu' could not be found in project '..:..:AppyCore:Core'

When I double click the error message, IDE show me build.gradle of the Core project and highlight the dependency part of the file as following

enter image description here

Seems like when I try to build the "Test" project, it can't locate all the dependencies of "Core" project. Do you know how to fix this?

Note

(I tried by intentionally put wrong directory and got this same error)

Upvotes: 19

Views: 2658

Answers (1)

Kai
Kai

Reputation: 15476

You are trying to make a new project for each app version, and link them to a common codebase. In this scenario, it's much better to use the "variant" feature of Gradle. With it, each app is a "variant" of the core app, with has its own package name, its own resource files, and even its own src files.

To do so you need to:

  1. modify build.gradle for your core app:

    android {
      productFlavors {
        // default BuildConfig variables
        all {
        }
        app_1 {
            applicationId 'com.yourcompany.app_1' //package name
            def variantName='app_1' //name of the variant
        }
        app_2 {
            applicationId 'com.yourcompany.app_2' //package name
            def variantName='app_2' //name of the variant
        }
      }
    }
    
  2. Create app_1, app_2... app_x folders in /src, each with its own AndroidManifest.xml, /src and /res folders.

  3. Change the current variant in Android Studio: enter image description here

You can find more info on building variant on Android Tools Project Site.

I can personally vouch for this approach, as I've used this such that a single Android Studio project supports the building of dozens variant, each with its own unique package name, resource files, and custom code that significantly modifies some aspect of the base app, all the while sharing a common base code.

Upvotes: 5

Related Questions