2009-11-06 9 views
8

मुझे विशेष रूप से दिलचस्पी है कि यह विभिन्न फोनों के बीच पोर्टेबल कैसे है। हमारे पास कुछ गणना भारी कोड के साथ एक एप्लिकेशन है जिसे हम एंड्रॉइड और आईफोन के बीच साझा करना चाहते हैं। अगर हम इसे सी में लिख सकते हैं, तो हमारे पास एक कोड-बेस होगा, लेकिन यदि एनडीके केवल उन प्रोसेसर के सबसेट का समर्थन करता है जो फोन निर्माता बना रहे हैं, या अगर हमें प्रत्येक प्रोसेसर के लिए पुन: कंपाइल करना है, तो यह एक व्यावहारिक समाधान नहीं है ।एंड्रॉइड एनडीके के साथ कोई अनुभव?

इसके साथ किसी भी अनुभव के लिए धन्यवाद।

+1

स्पष्टीकरण के लिए, मैं समीकरण के आईफोन पक्ष से चिंतित नहीं हूं। मुझे पता है कि मुझे इसे आईफोन के लिए अलग से संकलित करना होगा (यह स्थैतिक पुस्तकालयों का उपयोग करता है, गतिशील नहीं)। मुझे चिंतित है कि अगर मैं एंड्रॉइड के लिए .so बना देता हूं, तो यह केवल एंड्रॉइड फोन के उस सबसेट के साथ संगत होगा जो आर्म-एबी का समर्थन करता है। शायद मैं यहां हार्डवेयर की अपनी अज्ञानता प्रदर्शित कर रहा हूं, लेकिन अगर सभी एंड्रॉइड फोनों को उस मानक का पालन करना है, तो कोई समस्या नहीं है। – john146

+0

> हमारे पास कुछ गणना भारी कोड के साथ एक एप्लिकेशन है जिसे हम एंड्रॉइड और आईफोन के बीच साझा करना चाहते हैं। आईफोन (आईओएस 4.2 के रूप में) उपयोगकर्ता द्वारा साझा वस्तुओं को साझा नहीं करता है –

उत्तर

2

सभी एंड्रॉइड के विषय पर (संस्करण 1।

सभी मैं कह सकता हूँ दस्तावेज में कुछ भी नहीं है अन्यथा (जब तक कि शायद अगर आप में एक निहितार्थ पढ़ें "इस रिलीज ARMv5TE अनुदेश सेट का समर्थन करता है" सुझाव देने के लिए वहाँ है: 5 +) फोन वर्तमान NDK के उत्पादन का समर्थन करेंगे), और मैं एंड्रॉइड न्यूज का काफी बारीकी से पालन करता हूं और गैर-एआरएम आर्किटेक्चर (हालांकि some people hacked together a build for EeePC) का उपयोग करके जारी किए जा रहे किसी भी एंड्रॉइड फोन के बारे में नहीं सुना है। Android source पर देखकर, केवल एक अन्य प्लेटफॉर्म, x86 के निशान हैं। Google की भविष्य की योजनाओं और OHA के लिए? आपको उनसे पूछना होगा। उन्होंने हाल ही में कुछ developer days की घोषणा की, लेकिन शायद सभी स्पॉट अब चले गए हैं (पहला वाला आज है)। मैंने लंदन दिवस (17 वां) के लिए बहुत जल्दी पंजीकरण किया, इसलिए यदि मैं अंदर जाता हूं तो मैं वहां एक उत्तर पाने की कोशिश करूंगा (मैं निश्चित रूप से भी जानना चाहता हूं)।

2

मैं बहुत परिचित डब्ल्यू/आईफोन विकास नहीं हूं, लेकिन यदि आप android ndk page पर विकास उपकरण अनुभाग के तहत देखते हैं, तो यह प्लेटफ़ॉर्म में उपलब्ध गारंटीकृत शीर्षलेख सूचीबद्ध करता है, इसलिए यदि आईफोन इन कार्यों का समर्थन करता है, या आप बना सकते हैं दोनों प्लेटफार्मों पर आपके कोड और देशी पुस्तकालयों के बीच इंटरफेस, मुझे नहीं लगता कि यह क्यों काम नहीं करेगा।

