Обновлено (для ясности и уменьшения двусмысленности):
Я собираюсь начать возиться с приложениями для Android. Я планировал написать на C ++ с помощью NDK (поскольку у меня больше опыта работы с C ++ и я предпочитаю его Java), но на странице Android NDK наткнулся на следующее :
вам следует использовать NDK только в том случае, если он важен для вашего приложения - никогда, потому что вы просто предпочитаете программировать на C / C ++.
У меня сложилось впечатление, что вы должны использовать тот язык, который вам больше нравится, если он подходит для работы. Может ли кто-нибудь объяснить, почему так настоятельно рекомендуется не использовать C / C ++ для разработки Android?
Оригинал:
Я собираюсь начать возиться с мобильными приложениями, в частности с Android, который является ОС моего текущего телефона, и мне было интересно, приемлемо ли написание приложения на C ++ (или, по крайней мере, на ядре, а затем на Java).
Немного предыстории, я специализируюсь на информатике, прошел 3 курса C ++ (вводный, промежуточный, ООП, весной я беру курс STL) и только 1 курс Java (средний уровень). Из-за этого мне удобнее работать с C ++, и я предпочитаю его Java. На странице Android NDK я обнаружил следующее :
Использование собственного кода на Android обычно не приводит к заметному повышению производительности, но всегда увеличивает сложность вашего приложения. В общем, вы должны использовать NDK только в том случае, если это важно для вашего приложения - никогда, потому что вы просто предпочитаете программировать на C / C ++.
- У меня сложилось впечатление, что вы должны использовать язык, который подходит для работы, а также тот, с которым вы знакомы
- Возможно, я захочу перенести приложение на другую мобильную платформу, например iOS, которая поддерживает C ++, но не java.
- Хотя Java является языком высокого уровня и, следовательно, должен ускорить разработку, я чувствую, что разработка будет медленнее, потому что мне придется переучивать почти все (поскольку я взял только один класс на этом языке)
Любой совет был бы очень признателен.
ps: многие ответы на эту тему были получены много лет назад, и очень мало последующих ответов, в которых упоминается NDK, позволяющий разрабатывать полные нативные приложения на Android 2.3 и новее.
Ответы:
Подумайте об этом так. У вас есть возможность использовать Java SDK для создания полноценного рабочего приложения, которое использует все преимущества API-интерфейсов, доступных разработчикам. С NDK ничего нельзя сделать, чего нельзя было бы сделать с SDK (с точки зрения API), NDK просто обеспечивает более высокую производительность.
Теперь посмотрим на это наоборот. Если вы решите написать приложение на 100% в NDK, вы все равно можете написать полнофункциональное приложение, но вы ограничены в количестве API-интерфейсов инфраструктуры, к которым вы можете получить доступ. Не все платформы Android доступны на собственном уровне; большинство API - это только Java. Это не означает, что все API-интерфейсы, которые могут вам понадобиться, недоступны в NDK, но далеко не ВСЕ API-интерфейсы доступны.
Помимо этого, NDK вводит программно-зависимый код, который увеличивает размер вашего дистрибутива. Для каждой архитектуры устройства, которую вы собираетесь поддерживать, ваш собственный код должен быть встроен в файлы .so (один для armv5, armv7 и x86) и все они упакованы в один APK. Это дублирование исполняемого кода увеличивает размер вашего приложения в 3 раза (т. Е. «Толстый двоичный файл»), если вы не берете на себя задачу создания отдельных APK для каждой архитектуры при распространении приложения. Таким образом, процесс развертывания становится немного сложнее, если вы не хотите, чтобы ваш APK значительно увеличился в размере.
Опять же, хотя ничто из этого не запрещает вам делать то, что вы выбираете, это указывает на то, почему Google описывает Java как «предпочтительный» метод для большей части вашего кода и путь наименьшего сопротивления. Я надеюсь, что это проливает свет на то, почему документация сформулирована именно так.
источник
.so
файлах? Я знаю, что для каждой поддерживаемой аппаратной архитектуры требуется отдельная компиляция собственного кода, поэтому каждый.so
файл должен иметь отдельную компиляцию?.so
для каждой архитектуры, которую вы выбрали для поддержки (это контролируется вашими make-файлами), и все файлы будут помещены в каталог libs / вашего APK. После установки APK.so
будут выбраны только подходящие , но все они должны находиться в исходном APK.Если вы собираетесь разработать только одно приложение в своей жизни, используйте NDK.
Если вы стремитесь изучить разработку Android с намерением разработать более одного приложения в течение своей жизни - и хотите иметь возможность должным образом поддерживать их все, - вы, скорее всего, добьетесь большего успеха в долгосрочной перспективе, если изучите Java и вместо этого используйте Android Java SDK.
источник
Программисты King используют C ++ для своей игровой логики. И, судя по текучести, у них все в порядке.
По моему опыту, C ++ предназначен для тех, кто решает проблемы, а Java - для тех, кто их избегает. Мне нравятся оба языка, но C ++ очень полезен, когда вы пишете хороший код. Однако, чтобы добраться туда, может потребоваться несколько мгновений волшебства.
Вы также можете порекомендовать C ++ для специалистов по обработке данных, которые обычно выполняют свою работу, скажем, Python или R. C ++ может делать то же самое с такой же или не лучшей производительностью, но для этого нужно просто быть гением в языке. Вот почему я бы никогда не рекомендовал C ++ тому, кто хочет это сделать - я бы просто предупредил о том, что их ждет.
источник
Я нашел эту интересную статью по адресу : http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C ++ был создан специально для обеспечения независимости от платформы и поэтому присутствует во всех существующих операционных системах. Ваш типичный мобильный пользователь может знать, что приложения для Android написаны для Java и iOS на Objective-C, но многие не знают, что в памяти ваших устройств больше кода C / C ++, чем чего-либо еще. C / C ++ управляет большей частью технологий малых устройств (таких как ядро, которое взаимодействует с оборудованием, а также типичными библиотеками времени выполнения) и телекоммуникационными сетями, которые обеспечивают работу этих устройств. Что еще более важно для команды разработчиков, это наличие интерфейсов и библиотек C / C ++ для всего, что вам нужно делать на любом устройстве и платформе. Набор инструментов Android NDK - отличный пример полной поддержки C / C ++, которая была первоначально добавлена для команд разработчиков игр, чтобы позволить им получить максимально возможную производительность от устройства, избегая Java и среды выполнения Android Java Dalvik, виртуальной машины, на которой Java-код Android выполняется на. Он регулярно улучшался, чтобы включить все службы Android.
источник
Я бы сказал, используйте java для основного приложения. Но если у вас есть код C ++, который вам нужно перенести, или какая-то библиотека, которая вам нужна, которая эффективно реализована на C ++, тогда используйте ndk для этих бит.
источник
Я не вижу причин не использовать C ++ для нормальной разработки Android. Если у вас есть большой опыт работы на C ++ и со сложной ОС, такой как Windows или любая другая, тогда вы можете быстро освоить Android, и это не так сложно, как другие ОС есть. при изучении java или работе без обучения это было бы труднее и сложнее!
источник
Наиболее важным соображением является то, что скомпилированный код Java будет работать на всех устройствах Android без изменений, тогда как собственный код необходимо будет скомпилировать для всех целевых платформ.
Общая цель как для Java, так и для Android заключается в том, чтобы вы пишете большую часть, если не все свое приложение на Java, и используете нативные вещи только тогда, когда нет другого варианта ... поэтому все, что касается написания приложения, поддается тому, чтобы делать это на Java.
Вы избавите себя от множества неприятностей при наведении мостов между родным миром и миром Java, написав на Java.
Кроме того, вы окажете себе большую услугу, если решитесь и выучите Java. Мало того, что ваше приложение для Android станет лучше для этого, вы также познакомитесь с совершенно другим подходом к объектно-ориентированному программированию и станете лучшим программистом для него.
Добавьте к этому тот факт, что вы обойдете целый ряд рисков безопасности, написав на Java.
На мой взгляд, это простая задача - используйте Java.
источник