Sto definendo alcune variabili all'interno del file Android.mk
(sto passando alcune bandiere per il compilatore), ma ogni volta che costruisco il mio progetto, lo Android.mk
viene sovrascritto. Suppongo che Gradle
sia responsabile e che dovrei guardare lì? Come utilizzare il mio file Android.mk?Come utilizzare il mio file Android.mk con Android Sudio
Informazione:
Ubuntu
64bit, Android Studio
1.0.1, JDK7. ho avvolto la mia versione NDK
con O-LLVM NDK, e come tali sono la modifica del file Android.mk
situato a app/build/intermediates/ndk/debug
(è l'unico file Android.mk
all'interno del mio progetto dir), diverso alla posizione che la doc per O-LLVM
fornisce esempi di.
Inoltre, non c'è il file Application.mk
, quindi, di nuovo, suppongo che Gradle
sia responsabile delle chiamate al compilatore?
Qualsiasi aiuto sarebbe molto apprezzato.
Kyle
Informazioni aggiornate
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)
Si prega di notare: non sto passando nessun cflags appena ancora, sto cercando di ottenere un Vanilla costruire lavorando prima
Grazie ph0b. Il problema che sto avendo ora è che la chiamata a ndk-build all'interno del file di configurazione build.gradle non viene compilata, quindi ho rimosso quella riga e rimosso la dipendenza del compilatore Java ed eseguito ndk-build dalla riga di comando. Questo costruisce la multa ndk, tuttavia non ho più i file .so generati. Eventuali puntatori o suggerimenti? – KyleM
Non vedo perché non si compili, forse hai dimenticato l'importazione di org.apache.tools.ant.taskdefs.condition.Os'? i file .so sono generati da ndk-build, di default all'interno di libs/(armeabi | armeabi-v7a | x86 | mips | ...). controlla che il percorso 'src/main/libs' sia corretto e che i tuoi file .so siano lì. – ph0b
Ciao ph0b, ho riparato l'errore di compilazione, ndk-build non era disponibile come comando, quindi è ordinato. Il problema che sto avendo ora è che i file .so non vengono generati da nessuna parte. Li ho cercati all'interno dell'intera directory del progetto, ma senza fortuna da quando ho costruito il progetto con il nuovo file gradle. Il progetto si sviluppa bene, ma quando si tenta di eseguire, c'è un UnsatisfiedLinkError in quanto non riesce a trovare il file libMyLib.so. Ho aggiornato la mia domanda con il mio file gradle.build e sia il file Android.mk che il file Application.mk. Molte grazie ph0b – KyleM