Почему приложение на Android не должно быть написано на C/С++, потому что вы просто предпочитаете программировать на C/С++?

Обновлено (для ясности и уменьшения двусмысленности):

Я собираюсь начать заниматься приложениями для Android. Я планировал писать на С++ с помощью NDK (так как у меня больше опыта на С++ и я предпочитаю его на Java), но на странице Android NDK:

вы должны использовать только NDK, если это важно для вашего app- никогда, потому что вы просто предпочитаете программировать на C/С++.

У меня создалось впечатление, что вы должны использовать тот язык, который вы предпочитаете, если он подходит для работы. Может ли кто-нибудь объяснить, почему так сильно не рекомендуется использовать C/С++ для разработки Android?


Оригинал:

Я собираюсь начать заниматься мобильными приложениями, в частности, андроид, который является ОС моего текущего телефона, и мне было интересно, следует ли писать приложение на С++ (или, по крайней мере, ядро, а затем обернуть на Java) приемлемый вариант.

В некотором роде я - специалист по информатике, который взял 3 курса на С++ (ввод, промежуточное, ООП, и я беру курс STL в spring) и только 1 курс Java (средний). Из-за этого мне больше нравится С++ и предпочитаю его Java. Я наткнулся на следующую страницу Android NDK:

Использование собственного кода на Android обычно не приводит к заметному повышение производительности, но это всегда увеличивает сложность вашего приложения. В общем, вы должны использовать только NDK, если это важно для вашего app- никогда, потому что вы просто предпочитаете программировать на C/С++.

  • У меня создалось впечатление, что вы должны использовать язык, подходящий работа, а также тот, с которым вы знакомы
  • Возможно, я захочу перенести приложение на другую мобильную платформу, например как iOS, поддерживающий С++, но не java
  • Хотя Java является языком высокого уровня и, следовательно, должен быстрее, я чувствую, что развитие будет медленнее, потому что я бы переучивать почти все (так как я взял только один класс на язык)

Любые советы были бы очень благодарны.

ps: многие ответы на эту тему взяты из нескольких лет назад, и есть очень мало ответов на последующие ответы, в которых упоминается NDK, позволяющий разрабатывать полноценные приложения на Android 2.3 и новее.

Ответ 1

Подумайте об этом так. У вас есть возможность использовать Java SDK для создания полноценного рабочего приложения, которое использует 100% доступных API-интерфейсов для разработчиков. Вы ничего не можете сделать с NDK, который не может быть выполнен с SDK (с точки зрения API), NDK обеспечивает более высокую производительность.

Теперь посмотрим на это в обратном порядке. Если вы решите написать приложение на 100% в NDK, вы все равно можете написать полностью функциональное приложение, но вы ограничены в количестве API-интерфейсов инфраструктуры, к которым вы можете получить доступ. Не все фреймворки Android могут быть доступны на собственном уровне; большинство API - это только Java. Чтобы не сказать, что вам нужны все API ВАМ, недоступны в NDK, но нигде рядом с ВСЕ не отображаются API.

Помимо этого, NDK вводит код, специфичный для платформы, который расширяет размер вашего дистрибутива. Для каждой архитектуры устройства, которую вы собираетесь поддерживать, ваш собственный код должен быть встроен в .so файлы (один для armv5, armv7 и x86), все упакованные в один и тот же APK. Это дублирование исполняемого кода делает ваше приложение размером 3x (т.е. "Жирным двоичным" ), если вы не возьмете на себя задачу создания отдельных APK для каждой архитектуры при распространении приложения. Таким образом, процесс развертывания становится немного более полезным, если вы не хотите, чтобы ваш APK значительно увеличился.

Опять же, хотя ничто из этого не запрещает вам делать то, что вы выберете, оно указывает, почему Google описывает Java как "предпочтительный" метод для большинства вашего кода и путь наименьшего сопротивления. Я надеюсь, что это проливает свет на то, почему документация сформулирована так, как она есть.

Ответ 2

