Вопрос

Меня особенно интересует, насколько он портативен между различными телефонами.У нас есть приложение с тяжелым вычислительным кодом, который мы хотели бы использовать для Android и iPhone.Если бы мы могли написать его на C, у нас была бы единая кодовая база, но если NDK поддерживает только подмножество процессоров, которые создают производители телефонов, или если нам придется перекомпилировать для каждого процессора, это неработоспособное решение. .

Спасибо за любой опыт с ним.

Это было полезно?

Решение

По поводу того, будут ли все телефоны Android (версия 1.5+) поддерживать вывод текущего NDK:

Все, что я могу сказать, это то, что в документации нет ничего, что указывало бы на иное (если, возможно, вы не прочитали подтекст в "этот выпуск поддерживает набор инструкций ARMv5TE"), и я довольно внимательно слежу за новостями Android и не слышал о выпуске каких-либо телефонов Android с архитектурой, отличной от ARM (хотя некоторые люди собрали сборку для EeePC).Глядя на Источник Android, есть следы только еще одной платформы — x86.Что касается дальнейших планов Google и ОНА?Вам придется спросить их.Недавно они объявили о некоторых дни разработчиков, но, наверное, уже все пятна пропали (первый сегодня).Я зарегистрировался довольно рано на лондонский день (17-го числа), так что, если я приеду, я постараюсь получить ответ там (я тоже хочу знать наверняка).

Другие советы

Я не очень знаком с разработкой iPhone, но если вы посмотрите на страница Android NDK, В разделе «Инструменты разработки» перечислены гарантированные заголовки, доступные на платформе, поэтому, если iphone поддерживает эти функции или вы можете создавать интерфейсы между своим кодом и собственными библиотеками на обеих платформах, то я не понимаю, почему это не так. т работаю.

NDK по сути является реализацией Собственный интерфейс Java для Андроид.Он дает вам GCC 4.2.1 (насколько я могу судить, полный набор инструментов) с целью arm-eabi.Я не знаю, будет ли полученный код работать на iPhone или других устройствах;Я никогда не программировал для iPhone.Вот что file должен сказать о чем-то, что я построил с помощью NDK, так что, возможно, вы сможете сравнить:

libpuzzles.so:Общий объект ELF, 32-битный младший значащий разряд, ARM, версия 1 (SYSV), динамически связанный, не удаленный

(strip Включено;Просто я его здесь не запускал.) Вот gcc -v или g++ -v (они идентичны):

Использование встроенных спецификаций.

Цель:рука-эаби

Настроено с:/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 --target=arm-eabi --host=x86_64-неизвестный-linux-gnu --build=x86_64-unknown-linux-gnu --enable-languages=c,c++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 -- отключить-sjlj-Exceptions --disable-shared --with-float=soft --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/android/git/android-ndk /build/platforms/cupcake/arch-arm --program-transform-name=s,^,arm-eabi-,

Модель резьбы:одинокий

gcc версия 4.2.1

Если предположить, что код будет работать, управление этим на уровне API — отдельная интересная проблема.Android позволит вам вызывать собственный код только через JNI API.Я не знаком с подходом iPhone, но знаю, что это не Java, поэтому предполагаю, что это больше похоже на стандартное динамическое связывание или dlopen()?Я имею в виду, что вам придется либо создать свои функции JNI (например, Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) справиться с вызовом из чего-то, что не является JVM (например, код вашего iPhone подделывает JNI_Env?) или, что гораздо менее ужасно, начните с предоставления собственного API, подходящего для iPhone, а затем включите оболочку JNI, которая не является JNI. платформы могут спокойно игнорировать, что, как я понимаю, является распространенным подходом к такого рода вещам.Надеюсь, это поможет.

У меня был хороший опыт написания перекрестного приложения JNI/C с обработкой кадрового буфера в NDK и рендерингом в JAVA.

Питти, это решение только для Android

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top