J'essaie de migrer un projet depuis Eclipse mais rien de ce que j'ai essayé ne fonctionne. Dans Eclipse, j'ai 3 projets (2 projets d'application Android et 1 projet de bibliothèque Android). Les 2 projets d'application dépendent du projet de bibliothèque. Lorsque je fais l'exportation gradle, j'obtiens 3 projets qui ne fonctionnent pas. Je suis prêt à restructurer le projet mais je n'ai pas trouvé de documentation sur la manière de procéder.
Existe-t-il un moyen de faire fonctionner ensemble les 3 projets qu'Eclipse exporte ? Vaut-il mieux que je restructure les choses et si oui, existe-t-il une documentation sur la manière de procéder ?
Mise à jour
J'ai téléchargé l'ensemble du projet sur GitHub. https://github.com/respectTheCode/Android-studio-library-example
Mise à jour 1
Sur la base des suggestions de Padma Kumar, voici ce que j'ai essayé.
- Créez un nouveau projet appelé
MyApp
- Cliquez sur
File > New Module
choisissezAndroid Library
et le nommerMyLib
- Cliquez sur
Build > Make Project
La construction échoue avec cette erreur
Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
J'ai ensuite ajouté un package
au manifeste en le rendant
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Après la construction, j'obtiens cette erreur
Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist
L'ajout de la dépendance ne semble pas avoir d'impact sur l'erreur. En continuant à partir de ce qui précède
- Cliquez sur
File > Project Structure > Modules > MyApp-MyApp
- Passer à
Dependencies
Onglet - Cliquez sur
+ > Module Dependency
et choisirMyLib
- Cliquez sur
Apply
yOK
- Cliquez sur
Build > Make Project
Mise à jour 2
En se basant sur les suggestions d'Ethan, voici ce que nous obtenons
Les 2 sous-projets build.gradle
semble avoir toutes les pièces correctes et la seule différence est la ligne de plugin ci-dessous est la MyApp/build.gradle
.
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
Le projet Root build.gradle
était vide, j'ai donc ajouté les deux projets comme ceci
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
J'obtiens maintenant cette erreur lors de la construction
Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Mise à jour 3
Grand merci Ethan pour avoir résolu ce problème.
- Ajouter
compile project(':SubProjects:MyLib')
à laMyLib/build.gradle
- Retirer
compile files('libs/android-support-v4.jar')
de laMyLib/build.gradle
- Fermez le projet et importez le projet racine depuis gradle.
Mise à jour 4
À partir de la version 0.1.2, vous pouvez désormais inclure les éléments suivants compile "com.android.support:support-v4:13.0.0"
au lieu de compile files('libs/android-support-v4.jar')
. Puisqu'il provient de Mavin, vous pouvez l'inclure dans plusieurs projets sans problème.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
dependencies {
compile "com.android.support:support-v4:13.0.0"
compile project(':SubProjects:MyLib')
}
Mise à jour 5
À partir de la version 0.1.3, il y a maintenant un bouton "Sync Project" dans la barre d'outils. Vous pouvez cliquer sur ce bouton au lieu de réimporter votre projet après avoir apporté des modifications à .gradle
des fichiers.
1 votes
J'ai fait une demande de retrait pour votre projet github. Il y avait 2 changements simples. Supprimer le contenu de votre /build.gradle. {Je l'ai fait parce que vous n'avez pas défini quel type de projet c'était, donc il se plaignait de ne pas savoir quoi en faire}, puis j'ai ajouté la dépendance de :SubProject:MyLib à :SubProject:MyApp. J'ai ensuite exécuté ./gradlew :SubProject:MyApp:iD (iD correspond à installDebug). J'ai également dû supprimer le doublon libs/Android-support-v4.jar. Comme il ne s'agit pas d'une "vraie" dépendance, vous ne pouvez pas l'avoir à deux endroits.
0 votes
J'ai commenté la demande de retrait. github.com/respectTheCode/Android-studio-library-example/pull/1
1 votes
Il est intéressant de mentionner que si vous ajoutez
compile 'com.google.android:support-v4:r6'
à chacun de vos projets et au plugin maven (comme dans l'exemple build.gradle ci-dessous) au lieu de l'optioncompile files('libs/android-support-v4.jar')
gradle se rendra compte que les deux projets incluent la même chose et ne l'inclura qu'une seule fois.0 votes
@respectTheCode J'ai envoyé une demande de retrait pour nettoyer un peu votre exemple de projet github. Merci pour le partage !
0 votes
Duplicata possible de Android studio, gradle et NDK