Come utilizzare il mio file Android.mk con Android Sudio

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, Android.mk viene sovrascritto. Gradle che Gradle sia responsabile e che dovrei guardare lì? Come utilizzo il mio file Android.mk?

Informazioni di base:

Ubuntu 64 bit, Android Studio 1.0.1, JDK7. Ho avvolto la mia versione NDK con O-LLVM NDK , e come tale sto modificando il file Android.mk che si trova in app/build/intermediates/ndk/debug (è l’unico file Android.mk nella mia directory del progetto), diverso dal posizione che il documento per O-LLVM fornisce esempi di.

Inoltre, non esiste un file Application.mk , quindi, di nuovo, presumo 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) 

    Nota: non sto ancora passando nessun cflag, sto provando a far funzionare una build Vanilla prima

    sì, per impostazione predefinita il plugin gradle per Android si rigenera e utilizza il proprio file Android.mk per compilare i tuoi sorgenti.

    Puoi distriggersrlo e utilizzare il tuo file Android.mk , impostandolo nel tuo file di configurazione build.gradle :

     import org.apache.tools.ant.taskdefs.condition.Os ... android { ... sourceSets.main { jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jniLibs jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk } // call regular ndk-build(.cmd) script from app directory task ndkBuild(type: Exec) { if (Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath } else { commandLine 'ndk-build', '-C', file('src/main').absolutePath } } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild } } 

    Nota che se hai solo bisogno di passare i tuoi cflag al Makefile generato automaticamente, puoi impostarli all’interno della proprietà cFlags "" per settare all’interno di android { ndk {}}