2014-09-15 4 views
1

J'ai une bibliothèque personnalisée qui doit être référencée dans environ 10 projets. Tout fonctionne bien dans Eclipse mais je veux les migrer vers Android Studio afin de tirer parti du système de construction. Je l'ai déjà vérifierRéférencement de projets de bibliothèque externes dans Android Studio (v0.8.9)

Android studio add external project to build.gradle

How to share a single library source across multiple projects

et d'autres liens et documents en Gradleware mais je ne reçois pas de faire mes projets compilent.

Ma structure de fichier est comme:

+ projets

| + libraryProject

| + --- espace de travail

| + ------ projectSrc

|

| + project0

| + --- espace de travail

| + ------ projectSrc0

|

| + project1

| + --- espace de travail

| + ------ projectSrc1

. .

| + projectn

| + --- espace de travail

| + ------ projectSrcN

Chaque projet contient documents, fichiers de conception, etc ... et est donc pas pratique d'avoir le src dans le même dossier racine.

Dans mon "Projet1", settings.gradle fichier Je l'ai utilisé:

include ':module-custom-lib' 
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc') 

Dans mon build.gradle fichier, section dépendances ajouter:

dependencies { 
    compile project(':..:..:..:libraryProject:workspace:projectSrc') 
    .... 
} 

Mais J'ai une erreur disant que le projet n'a pas été trouvé.

J'ai aussi utilisé l'approche suivante:

def customLib = file('../../../libraryProject/workspace/projectSrc') 
settings.createProjectDescriptor(rootProjectDescriptor, 'module-custom-lib', customLib) 
include ':module-custom-lib' 

Ensuite, dans le build.gradle

dependencies { 
    compile project(':module-custom-lib') 
    .... 
} 

S'il vous plaît aider.Merci pour votre temps.

EDIT: J'ai réussi à le faire fonctionner en ajoutant le module app comme suffixe dans le projet dir .:

include ':module-custom-lib' 
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc/app') 

Maintenant, les membres de la bibliothèque résolvent parfaitement, mais «ce projet La classe de ressources R 'ne peut pas être résolue. Donc, si je fais:

setContentView(R.layout.main); 

il ne trouve pas cette ressource. Le nettoyage et la reconstruction du projet ne résolvent pas le problème.

EDIT 2: Apparemment, il y a eu un problème avec la fusion de manifestes car le problème a été corrigé une fois que j'ai ajusté minSdk et targetSdk des deux projets. La solution précédente fonctionne parfaitement.

Répondre

4

Votre première tentative a une syntaxe plus simple et devrait fonctionner. Votre settings.gradle fichier semble correct:

include ':module-custom-lib' 
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc') 

si vous devez être prudent, y compris un chemin relatif là - Android Studio ne peut utiliser le même répertoire de travail comme vous le faites construire à partir de la ligne de commande, de sorte le référencement de choses relatives à rootDir peut aider à atténuer les problèmes.

Dans le bloc dependencies du fichier de construction d'un module, vous devez faire référence à un module de la même manière que vous faites dans settings.gradle, donc vous devriez utiliser quelque chose comme ceci:

dependencies { 
    compile project(':module-custom-lib') 
} 

En dependencies blocs, vous liez des projets à l'aide de l'espace de nom de projet de Gradle, et puisque vous avez déjà explicitement configuré le répertoire racine du module de bibliothèque, vous n'avez pas besoin de le localiser dans le système de fichiers. Cette syntaxe :..:..:.. ne fonctionnerait de toute façon pas pour référencer un module situé en dehors du répertoire racine de votre projet, comme celui-ci.

+0

Il me donne l'erreur "Configuration avec le nom 'défaut' introuvable." –

+0

Un conseil? Que signifie vraiment ce message? –

+0

Cela signifie qu'il ne trouve pas de module à l'endroit pointé par la configuration dans settings.gradle - il est probable qu'il ne trouve pas du tout son build.gradle. –

0

Vous devriez envisager de regrouper les «versions» de votre bibliothèque dans un référentiel Maven (éventuellement votre référentiel Maven local). De cette façon, vous pouvez référencer votre bibliothèque à partir de tout autre projet qui a besoin de l'utiliser comme vous le faites avec des bibliothèques tierces.

+0

J'ai beaucoup de projets qui vont encore être référencés à partir d'Eclipse (pendant le processus de migration) donc je ne veux pas pousser au repo maven local ni déployer comme aar. –

Questions connexes