Android
Android NDK
खोज…
एंड्रॉइड के लिए देशी निष्पादनयोग्य बिल्डिंग
परियोजना / JNI / main.c
#include <stdio.h>
#include <unistd.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
परियोजना / JNI / Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello_world
LOCAL_SRC_FILES := main.c
include $(BUILD_EXECUTABLE)
परियोजना / JNI / Application.mk
APP_ABI := all
APP_PLATFORM := android-21
यदि आप 5.0 (API 21) से कम Android संस्करण चलाने वाले उपकरणों का समर्थन करना चाहते हैं, तो आपको अपने बाइनरी को APP_PLATFORM
साथ पुराने API, जैसे कि android-8
सेट करना होगा। यह एंड्रॉइड 5.0 एन्फोर्सिंग पोजिशन इंडिपेंडेंट बायनेरिज़ (पीआईई) का परिणाम है, जबकि पुराने डिवाइस आवश्यक रूप से पीआईई का समर्थन नहीं करते हैं। इसलिए, आपको डिवाइस संस्करण के आधार पर, या तो PIE या गैर-PIE का उपयोग करने की आवश्यकता है। यदि आप अपने एंड्रॉइड एप्लिकेशन के भीतर से बाइनरी का उपयोग करना चाहते हैं, तो आपको एपीआई स्तर की जांच करने और सही बाइनरी निकालने की आवश्यकता है।
APP_ABI
को केवल उन आर्किटेक्चर के लिए बाइनरी का निर्माण करने के लिए armeabi
जैसे विशिष्ट प्लेटफार्मों में बदला जा सकता है।
सबसे खराब स्थिति में, आपके पास प्रत्येक आर्किटेक्चर के लिए एक PIE और एक गैर-PIE बाइनरी दोनों होगा (ndk-r10e का उपयोग करके लगभग 14 अलग-अलग बायनेरी)।
निष्पादन योग्य बनाने के लिए:
cd project
ndk-build
आप बायनेरिज़ को project/libs/<architecture>/hello_world
। आप के माध्यम से उन्हें का उपयोग कर सकते ADB
( push
और chmod
निष्पादन योग्य अनुमति के साथ है) या आपके आवेदन से (निकालने और chmod
निष्पादन योग्य अनुमति के साथ यह)।
सीपीयू की वास्तुकला का निर्धारण करने के लिए, प्राथमिक आर्किटेक्चर के लिए बिल्ड प्रॉपर्टी ro.product.cpu.abi
को पुनः प्राप्त करें या समर्थित आर्किटेक्चर की पूरी सूची के लिए ro.product.cpu.abilist
(नए उपकरणों पर)। आप अपने आवेदन के भीतर या ADB के माध्यम से getprop <name>
का उपयोग करके android.os.Build
वर्ग का उपयोग करके ऐसा कर सकते हैं।
बिल्ड की सफाई कैसे करें
यदि आपको बिल्ड साफ करने की आवश्यकता है:
ndk-build clean
Android.mk के अलावा मेकफाइल का उपयोग कैसे करें
ndk-build NDK_PROJECT_PATH = PROJECT_PATH APP_BUILD_SCRIPT = MyAndroid.mk
Ndk में लॉग इन कैसे करें
पहले सुनिश्चित करें कि आप अपने Android.mk
फ़ाइल में लॉगिंग लाइब्रेरी के विरुद्ध लिंक करें:
LOCAL_LDLIBS := -llog
फिर निम्न __android_log_print()
कॉल में से एक का उपयोग करें:
#include <android/log.h>
#define TAG "MY LOG"
__android_log_print(ANDROID_LOG_VERBOSE, TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_WARN, TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_DEBUG, TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_INFO, TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_ERROR, TAG, "The value of 1 + 1 is %d", 1 + 1)
या संबंधित मैक्रोज़ को परिभाषित करके अधिक सुविधाजनक तरीके से उपयोग करें:
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__)
उदाहरण :
int x = 42;
LOGD("The value of x is %d", x);