के लिए संकलन सी लाइब्रेरी अवधारणा के सबूत के रूप में, मैं एंड्रॉइड ऐप के लिए this लाइब्रेरी की शक्ति संकलित और उपयोग करने की कोशिश कर रहा हूं। मैं एंड्रॉइड स्टूडियो का उपयोग कर रहा हूँ। क्या मैं अब तक क्या किया है किया गया था:एंड्रॉइड
- स्थापित NDK और एसडीके (मैं एंड्रॉयड संस्करण 4.0.3 और ऊपर यदि संभव हो तो लक्ष्य बनाना चाहते हैं)
- बनाया एंड्रॉयड स्टूडियो में एक Android परियोजना
- बनाया गया
- में JNI फ़ोल्डर मेरी JNI फ़ोल्डर में पुस्तकालय की सभी सामग्री संग्रहित
Android.MK फ़ाइल कि स्रोतों में मौजूद था करने के लिए अपने build.gradle लिंक्ड
externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } }
आदेश आर्किटेक्चर के लिए एक निर्माण कि पुस्तकालय द्वारा समर्थित नहीं हैं बनाने की कोशिश कर से बचने के लिए सेट ProductFlavors (मैं गलत यहाँ पहले से ही हो सकता है)
productFlavors { dev { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } develx86 { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } production { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } productionx86 { ndk.abiFilters 'x86', 'armeabi', 'armeabi-v7a' } }
इस बिंदु पर, मैं कुछ है कि ध्यान दिया है सीपीयू miner.c तरह फ़ाइलें अनुपलब्ध हैं कुछ उन्हें याद आ रही के रूप में प्रकाश डाला भी शामिल है, विशेष रूप से
#include <curl/curl.h> #include <openssl/sha.h>`
तो मैं इन दो पुस्तकालयों की आधिकारिक वेबसाइट के पास गया और सौ से डाउनलोड rces, दो संबंधित फ़ोल्डर्स बनाया और वहां सभी फाइलें रखती हैं। OpenSSL
में एक h.in फ़ाइल थी - एक कॉन्फ़िगर जैसा कि मैं समझता हूं। मैं पाने के लिए एक कॉन्फ़िगर किया गया एक here से
- मैं निम्नलिखित सामग्री के साथ करने के लिए JNI फ़ोल्डर जड़ Application.mk जोड़ दिया है
APP_ABI:= armeabi armeabi-v7a x86
कुछ आर्किटेक्चर को बाहर करने के लिए जो मैं समर्थन नहीं करता हूं।
इस बिंदु पर, मैं कुछ समस्याएं हैं - उनमें से एक है मैं वास्तव में NDK-निर्माण के साथ मेरे JNI सामान निर्माण नहीं कर सकते कि - sched.h
हल नहीं है (भले ही मैं 20 के लिए एपीआई संस्करण में वृद्धि) । इस तरह त्रुटियों में परिणाम:
JNI/cpu-miner.c:473:2: error: use of undeclared identifier 'cpu_set_t'
cpu_set_t set;
jni/cpu-miner.c:474:12: error: use of undeclared identifier 'set'
CPU_ZERO(&set);
तो प्रश्न हैं:
- मैं कैसे निर्माण
sched.h
को हल करने के लिए मजबूर कर सकते हैं? मुझे लगता है कि वहाँ एक वास्तव में, क्योंकि वे पुस्तकालय स्रोत कोड में शामिल नहीं थे - - मेरे दृष्टिकोण को डाउनलोड करने और लापता पुस्तकालयों के सूत्रों को जोड़ने या वहाँ था कुछ अन्य विकल्प के साथ सही था? यदि ऐसा है तो - किसी निर्देश उपलब्ध कराएं कैसे जैसे ही मैं ठीक के रूप में
NDK के साथ ऐसा करना (? या यह कोई फर्क नहीं पड़ता कि मैं क्या उस के लिए उपयोग करें) पुस्तकालय का निर्माण करने के लिए यह सिर्फ जावा इंटरफेस उत्पन्न करने के लिए पर्याप्त होगी मेरी सी फाइलें और उनका उपयोग शुरू करें या विचार करने के लिए अतिरिक्त कदम हैं?
कृपया अगर आप किसी भी आवश्यकता होती है किसी भी अतिरिक्त जानकारी के लिए पूछने के लिए स्वतंत्र महसूस हो रहा है, अग्रिम धन्यवाद।
अस्वीकरण: मैं एक .NET देव हूं इसलिए कृपया लागू होने पर एंड्रॉइड/सी चीजों के बारे में अधिक विशिष्ट रहें।
अस्वीकरण 2: इस कार्यक्रम की अवधारणा के प्रमाण के रूप शैक्षिक उद्देश्यों के लिए किया जा रहा है।
कार्य की तरह दिखता है शामिल हैं। जिस प्रकार की समस्या है वह परिभाषित नहीं है। यदि आप https://android.googlesource.com/platform/development/+/73a5a3b/ndk/platforms/android-20/include/sched.h पर एक नज़र डालें - दिलचस्प मैक्रो गार्ड '_GNU_SOURCE' – j2ko
है जो वास्तव में है यह cpu-miner.c – HardLuck
की शुरुआत में 'परिभाषित _GNU_SOURCE' बस यह कह रहा है कि समस्या किसी भी तरह से एनडीके संदर्भ के भीतर '_GNU_SOURCE' मैक्रो के अर्थ से संबंधित हो सकती है। – j2ko