साथ अपने ही Android.mk फ़ाइल का उपयोग कैसे करें मैं Android.mk
फ़ाइल (मैं संकलक के लिए कुछ झंडे गुजर रहा) के भीतर कुछ चर को परिभाषित कर रहा हूँ, लेकिन हर बार मैं अपने प्रोजेक्ट का निर्माण, Android.mk
ओवरराइट है। मुझे लगता है कि Gradle
ज़िम्मेदार है और मुझे वहां देखना चाहिए? मैं अपनी खुद की एंड्रॉइड.एमके फ़ाइल का उपयोग कैसे करूं?एंड्रॉयड Sudio
पृष्ठभूमि जानकारी:
Ubuntu
64 बिट, Android Studio
1.0.1, JDK7। मैं O-LLVM NDK के साथ मेरी NDK
संस्करण लिपटे है, और इस तरह के संपादन कर रहा हूँ के रूप में Android.mk
app/build/intermediates/ndk/debug
पर स्थित फ़ाइल, स्थान कि O-LLVM
के लिए दस्तावेज़ के उदाहरण देता है के लिए अलग अलग है (यह अपने प्रोजेक्ट निर्देशिका के भीतर केवल Android.mk
फ़ाइल है)।
इसके अलावा, Application.mk
फ़ाइल नहीं है, तो फिर मुझे लगता है कि Gradle
संकलक को कॉल के लिए ज़िम्मेदार है?
किसी भी मदद की सराहना की जाएगी।
केली
Updated जानकारी
build.gradle - (एप्लिकेशन)
//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)
कृपया ध्यान दें: मैं किसी भी CFLAGS गुजर नहीं कर रहा हूँ, लेकिन अब तक, मैं एक वेनिला काम कर निर्माण पहले
धन्यवाद ph0b के अंदर सेट करने के लिए
cFlags ""
प्रॉपर्टी के अंदर सेट कर सकते हैं। अब मेरे पास समस्या यह है कि build.gradle कॉन्फ़िगरेशन फ़ाइल के भीतर ndk-build को कॉल संकलित नहीं करता है, इसलिए मैंने उस पंक्ति को हटा दिया और जावा कंपाइलर की निर्भरता को हटा दिया, और कमांड लाइन से ndk-build चलाया। यह एनएनडीके जुर्माना बनाता है, हालांकि अब मेरे पास .so फाइलें उत्पन्न नहीं हुई हैं। कोई संकेतक या टिप्स? – KyleMमुझे नहीं लगता कि यह क्यों संकलित नहीं होगा, शायद आप 'import org.apache.tools.ant.taskdefs.condition.Os' को भूल गए हैं? एसएसओ एनडीके-बिल्ड द्वारा उत्पन्न होते हैं, डिफ़ॉल्ट रूप से libs/(armeabi | armeabi-v7a | x86 | mips | ...) के अंदर। जांचें कि 'src/main/libs' पथ सही है और आपकी .so फाइलें हैं। – ph0b
हाय ph0b, मैंने संकलन त्रुटि को ठीक किया है, ndk-build कमांड के रूप में उपलब्ध नहीं था, इसलिए इसे हल किया गया है। अब मेरे पास यह मुद्दा यह है कि .so फाइलें कहीं भी उत्पन्न नहीं हो रही हैं। मैंने उन्हें पूरी परियोजना निर्देशिका में खोजा है, लेकिन नई ग्रेड फ़ाइल के साथ प्रोजेक्ट बनाने के बाद से कोई भाग्य नहीं है। प्रोजेक्ट ठीक बनाता है, लेकिन दौड़ने की कोशिश करते समय, एक असंतुष्ट लिंक्स त्रुटि है क्योंकि इसे libMyLib.so फ़ाइल नहीं मिल सकती है। मैंने अपने प्रश्न को मेरी gradle.build फ़ाइल और Android.mk फ़ाइल और Application.mk फ़ाइल दोनों के साथ अपडेट किया है। बहुत धन्यवाद ph0b – KyleM