Почему так много приложений для Android используют NDK?

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

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

Так что это заставило меня задуматься... Я что-то упустил? Я имею в виду, что это всего лишь несколько приложений, использующих NDK, где я не вижу в этом необходимости:

  • WhatsApp
  • TuneIn Radio Pro
  • textPlus
  • Теги Microsoft
  • Звездная карта
  • SPYMouse
  • SoundHound
  • Ролл в дыру
  • facebook
  • Skype (Вероятно, криптовальные библиотеки)
  • Грозный Гром
  • QR Droid
  • PocketCloud
  • Камера Zoom FX
  • Взрывать
  • Бумажная камера
  • Ocean HD Screen Saver
  • Офисная одежда
  • Instagram
  • Перейти на рабочий стол
  • Fieldrunners
  • Приложения Angry Birds

Думаю, я думаю, что, возможно, они используют один и тот же код на других платформах, библиотеки, написанные на C и используемые на iOS, Android и других платформах, но я просто не уверен, что это причина. Есть ли другие вещи, которые, вероятно, будут использовать эти приложения для NDK? Другие вещи, которые, я думаю, могут быть: Лицензирование, конфиденциальность/безопасность (перемещение сложной обратной инженерии), идентификаторы устройств, игровые движки и т.д.

Во всяком случае, вопрос в том, действительно ли у вас есть идеи относительно того, почему так много приложений используют NDK?

Ответ 1

Не уверен, что этот вопрос подходит для StackOveflow, но как разработчик, использующий NDK, я могу дать вам две причины с моей точки зрения:

  • очень большая база кода в C++, которая также используется для версий на iPhone и Winrt, а также Windows CE/Desktop. Это был разработчик на протяжении многих лет, исправлен, протестирован множеством пользователей.

  • тем труднее для хакеров узнать, что делает ваш код, и сломать его. Но не невозможно.

Ответ 2

Я предполагаю, что первая причина, указанная марцином, является основной причиной.

Для моего случая, поскольку было несколько библиотек C++, используемых IPhone, и они не хотят переносить их на java impl, поэтому просто продолжайте использовать их в Android.

Поскольку я разработчик Android, я совершенно не согласен с этим. Из официального документа, как вы подчеркнули:

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

Но, просто сложно подтолкнуть все решение к java... Болезненность в отладке, проблемах при съемке, что-то выходит из-под контроля.