9

J'essaie d'intégrer la fonctionnalité ndkBuild dans un projet de studio Android, en utilisant le nouveau studio android 2.2, afin d'activer le débogage C++ etc. J'ai essayé l'un des les exemples de projets ndk qu'offre android studio 2.2, qui fonctionne parfaitement bien. Cependant, lorsque je tente d'exécuter les commandes Gradle dans mon propre projet, je reçois ce message d'erreur:Impossible de trouver la méthode externalNativeBuild() pour les arguments

Erreur: (73, 0) Méthode Impossible de trouver externalNativeBuild() pour les arguments [build_c6heui1f67l8o1c3ifgpntw6 $ _run_closure2 $ _closure9 @ 4329c1c9 ] sur le projet ': core' de type org.gradle.api.Project.

En suivant cette description http://tools.android.com/tech-docs/external-c-builds j'ai fini avec un script gradle qui comprend les commandes suivantes:

externalNativeBuild{ 
    ndkBuild{ 
     path "$projectDir/jni/Android.mk" 
    } 
} 

externalNativeBuild { 
    ndkBuild { 
     arguments "NDK_APPLICATION_MK:=$projectDir/jni/Application.mk" 
     abiFilters "armeabi-v7a", "armeabi","arm64-v8a","x86" 
     cppFlags "-frtti -fexceptions" 
    } 
} 

m'a manqué peut-être sur quelque chose avec la configuration du projet? J'ai mis le Android NDK emplacement correctement sous

Fichier -> Structure du projet ... -> SDK Emplacement -> Emplacement Android NDK

dans mon studio android.

Autre chose que je pourrais avoir oublié?

Est-ce que quelqu'un a rencontré un problème similaire auparavant?

Avis serait très apprécié =)

+1

Avez-vous mis l'externalNativeBuild à l'intérieur de l'androïde {} bloquer? – tianwei

+0

oui je l'ai fait, donc il ne peut pas être la source d'erreur – MinionDeveloper

Répondre

11

Juste eu cette erreur moi-même. Dans votre racine build.gradle, assurez-vous que gradle est réglé sur au moins la version 2.2.0:

donc vous devriez avoir les éléments suivants dans buildscript {...}

dependencies { 
    classpath 'com.android.tools.build:gradle:2.2.0' 
} 
+0

merci cela a supprimé le message d'erreur pour moi =) – MinionDeveloper

1
android { 
    defaultConfig { 
     externalNativeBuild { 
      cmake { 
       arguments '-DANDROID_TOOLCHAIN=clang' 
      } 
     } 
    } 
2

Proposé par Kun Ming Xies réponse, J'ai séparé ma cmake part à deux pour se débarrasser de l'erreur ennuyeux:

Could not find method arguments() for arguments [-DREVISION=1.3.1] on object of type com.android.build.gradle.internal.dsl.CmakeOptions.

Th e première partie en defaultConfig contient la configuration (arguments de ligne de commande pour CMake et C++ drapeaux), et le second contient le chemin vers CMakeLists.txt:

def revision = "1.3.1" 
android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 

    defaultConfig { 
    versionCode = ... 
    versionName "${revision}" 
    externalNativeBuild { 
     cmake { 
     arguments "-DREVISION=${revision}" 
     cppFlags '-fexceptions', '-frtti', '-std=c++11' 
     } 
    } 
    } 

    buildTypes { } 

    lintOptions { } 

    externalNativeBuild { 
    cmake { 
     path 'CMakeLists.txt' 
    } 
    } 
}