سؤال

مهتم خصيصا بكيفية محمولة بين الهواتف المختلفة. لدينا تطبيق مع بعض الكود الثقيل الحساب الذي نود مشاركته بين Android و iPhone. إذا استطعنا كتابة ذلك في C، فكن لدينا قاعدة كود واحدة، ولكن إذا كان NDK يدعم فقط مجموعة فرعية من المعالجات التي تقوم بها شركات تصنيع الهواتف، أو إذا كان علينا إعادة ترجمة لكل معالج، فلا يوجد حل عملي وبعد

شكرا على أي تجارب معها.

هل كانت مفيدة؟

المحلول

فيما يتعلق بموضوع ما إذا كان كل هواتف Android (الإصدار 1.5+) سيدعم إخراج NDK الحالي:

كل ما يمكنني قوله هو أنه لا يوجد شيء في الوثائق تشير إلى خلاف ذلك (ما لم تصدر ما إذا كنت تقرأ آثار في "هذا الإصدار يدعم مجموعة تعليمات ARMV5TE ")، وأنا اتبع أخبار أندرويد عن كثب إلى حد ما ولا سمعت عن أي هواتف أندرويد يتم إصدارها باستخدام بنية غير ذرات (على الرغم من بعض الناس اخترقوا معا بناء ل eeepc). أنظر إلى المصدر الروبوت, ، هناك آثار منصة أخرى فقط، X86. بالنسبة للخطط المستقبلية ل Google و oha.ب يجب عليك أن تسألهم. لقد أعلنوا مؤخرا أيام المطور, ، ولكن ربما ذهب جميع البقع الآن (أول واحد هو اليوم). لقد سجلت في وقت مبكر جدا ليوم لندن (17) لذلك إذا حصلت على سأحاول الحصول على إجابة هناك (أنا حريص على معرفة ذلك بالتأكيد أيضا).

نصائح أخرى

أنا لست على تطوير W / iPhone جدا، ولكن إذا نظرت إلى الروبوت ndk الصفحة, وفقا لقسم أدوات التطوير، يسرد الرؤوس المضمونة المتاحة في النظام الأساسي، لذلك إذا كان iPhone يدعم هذه الوظائف، أو يمكنك إنشاء واجهات بين التعليمات البرمجية والمكتبات الأصلية على كلا النظامين مما لا أرى سبب ذلك ر العمل.

NDK هو أساسا تنفيذ واجهة Java الأصلية لأجهزة الأندرويد. إنه يمنحك دول مجلس التعاون الخليجي 4.2.1 (مجموعة كاملة من الأدوات بقدر ما أستطيع أن أقول) مع الهدف arm-eabi. وبعد ما إذا كان الرمز الناتج يعمل على جهاز iPhone أو أجهزة أخرى لا أعرف؛ أنا لم أرمز أبدا لجهاز iPhone. هنا هو ما file يجب أن أقول عن شيء بنيت به مع NDK، لذلك ربما يمكنك مقارنة:

libpuzzles.so: ELF 32 بت LSB كائن مشترك، الذراع، الإصدار 1 (SYSV)، مرتبط ديناميكيا، غير تجريد

(strip متضمن؛ أنا فقط لم أقم بتشغيله هنا.) هنا gcc -v أو g++ -v (إنهم متطابقون):

باستخدام المواصفات المدمجة.

الهدف: ARM-EABI

تم تكوينه مع: / Opt/Digit/Android/Git/Android-NDK/OUT/arm-abi-4.2.2/toolchain/src/gcc-4.2.1/configure - Prefix = / Opt / رقمي / Android / GIT / GIT / GIT / Android-NDK / Build / Prebuilt / Linux-X86 / ARM-EABI-4.2.1 --TARGET = ARM-EABI - HOST = X86_64-Unknown-Linux-GNU --BUILD = X86_64-Unknown-linux-gnu - languags = c، c ++ - libssp - libssp - المواضيع - cls-nls - libmudflap - libmudflap - libgomp - libgomp - libstdc __- v3 - تعطيل - استثناءات SJLJ - مشاركت القابلة للمشاركة - Fit-Float = Soft - With-FPU = VFP - With-Arch = ARMV5TE-Target-Target-APTSPACE - With-ABI = AAPCS - AAPCS - prefix = / opt / digit / android / git / git-ndk / build / prebuilt / linux-x86 / arm-eabi-4.2.1 - مع sysroot = / opt / digit / android / git / git-ndk / بناء / منصات / كب كيك / ذراع القوس - تحويل برامج التحويل = S، ^، ARM-EABI-،،

نموذج الموضوع: واحد

نسخة خليجية 4.2.1.

على افتراض تشغيل الرمز، فإن إدارة هذا في مستوى API هو مشكلة منفصلة ومثيرة للاهتمام. لن يسمح لك Android باستدعاء التعليمات البرمجية الأصلية عبر API JNI. أنا لست معتادا على نهج iPhone، لكنني أعلم أنه ليس جافا حتى أظن أنه أشبه بالربط الديناميكي القياسي أو dlopen()ب ما أعنيه هو، عليك إما أن تجعل وظائف JNI الخاصة بك (على سبيل المثال Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) التعامل معها مع ما يسمى من شيء ليس jvm (هل لديك رمز iPhone الخاص بك وهمية jni_env على سبيل المثال؟) أو، أقل فظاعة، تبدأ من خلال توفير API الأصلية مناسبة ل iPhone ثم تضمين غلاف JNI، الذي غير JNI يمكن أن تجاهل المنصات بأمان، والتي أجمعها هي نهج مشترك لهذا النوع من الأشياء. امل ان يساعد.

لقد كان لدي تجربة لطيفة كتابة التطبيق عبر الخبز JNI / C مع معالجة Framebuffer في NDK وتقديم Java.

Pitty، لها حل أندرويد فقط

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top