I am defining some variables within the Android.mk
file (I am passing some flags for the compiler), but every time I build my project, the Android.mk
is overwritten. I am assuming that Gradle
is responsible and that I should be looking there? How do I use my own Android.mk file?
Background Info:
Ubuntu
64bit, Android Studio
1.0.1, JDK7.
I have wrapped my NDK
version with O-LLVM NDK, and as such am editing the Android.mk
file located at app/build/intermediates/ndk/debug
(it's the only Android.mk
file within my project dir), different to the location that the doc for O-LLVM
gives examples of.
Also, there is no Application.mk
file, so again I am assuming that Gradle
is responsible for the calls to the compiler?
Any help would be greatly appreciated.
Kyle
Updated information
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)
Please note: I am not passing any cflags just yet, I am trying to get a Vanilla build working first
yes, by default the gradle android plugin regenerates and uses its own Android.mk file to compile your sources.
You can deactivate this and use your own Android.mk file instead, by setting this inside your build.gradle configuration file:
Note that if you only need to pass your own cflags to the auto-generated Makefile, you can set these inside the
cFlags ""
property to set insideandroid { ndk {}}