web-dev-qa-db-fra.com

Android Studio a échoué lors de la génération du projet NDK, valeur de sortie non nulle

J'ai importé un projet sur lequel je travaillais à partir d'un environnement Eclipse Android SDK vers le nouveau Android Studio. J'essaie d'exécuter le projet, j'obtiens ceci

Error:Execution failed for task ':app:compileDebugNdk'.
> com.Android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'ndk/ndk-build'' finished with non-zero exit value 2

Donc, tout d'abord, pour moi, c'est bizarre de voir cette erreur, car en travaillant dans Eclipse Android SDK auparavant, j'ai exécuté ndk-build par moi-même, ce que je fais toujours. Il en va de même pour Android Studio exécutant ndk-build pour moi maintenant? Parce que lorsque je l'exécute dans Terminal, je n'ai aucun problème et ici, cela me dit une mauvaise valeur de sortie.

Et puis j'ai cherché sur Internet et j'ai trouvé une "solution rapide", qui consiste à créer un fichier .c vide, car vous ne pouvez pas créer/exécuter un projet ndk sans fichier .c. Sans surprise, cela ne fonctionne pas pour moi car nous avons beaucoup de fichiers .c dans le dossier .jni.

Juste pour mentionner que je suis sur un Macbook Pro sous Yosemite, et le projet ne devrait pas avoir de problèmes en soi.

Merci d'avance pour votre aide.

10
Denis Davydov

C'est un problème connu de Android Studio, causé par un support très limité des projets compatibles NDK. Répondre à votre question: oui, Android Studio exécute maintenant ndk- s'appuyer sur lui-même, mais il ignore Android.mk existant et en génère un à la volée (et le fait mal pour tout projet non trivial compatible NDK). Pratiquement, la meilleure façon de résoudre ce problème est de désactiver Android Prise en charge NDK limitée de Studio et appelez ndk-build à partir du script gradle Ici Je l'ai décrit plus en détail et comment le corriger.

5
Dmitry Moskalchuk

Pour voir quel est le problème exact, procédez comme suit:
1 - Assurez-vous que vous avez correctement défini le chemin ndk, par exemple dans mon projet, je mets ndk.dir=/usr/local/opt/Android-ndk-r13b dans local.properties fichier
2 - Accédez au répertoire d'application de votre Android application
- Exécutez cette commande: <ndk_build_path> -C <jni_path> NDK_OUT=<jniLibDir> all NDK_DEBUG=1 exemple :

/usr/local/opt/Android-ndk-r13b/ndk-build -C /MYAPP/app/src/main/jni -j 4 NDK_OUT=../jniLibs all NDK_DEBUG=1

alors vous pouvez voir ce qui ne va pas.

2
Iman Mirzadeh

Pour faire simple, vous pouvez essayer d'insérer sourceSets.main.jni.srcDirs = [] à Android bloc dans le fichier build.gradle. Cela indiquera à gradle de rechercher vos fichiers C++ dans un chemin différent.

2
Hien Nguyen

Vous pouvez désactiver compileDebugNdk, mais le dossier jni est toujours visible dans Android Studio. Dans votre build.gradle =, ajoutez la clause suivante:

tasks.all { task ->
    if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) {
        task.enabled = false
    }
}
1
Alex Cohn

Rencontré la même erreur lors de l'importation d'un projet de Windows vers Mac, j'ai essayé toutes les solutions ci-dessus, n'a pas fonctionné. Enfin, j'ai remarqué qu'il y avait des "modèles de cibles multiples" qui causaient cette erreur.

Solution: Supprimez le dossier "obj" dans votre NDK et reconstruisez.

Terminé !!

1
Bhanz

J'ai rencontré le même problème et j'ai essayé beaucoup de choses mais je n'ai pas fonctionné et j'ai découvert:

commandLine ndkBuildPath, '-j8', '-C', fichier ('src/main'). absoluePath

Veuillez essayer ceci:

Accédez à src/main/jni, ouvrez le terminal et exécutez la commande: /home/.../Android/Sdk/ndk-bundle/ndk-build

Il va générer et afficher plus de journaux. Vous obtiendrez ce qui ne va pas dans votre code.

0
Thinh Dinh