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 Android projets d'application et 1 Android projet de bibliothèque). Les 2 projets d'application dépendent du projet de bibliothèque. Lorsque je fais l'exportation, je reçois 3 projets qui ne fonctionnent pas. Je suis ouvert à la restructuration du projet mais je n'ai trouvé aucune documentation sur la manière dont cela devrait être fait.
Existe-t-il un moyen de faire en sorte que les 3 projets exportés par Eclipse fonctionnent ensemble? Suis-je mieux de restructurer les choses et si oui, est-ce que la documentation explique comment cela devrait être fait?
Mettre à jour
J'ai téléchargé l'intégralité du projet sur GitHub https://github.com/respectTheCode/Android-studio-library-example
Mise à jour 1
Sur la base des suggestions de Padma Kumar, c’est ce que j’ai essayé.
MyApp
File > New Module
, choisissez Android Library
et nommez-le MyLib
.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 attribut package
au manifeste, le rendant
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="com.example.mylib" >
Après avoir construit, 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 dépendance ne semble pas avoir d'impact sur l'erreur. En continuant d'en haut
File > Project Structure > Modules > MyApp-MyApp
Dependencies
+ > Module Dependency
et sélectionnez MyLib
.Apply
et OK
Build > Make Project
Mise à jour 2
Sur la base des suggestions d'Ethan c'est là que nous obtenons
Les 2 sous-projets build.gradle
semblent avoir toutes les pièces correctes et la seule différence est que la ligne de plug-in ci-dessous est le 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 racine build.gradle
était vide, j'ai donc ajouté les deux projets comme celui-ci.
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
Je reçois 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 résoudre ce problème.
compile project(':SubProjects:MyLib')
au MyLib/build.gradle
compile files('libs/Android-support-v4.jar')
du MyLib/build.gradle
Mise à jour 4
À partir de la version 0.1.2, vous pouvez désormais inclure compile "com.Android.support:support-v4:13.0.0"
au lieu de compile files('libs/Android-support-v4.jar')
. Puisqu'il vient de mavin maintenant, vous pouvez l'inclure dans plusieurs projets sans problèmes.
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
Depuis la version 0.1.3, il y a maintenant un bouton "Synchroniser le projet" dans la barre d'outils. Vous pouvez cliquer dessus au lieu de réimporter votre projet après avoir modifié les fichiers .gradle
.
Remarque : Cette réponse est une pure réponse de Gradle. Je l'utilise régulièrement dans IntelliJ mais je ne sais pas comment se déroule l'intégration avec Android Studio. Je suis convaincu de savoir ce qui se passe pour moi. C’est ainsi que j’utilise Gradle et Android.
TL; DR Exemple complet - https://github.com/ethankhall/driving-time-tracker/
Disclaimer : C'est un projet sur lequel je travaille/travaillais.
Gradle a une structure définie (que vous pouvez modifier, un lien en bas vous indique comment) qui est très similaire à Maven si vous l'avez déjà utilisée.
Project Root
+-- src
| +-- main (your project)
| | +-- Java (where your Java code goes)
| | +-- res (where your res go)
| | +-- assets (where your assets go)
| | \-- AndroidManifest.xml
| \-- instrumentTest (test project)
| \-- Java (where your Java code goes)
+-- build.gradle
\-- settings.gradle
Si vous n'avez qu'un projet, le fichier settings.gradle n'est pas nécessaire. Cependant, vous souhaitez ajouter plus de projets, nous en avons donc besoin.
Jetons maintenant un coup d'œil à ce fichier build.gradle. Vous allez en avoir besoin (pour ajouter les outils Android)
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.3'
}
}
Nous devons maintenant informer Gradle de certaines des Android parties. C'est assez simple. Une base (qui fonctionne dans la plupart de mes cas) ressemble à ce qui suit. J'ai un commentaire dans ce bloc, cela me permettra de spécifier le nom de la version et le code lors de la génération de l'APK.
build.gradle
apply plugin: "Android"
Android {
compileSdkVersion 17
/*
defaultConfig {
versionCode = 1
versionName = "0.0.0"
}
*/
}
Nous allons vouloir ajouter quelque chose, pour aider ceux qui n'ont pas encore vu la lumière de Gradle, un moyen pour eux d'utiliser le projet sans l'installer.
build.gradle
task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
gradleVersion = '1.4'
}
Nous avons maintenant un projet à construire. Nous allons maintenant ajouter les autres. Je les mets dans un répertoire, peut-être l'appelle deps, ou sous-projets. Cela n'a pas vraiment d'importance, mais vous aurez besoin de savoir où vous le mettez. Pour indiquer à Gradle où sont les projets, vous devez les ajouter à settings.gradle.
Structure du répertoire:
Project Root
+-- src (see above)
+-- subProjects (where projects are held)
| +-- reallyCoolProject1 (your first included project)
| \-- See project structure for a normal app
| \-- reallyCoolProject2 (your second included project)
| \-- See project structure for a normal app
+-- build.gradle
\-- settings.gradle
settings.gradle:
include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'
La dernière chose que vous devez vérifier est le sous-projet /reallyCoolProject1/build.gradle a apply plugin: "Android-library"
au lieu de apply plugin: "Android"
.
Comme tous les projets Gradle (et Maven), nous devons maintenant informer le projet racine de sa dépendance. Cela peut également inclure les dépendances normales Java souhaitées.
build.gradle
dependencies{
compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'
compile project(":subProjects:reallyCoolProject1")
compile project(':subProjects:reallyCoolProject2')
}
Je sais que cela semble être beaucoup d'étapes, mais elles sont assez faciles une fois que vous le faites une ou deux fois. De cette façon, vous pourrez également utiliser un serveur CI en supposant que le SDK Android y soit installé.
Remarque sur le côté de NDK: Si vous souhaitez utiliser le NDK, vous aurez besoin de quelque chose comme ci-dessous. Vous trouverez un exemple de fichier build.gradle ici: https://Gist.github.com/khernyo/422692
build.gradle
task copyNativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.Android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniDir new File('build/native-libs')
}
Sources:
Je viens d'avoir un problème très similaire avec gradle builds/ajout de la bibliothèque .jar. Je l'ai obtenu en combinant:
compile fileTree(dir: 'libs', include: '*.jar')}
MAIS plus important et ennuyeux, quelques heures à peine après le début du travail, Android Studio vient de publier la version 0.3.7, qui affirme avoir résolu de nombreux problèmes de classement, tels que l'ajout de bibliothèques .jar.
http://tools.Android.com/recent
J'espère que cela aide les gens!
Voici ma solution pour les utilisateurs de Mac. Je pense que cela fonctionne également pour Windows:
Allez d’abord dans la barre d’outils Android Studio
Construire> Créer un projet (pendant que vous êtes en ligne, laissez-le télécharger les fichiers), puis
Build> Compile Module "le nom de votre application est affiché ici" (toujours en ligne, laissez les fichiers
télécharger et terminer) puis
Lancez votre application, lancez votre émulateur, configurez-le puis lancez-le!
C'est ça!!! Bonne codage les gars !!!!!!!
C'est la bonne façon de le faire
En essayant d'éviter les expérimentations et franchement marre du NDK et de tout son hackery, je suis heureux que la version 2.2.x de Gradle Build Tools soit sortie et qu'elle fonctionne maintenant. La clé est la externalNativeBuild
et pointe ndkBuild
argument de chemin sur un Android.mk
ou change ndkBuild
en cmake
et pointe l'argument de chemin à un CMakeLists.txt
construire un script.
Android {
compileSdkVersion 19
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 19
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'x86'
}
externalNativeBuild {
cmake {
cppFlags '-std=c++11'
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_PLATFORM=Android-19',
'-DANDROID_STL=gnustl_static',
'-DANDROID_ARM_NEON=TRUE',
'-DANDROID_CPP_FEATURES=exceptions rtti'
}
}
}
externalNativeBuild {
cmake {
path 'src/main/jni/CMakeLists.txt'
}
//ndkBuild {
// path 'src/main/jni/Android.mk'
//}
}
}
Pour plus de détails, consultez page de Google sur l'ajout de code natif .
Une fois que cela est configuré correctement, vous pouvez ./gradlew installDebug
et vous pouvez partir. Vous devez également savoir que le NDK passe à clang, car gcc est maintenant obsolète dans le Android NDK.