2

एनडीके मूल रूप से एंड्रॉइड के लिए Java Native Interface का कार्यान्वयन है। यह आपको लक्ष्य arm-eabi के साथ जीसीसी 4.2.1 (जहां तक ​​मैं कह सकता हूं उपकरण का पूरा सेट) देता है। क्या परिणामी कोड आईफोन या अन्य उपकरणों पर चल जाएगा जो मुझे नहीं पता; मैंने कभी आईफोन के लिए कोड नहीं किया है। यहां बताया गया है file तो शायद आप तुलना कर सकते हैं कुछ मैं NDK के साथ बनाया के बारे में क्या कहना है है:

libpuzzles.so: ELF 32-बिट LSB साझा वस्तु, एआरएम, संस्करण 1 (SysV), गतिशील रूप से जुड़ा हुआ है, नहीं

छीन (। strip शामिल किया गया है, मैं बस इसे यहाँ नहीं चला है) यहाँ gcc -v या g++ -v है (वे समान हैं):

में निर्मित चश्मा का उपयोग करना।

लक्ष्य: हाथ-EABI

साथ कॉन्फ़िगर: /opt/digit/android/git/android-ndk/out/arm-eabi-4.2.1/toolchain/src/gcc-4.2.1/configure --prefix =/opt/digit/android/git/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 - लक्ष्य = arm-eabi --host = x86 _ 64-अज्ञात-लिनक्स -gnu --build = x86 _ 64-अज्ञात-लिनक्स-gnu --enable-languages ​​= c, C++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp - -disable-libstdc __-v3 --disable-sjlj-अपवाद - अक्षम-साझा - साथ-फ्लोट = सॉफ्ट --with-fpu = vfp --with-arch = armv5te --enable-target-optspace --with- abi = aapcs --disable-nls --prefix =/opt/digit/android/git/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 --with-sysroot =/opt/digit/एंड्रॉयड/Git/android-NDK/बू आई एल डी/प्लेटफार्मों/कप केक/कट्टर हाथ --program-बदलने नाम = रों, ^, हाथ-eabi-,

थ्रेड मॉडल: एकल

जीसीसी संस्करण 4.2.1

मान लिया जाये कोड चलाएगा, एपीआई स्तर पर इसका प्रबंधन एक अलग और दिलचस्प मुद्दा है। एंड्रॉइड केवल आपको जेएनआई एपीआई के माध्यम से मूल कोड कॉल करने देगा। मैं आईफोन दृष्टिकोण से परिचित नहीं हूं, लेकिन मुझे पता है कि यह जावा नहीं है इसलिए मुझे लगता है कि यह मानक गतिशील लिंकिंग या dlopen() की तरह है? मेरा मतलब यह है कि, आपको या तो अपने जेएनआई कार्यों को बनाना होगा (उदाहरण के लिए Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) किसी ऐसे चीज़ से बुलाए जाने का सामना करना पड़ता है जो कि जेवीएम नहीं है (उदाहरण के लिए आपका आईफोन कोड नकली जेएनआई_ईएनवी है?), या बहुत कम घोर, प्रदान करके शुरू करें एक देशी एपीआई आईफोन के लिए उपयुक्त है और उसके बाद एक जेएनआई रैपर शामिल है, जो गैर-जेएनआई प्लेटफॉर्म सुरक्षित रूप से अनदेखा कर सकते हैं, जो मैं इकट्ठा करता हूं, इस तरह की चीज के लिए एक आम दृष्टिकोण है। उम्मीद है कि मदद करता है।

0

मुझे एनडीके में फ्रेमबफर प्रोसेसिंग और जावा में प्रतिपादन के साथ क्रॉस-ब्रेड जेएनआई/सी ऐप लिखने का अच्छा अनुभव रहा है।

पिटी, इसका एक एंड्रॉइड-केवल समाधान

संबंधित मुद्दे