Ich definiere einige Variablen innerhalb der Android.mk
Datei (ich übergebe einige Flags für den Compiler), aber jedes Mal, wenn ich mein Projekt erstelle, wird die Android.mk
überschrieben. Ich gehe davon aus, dass Gradle
dafür verantwortlich ist und dass ich dort suchen sollte? Wie verwende ich meine eigene Android.mk Datei?Wie benutze ich meine eigene Android.mk Datei mit Android Sudio
Hintergrund Info:
Ubuntu
64bit, Android Studio
1.0.1, JDK7. Ich habe meine NDK
Version mit O-LLVM NDK gewickelt, und als solche bin der Bearbeitung der Android.mk
Datei auf app/build/intermediates/ndk/debug
befindet (es ist die einzige Android.mk
Datei in meinem Projekt dir), anders als der Ort, der die doc für O-LLVM
Beispiele gibt.
Auch gibt es keine Application.mk
Datei, also nehme ich wieder an, dass Gradle
für die Aufrufe an den Compiler verantwortlich ist?
Jede Hilfe würde sehr geschätzt werden.
Kyle
Aktuelle Informationen
build.gradle - (app)
//The following code until the "----" line is the new build.gradle config file
// that disables automatic Android.mk file generation
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.md.helloworld"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
ndk {
moduleName "MyLib"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets.main {
jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jni
jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk file
}
// Call regular ndk-build (.cmd) script from the app directory
task ndkBuild(type: Exec) {
commandLine 'ndk-build', '-C', file('src/main/').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
/*
//The following code is the original Android.mk file
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.md.helloworld"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
//The only modified line
ndk {
moduleName "MyLib"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
*/
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloWorld
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -static
include $(BUILD_EXECUTABLE)
Application.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
APP_ABI := armeabi
NDK_TOOLCHAIN_VERSION := clang3.4-obfuscator
include $(BUILD_EXECUTABLE)
Bitte beachten Sie: Ich bin vorbei keine cflags nur noch, ich Vanilla bauen zu bekommen versuchen Arbeits erste
Dank ph0b. Das Problem, das ich jetzt habe, ist, dass der Aufruf von ndk-build in der Konfigurationsdatei build.gradle nicht kompiliert wird, also habe ich diese Zeile entfernt und die Abhängigkeit des Java-Compilers entfernt und ndk-build über die Befehlszeile ausgeführt. Dies baut die ndk-Strafe auf, allerdings habe ich die .so-Dateien nicht mehr erzeugt. Irgendwelche Hinweise oder Tipps? – KyleM
Ich sehe nicht, warum es nicht kompilieren würde, vielleicht hast du die 'import.org.apache.tools.ant.taskdefs.condition.Os' vergessen? Die .so werden von ndk-build erzeugt, standardmäßig in libs/(armeabi | armeabi-v7a | x86 | mips | ...). Überprüfen Sie, ob der Pfad 'src/main/libs' korrekt ist und ob Ihre .so-Dateien vorhanden sind. – ph0b
Hi ph0b, ich habe den Kompilierfehler behoben, ndk-build war nicht als Befehl verfügbar, also ist das sortiert. Das Problem, das ich jetzt habe, ist, dass die .so-Dateien nirgendwo erzeugt werden. Ich habe im gesamten Projektverzeichnis nach ihnen gesucht, aber seit dem Erstellen des Projekts mit der neuen Gradle-Datei kein Glück mehr. Das Projekt wird ordnungsgemäß erstellt. Wenn Sie jedoch versuchen, es auszuführen, gibt es einen UnatisfiedLinkError, da die Datei libMyLib.so nicht gefunden werden kann. Ich habe meine Frage mit meiner Datei "gadle.build" und sowohl der Datei "Android.mk" als auch der Datei "Application.mk" aktualisiert. Vielen Dank ph0b – KyleM