Если вы собираетесь разрабатывать только одно приложение в своей жизни, используйте NDK.

Если вы нацелены на изучение разработки Android с целью разработки более чем одного приложения в течение своей жизни - и хотите иметь возможность правильно поддерживать их всех - вы, скорее всего, добьетесь большего успеха в долгосрочной перспективе, если вы изучите Java и используйте Android Java SDK.

Ответ 3

Программисты в King используют С++ для своей игровой логики. И они, похоже, прекрасно разбираются в их обороте.

По моему опыту, С++ предназначен для решения проблем, а Java - для устранения проблем. Мне нравится любой язык, но С++ довольно полезен, когда вы пишете хороший код. Тем не менее, может потребоваться несколько минут волшебства, чтобы добраться туда.

Вы также могли бы рекомендовать С++ для ученых-данных, которые обычно выполняли бы свою работу, например, Python или R. С++ могли бы делать то же самое с хорошей или не лучшей производительностью, но просто нужно быть гением в язык. Вот почему я никогда не рекомендую С++ тому, кто хочет это сделать, - я бы просто дал понять, что они хотят.

Ответ 4

Наиболее важным соображением является то, что скомпилированный код Java будет работать на всех устройствах Android без изменений, тогда как нативный код необходимо будет скомпилировать для всех целевых платформ.

Общее намерение для Java и Android состоит в том, что вы пишете большинство, если не все свое приложение на Java, и используете нативные вещи только тогда, когда нет другого выбора... поэтому все, что касается написания приложения, подойдет для этого на Java.

Написав на Java, вы избавите себя от многих затруднений в соединении нативного мира с миром Java.

Кроме того, вы окажете большую услугу, если сделаете шаг и изучите Java. Мало того, что ваше Android-приложение будет лучше для него, вы подвергнете себя совершенно другому подходу к ОО, и вы станете лучшим программистом для него.

Добавьте к этому тот факт, что вы будете обходить стороной кучу угроз безопасности, написав на Java.

На мой взгляд, это не сложно - использовать Java.

Ответ 5

Я нашел эту интересную статью из: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

С++ был создан специально для независимости платформы и, как таковой, найден на каждой операционной системе. Ваш типичный мобильный пользователь может знать, что приложения Android написаны приложениями Java и iOS в Objective-C, но многие не знают, что на ваших устройствах больше на C-С++-коде, чем что-либо еще. C/С++ поддерживает большую часть технологии небольших устройств (например, ядро, которое взаимодействует с оборудованием, а также типичные библиотеки времени выполнения) и телекоммуникационные сети, которые позволяют использовать эти устройства. Что еще более важно для команды разработчиков, заключается в том, что существуют интерфейсы и библиотеки C/С++ для всего, что вам нужно делать на любом устройстве и платформе. Набор инструментов Android NDK - отличный пример полной поддержки C/С++, которая была первоначально добавлена ​​для команд разработки игр, чтобы они могли получить максимальную производительность от устройства, избегая Java и среды Java Java Dalvik, виртуальной машины, на которой Код Android Java выполняется. Он регулярно улучшался, чтобы активировать все службы Android.

Ответ 6

Я бы сказал, использовать java для основного приложения. Но если у вас есть код С++, вам нужен порт или некоторая библиотека, которая вам нужна, которая эффективно реализована в С++, а затем используйте ndk для этих бит

Ответ 7

Я не вижу причин, чтобы не использовать С++ для нормальной разработки Android. Если у вас есть большой опыт работы на С++ и со сложной ОС, например, Windows или любым другим, то вы можете быстро схватить Android и не так сильно сложными, как и другие ОС. изучая Java или работая без обучения, это будет более неприятным и сложным!

Ответ 8

SDK уже построен поверх NDK. Если вы используете NDK, вам придется написать тот же код, который уже предоставлен SDK. Это переделка.

Это похоже на кодирование java в собственном коде, в то время как у вас есть API, доступный для одной и той же задачи.

Короче говоря, вы хотите заново изобрести колесо.