Gradle Build Tools 2.2.0+ - Das NDK kommt der Bezeichnung "Magie" am nächsten.
Ich bin froh, dass 2.2.x der Gradle Build Tools herausgekommen ist und jetzt einfach funktioniert. Der Schlüssel ist das externalNativeBuild
und zeigt auf das ndkBuild
Pfadargument auf ein Android.mk
oder ändert ndkBuild
auf cmake
und zeigt auf das Pfadargument auf ein CMakeLists.txt
Build-Skript.
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'
}
}
}
Weitere Informationen finden Sie auf der Google-Seite zum Hinzufügen von nativem Code .
Nachdem dies richtig eingerichtet wurde, können ./gradlew installDebug
Sie loslegen. Sie müssen sich auch darüber im Klaren sein, dass sich das NDK in Clang bewegt, da gcc im Android-NDK jetzt veraltet ist.
Integration und Bereinigung von Android Studio - DEPRECATED
Die anderen Antworten zeigen den richtigen Weg auf, um die automatische Erstellung von Android.mk
Dateien zu verhindern , aber sie gehen nicht den zusätzlichen Schritt einer besseren Integration in Android Studio. Ich habe die Möglichkeit hinzugefügt, tatsächlich von der Quelle zu bereinigen und zu erstellen, ohne zur Befehlszeile gehen zu müssen. Ihre local.properties
Datei muss habenndk.dir=/path/to/ndk
apply plugin: 'com.android.application'
android {
compileSdkVersion 14
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.example.application"
minSdkVersion 14
targetSdkVersion 14
ndk {
moduleName "YourModuleName"
}
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=1'
}
task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
'clean'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}
}
dependencies {
compile 'com.android.support:support-v4:20.0.0'
}
Das src/main/jni
Verzeichnis nimmt ein Standardlayout des Projekts an. Es sollte der Verwandte von diesem build.gradle
Dateispeicherort zum jni
Verzeichnis sein.
Gradle - für diejenigen, die Probleme haben
Überprüfen Sie auch diese Antwort zum Stapelüberlauf .
Es ist wirklich wichtig, dass Ihre Gradle-Version und das allgemeine Setup korrekt sind. Wenn Sie ein älteres Projekt haben, empfehle ich dringend, ein neues mit dem neuesten Android Studio zu erstellen und zu sehen, was Google als Standardprojekt betrachtet. Verwenden Sie auch gradlew
. Dies schützt den Entwickler vor einer Nichtübereinstimmung der Gradle-Version. Schließlich muss das Gradle-Plugin korrekt konfiguriert sein.
Und Sie fragen, was ist die neueste Version des Gradle-Plugins? Überprüfen Sie die Tools-Seite und bearbeiten Sie die Version entsprechend.
Endprodukt - /build.gradle
task wrapper(type: Wrapper) {
gradleVersion = '2.2'
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.0'
}
}
allprojects {
repositories {
jcenter()
}
}
Stellen Sie sicher gradle wrapper
, dass die gradlew
Datei und das gradle/wrapper
Unterverzeichnis generiert werden . Das ist eine große Sache.
ndkDirectory
Dies ist einige Male aufgetreten, android.ndkDirectory
ist jedoch der richtige Weg, um den Ordner nach 1.1 abzurufen. Gradle-Projekte auf Version 1.0.0 migrieren . Wenn Sie eine experimentelle oder alte Version des Plugins verwenden, kann Ihr Kilometerstand variieren.