Lors de la Google IO 2015, Google a annoncé l'intégration complète du NDK dans Android Studio 1.3.
Il est désormais disponible pour tous : https://developer.Android.com/studio/projects/add-native-code.html
Vieille réponse : Gradle appelle automatiquement ndk-build
si vous avez un jni
dans les sources de votre projet.
Cela fonctionne sur Android studio 0.5.9 (canary build).
-
Télécharger le NDK
-
Soit ajouter ANDROID_NDK_HOME
à vos variables d'environnement ou ajoutez ndk.dir=/path/to/ndk
à votre local.properties
dans votre projet Android Studio. Cela permet à Android studio d'exécuter le ndk automatiquement.
-
Télécharger le les derniers projets d'exemple gradle pour voir un exemple de projet ndk. (Ils se trouvent en bas de la page). Un bon exemple de projet est ndkJniLib
.
-
Copiez le gradle.build
à partir des projets d'exemple du NDK. Cela ressemblera à quelque chose comme ceci. Ce gradle.build
crée un apk différent pour chaque architecture. Vous devez sélectionner l'architecture que vous voulez en utilisant l'option build variants
volet.
apply plugin: 'android'
dependencies {
compile project(':lib')
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.2"
// This actual the app version code. Giving ourselves 100,000 values [0, 99999]
defaultConfig.versionCode = 123
flavorDimensions "api", "abi"
productFlavors {
gingerbread {
flavorDimension "api"
minSdkVersion 10
versionCode = 1
}
icecreamSandwich {
flavorDimension "api"
minSdkVersion 14
versionCode = 2
}
x86 {
flavorDimension "abi"
ndk {
abiFilter "x86"
}
// this is the flavor part of the version code.
// It must be higher than the arm one for devices supporting
// both, as x86 is preferred.
versionCode = 3
}
arm {
flavorDimension "abi"
ndk {
abiFilter "armeabi-v7a"
}
versionCode = 2
}
mips {
flavorDimension "abi"
ndk {
abiFilter "mips"
}
versionCode = 1
}
fat {
flavorDimension "abi"
// fat binary, lowest version code to be
// the last option
versionCode = 0
}
}
// make per-variant version code
applicationVariants.all { variant ->
// get the version code of each flavor
def apiVersion = variant.productFlavors.get(0).versionCode
def abiVersion = variant.productFlavors.get(1).versionCode
// set the composite code
variant.mergedFlavor.versionCode = apiVersion * 1000000 + abiVersion * 100000 + defaultConfig.versionCode
}
}
Notez que cette opération ignorera vos fichiers Android.mk et Application.mk. Comme solution de rechange, vous pouvez demander à gradle de désactiver l'appel automatique à ndk-build, puis spécifier manuellement le répertoire des sources ndk.
sourceSets.main {
jniLibs.srcDir 'src/main/libs' // use the jni .so compiled from the manual ndk-build command
jni.srcDirs = [] //disable automatic ndk-build call
}
En outre, vous voudrez probablement appeler ndk-build dans votre gradle build script explicitement, car vous venez de désactiver l'appel automatique.
task ndkBuild(type: Exec) {
commandLine 'ndk-build', '-C', file('src/main/jni').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
0 votes
J'ai posté ma réponse dans le lien ci-dessous. stackoverflow.com/questions/20900814/
24 votes
Nouveaux lecteurs : Sachez que cette question a été initialement posée pendant la période bêta d'Android Studio ; la réponse a changé au fil du temps. Faites attention à la version de Gradle mentionnée dans les réponses, ainsi qu'à la date à laquelle les réponses ont été postées.
0 votes
Si quelque chose change vraiment, je modifierai la question pour refléter le statut.
0 votes
Android Studio 1.3 au canal canari supporte entièrement le NDK. Référence : tools.Android.com/download/studio/canary/latest
0 votes
Le 18 juin 2015 : Android Studio 1.3 Beta est maintenant disponible dans le canal beta ! Désolé, cette build ne contient pas encore le support C/C++ ; source : tools.Android.com/recent/androidstudio13betaavailable
0 votes
Cette solution fonctionne, sans code [Adding .so Library in Android Studio 1.0.2][1] [1] : stackoverflow.com/questions/24357687/
0 votes
@user1307559 Cette solution n'est pas une solution pour quelqu'un qui a besoin de travailler avec/compiler les fichiers c/c++.
0 votes
Intégration d'Android Studio, gradle et NDK étape par étape ph0b.com/Android-studio-gradle-and-ndk-integration