Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Использование NDK - Программирование Android

03.06.2014, 07:24. Просмотров 1103. Ответов 5
Метки нет (Все метки)

Пытаюсь освоить NDK... И как всегда не хватает ЗАДАНИЙ! Не могу придумать где можно использовать (для новичка в с++)...
Писать еще один игровой движок (на фоне десятка готовых профессиональных) не хочу...
Дополнительную систему безопасности - рано...
То что видел в примерах - поражает! Хочу написать свои либы, которые будут быстрее и круче явовских...

Где Вы использовали NDK в работе??? Не для лаб или курсовых, а для реальных проектов??? Причем самописные, а не готовые либы(игры, криптографию, OpenCV)?

И были ли проблемы при распространении на чужих устройствах - "не работали" на каких-нибудь новых, старых или "китайских" процессорах?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 07:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование NDK (Программирование Android):

Android Studio использование NDK - Программирование Android
Разобрался с простеньким примером на NDK. Теперь, чтобы двигаться дальше, мне необходимо подключить в моём c++ коде <windows.h> и namespace...

Использование библиотеки (so) в исходниках на с++ с ndk - Программирование Android
Добрый день. Недавно разбираюсь с NDK. И возник вопрос. У меня есть библиотека (1)(*.so), могу ли я ее подключить к NDK и...

Использование boost::asio через NDK - Программирование Android
Всем привет. Можно ли использовать asio для реализации сетевых взаимодействий в android? Или нужно использовать только то что предоставляет...

AS и Ndk - Программирование Android
Здравствуйте На официальном сайте в разделе ndk почему- то описывается eclipse Предполагается что с AS по аналогии и типа сами...

NDK и SDK - Программирование Android
есть класс на яве который использует массив, который с течением времени увеличивается ( то есть массив динамический) в массиве находятся...

Android NDK - Программирование Android
Здравствуйте, форумчане. Появилось пара вопросов относительно Android NDK... С NDK можно программировать только вставками нативного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
03.06.2014, 17:05 #2
Цитата Сообщение от Tester64 Посмотреть сообщение
Пытаюсь освоить NDK... И как всегда не хватает ЗАДАНИЙ! Не могу придумать где можно использовать (для новичка в с++)...
КО: если не можешь придумать, где применить C++ в программе для андроида, значит Java тебе вполне достаточно и не нужно ничего менять.
Если появились требования с которыми Java не справляется, тогда надо думать чего менять и в какую сторону двигаться.
Цитата Сообщение от Tester64 Посмотреть сообщение
Писать еще один игровой движок (на фоне десятка готовых профессиональных) не хочу...
Собственно, кроме игровых проектов ndk, вряд ли где-то понадобится..
NDK и нужен-то для портов с других платформ, т.к. C++, внезапно, оказался более пригодным для кроссплатформенной разработки, чем Java
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
03.06.2014, 21:33  [ТС] #3
У с++ много бонусов!

1) Скорость выполенения выше раза в 2 (минимум - говорят и в 10). А значит еще и экономия батареи при низких требованиях. MoreTeapots рисует 8х8х8=512 цветных вращающихся чайников и потребляет не больше 35% проца, когда любое активити открываясь требует 90-100%.

2) Взломо-устойчивость. Код моих либ и компонент останется только моим! Сравните - копаться в дизасемблере или обфуцироваом коде явы... Да через час я уже по яве представляю как подобное было сделано. Доп-защита для программы через ключи. Защищенные протоколы с сервером. Защита файлов шифрованием. Ява даже зип не шифрует! Защитив полезную библиотеку, я защищаю весь проект. ИМХО ява - это скорее серверная технология - когда защищать сервер не обязательно(админы позаботятся), а клиент бесполезно(кроме пароля к серверу там только интерфейс) - гугл всегда шел по такому принципу.

3) Как оказалось... компиляция и тестирование сишных кодов без графики (чистая математика) НАМНОГО быстрее чем тестирование на устройстве или эмуляторе! У меня занимает 3-4 секунды компиляция простого кода на с++ в консоли с выводом результата. Против 25-35 секунд на андроиде. Возможно (не тестировал, но слышал) что ява отладка без андроида тоже быстрая(1:1).

4) Возможно показалось, но конечный файл компиляции кода у с++ меньше чем у явы.

5) Никакого сборщика мусора - Убить класс - это освободить память для другого, а не ждать когда до него доберется сборщик. А значит экономия памяти. Для дешевых устройств - это критично! У меня после перепеолнения происходит горячий рестарт.

6) Легко подключать к старым проектам. Перекинул *.o и java класс-подключение-обвертку и используй. Не нужно "подключать" в проект как библиотеки на яве.

7) Все серьезные(сложные) проекты на маркете явно написаны на с++ или имеют вставки. Почему? Ведь вряд-ли ексель подгоняя под мобилку не писали с нуля. Даже будильник нашел с игровым(с++) интерфейсом. У меня ощущение что даже если использовать наработки из винды и переписать интерфейс на с++, то он будет во много раз быстрее работать (как в iPhone) даже на слабых устройствах.

МИНУС - не знаю как ведет себя на НЕ стандартных устройствах! Китайских, часах, медиаплерах, холодильниках, кофемашинах...

Мечтаю написать свой формат работы с базой данных - переписать старинный проект из делфей. Чем-то напоминает SQLite по структуре, но... таблицы однотипные, но завязаны в дерево. Поддержка разных уровней шифрования на каждую таблицу. Короче... высокая скорость, высокая защита, ноу-хау структура (не должны догадаться как храниться). В свое время писал(изобретал) 3 года на Делфи. С++ знаю плохо, значит переписывать(учиться) буду еще года 1.5-2 (когда/если серьезно возьмусь)... Основа для своего языка программирования. УЖЕ могу (умею) начать писать на яве, но ЭТИ коды не должен видеть никто! Как исходники протокола скайпа! Пользоваться - пожалуста - десяток-сотня команд. Но как оно внутри работает - это мое!

Но это слишком тяжелый проект для новичка!!! Нужно потренироваться на 2-5ти более простых задачах! Написать пару не слишком тяжелых либ и потестить их пол-годика на десятке устройств...

Например я пишу свою либу мультитача. Пока в яве. Довольно сложную. А значит позднее (возможно) и медленную в расчетах! Довольно уникальную - в опенсорсы ее выкладывать не собираюсь... особенно случайно, приклеив ее к мелкому проекту-образцу(или на фрилансе). Можно конечно вынести отладку в отдельный проект, оформить как либу и надеятся на надежность обсфуктора... А можно зашить в *.о и больше не парится. Можно даже ограничить функционал либы наличием файла-ключа на устройстве разработчика... Переписать на с++ займет неделю-две... Но немного страшно! Убить 2 недели и получить глюки, несовместимости, критические ошибки(проект тупо закрывается при ошибке в с++, даже обработчик ошибки не вызывает)...

Кто-нибудь из Вас писал на с++ что-нибудь кроме игрушек?

Помню... Во времена турбо-паскаля было модно делать вставки на асемблере. Это ускоряло выполнение любой подобной процедуры в несколько раз(иногда и в 10). Код становился менее читабельным, но... кнопки нажимались быстрее, картинки быстрее отрисовывались, код быстрее считался... для медленных устройств это было полезно!
У некоторых моих знакомых до сих пор тормознутый андроид2.3. А с++ их бы ускорил! А мне кажется андроид никогда не уйдет из рынка дешевых но медленных устройств - начнутся микрочипы со встроенной ос для игрушек, роутеры с ос, розетки для умного дома, женские часики с мониторчиком, брелок на ключи, смыватель для унитаза и наклейки на портфель! И быстрые алгоритмы будут нужны... Явы всегда будет не хватать...
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
04.06.2014, 20:03 #4
Цитата Сообщение от Tester64 Посмотреть сообщение
У с++ много бонусов!
Только надо учитывать, что собирать эти бонусы придётся на поле, усеянном граблями различной формы и величины.
Новичку эти грабли могут отбить желание собирать бонусы.

Цитата Сообщение от Tester64 Посмотреть сообщение
Мечтаю написать свой формат работы с базой данных - переписать старинный проект из делфей... Основа для своего языка программирования.
Компилятор своего языка.
Чем тебе не задание, о котором ты сам же и спрашиваешь?)
На мой взгляд, теоретически и практически очень полезное, но потребует затрат ресурсов приличных.

Много инструментов пригодных: генераторы парсеров, LLVM...
Но настоящего программиста готовые инструменты не привлекают.
Настоящий программист - это спортсмен-велосипедист.
Он свои инструменты создаёт, как же иначе?

Кликните здесь для просмотра всего текста

Поясню свою мысль, высказанную ранее.

Речь не про (C++ vs Java).
Речь про ((C++ на Android'е) vs (Java на Android'е)).

Android это всего лишь ещё одна платформа для программ.
Поэтому два подхода в разработке:
- программа исключительно для Android'а.
- кроссплатформенная программа в том числе и для Android'а.

В первом случае, надо очень сильно задуматься о необходимости C++.
Во втором случае, у C++ конкурентов почти нет.

По игровым проектам.
Например такие вещи как PowerVR SDK и Project Anarchy - кроссплатформенные решения для разработки.
Есть возможность, разрабатывать и отлаживаешь всё, не касаясь андроида.
Никто не запрещает самому написать свой кроссплатформенный SDK.
Поэтому, чаще всего, портируют приложение на Android, а не разрабатывают на Android'е.
Но это всё игрушки, там рулит C++.

Да и про мультитач либу ты загнул: например, у Марио Цехнера это класс в 150 строчек.


Успехов!
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
04.06.2014, 22:41  [ТС] #5
Цитата Сообщение от EVP Посмотреть сообщение
Чем тебе не задание, о котором ты сам же и спрашиваешь?)
Это слишком тяжелое задание для новичка. И очень много моментов, когда от от начала написания блока до попытки его скомпилировать без ошибок пройдет неделя. На делфи могу выдержать и месяц. На яве неделю.. На си - час! Например сложные парсеры строк с занесением результатов в таблицы (понятия не имею как это сделать на с++, но знаю как по инструкциям собрать подобное на яве и по памяти напишу на делфи).

Нужно что-то простое! И НЕ игровое! И ОЧЕНЬ хочу получить положительный отзыв о технологии (применение NDK в андроиде) от того кто написал на нем что-нибудь свое (а не воспользовался готовыми либами вроде игровых движков)

Цитата Сообщение от EVP Посмотреть сообщение
про мультитач либу ты загнул: например, у Марио Цехнера это класс в 150 строчек
Это Марио сильно упростил! У меня готово 3 вида зума(в разработке еще 2) и вращения плоских фигур 1м, 2мя и 3мя пальцами, дблклик с управляемой схемой задержек(хоть морзянку отбивай), лонг клик с 5ю управляемыми длительностями удержания, прострой драг. И мне пока не приходилось полноценно использовать драг, физическое торможение-разгон фигур после отпускания, распознавать простые жесты... Потенциал большой! Проделано уйма работы по вычислениям векторов. Но стоит выложить программу где нужно использовать лишь один раз дблклик и все - исходники можно изучать и целиком использовть(обсфуктор либо не спасет, либо замедлит работу)!

Цитата Сообщение от EVP Посмотреть сообщение
На мой взгляд, теоретически и практически очень полезное, но потребует затрат ресурсов приличных.
Не особо - очень узкоспециализированый транслятор, скриптовый язык. Тормознутее явы, но не требующий компиляции... Перекинул скрипт на устройство и пользуйся. Пока для простых число-строковых расчетов для одной моей программы... Я не псих, мечтающий заменить яву (и с++) на устройстве. Вроде кривых бейсиков... Но нужна надежность выполненя не ниже явы и защищенность кода транслятора на уровне с++... Сложная только своя схема хранения скриптов и базы в одном файле!
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
08.06.2014, 07:30  [ТС] #6
Ну-же! Специалисты! Отзовитесь! Кто реально использовал NDK? И у кого NDK успешно работает? И не написание игры на чужом движке, а что-нибудь свое??? Меня НЕ интересуют Ваши тайны. Мне НЕ важны даже направления Ваших проектов. Обещаю даже не приставать с вопросами по самому NDK!

Просто сообщите насколько надежна технология NDK по Вашему мнению после ее активного применения!!!

1) Были ли глюки, которые исправлялись только заменой устройства?
2) Были ли глюки, из-за которых возвращались назад на яву или закрывали проект?


Если я возьмусь за свой проект (написание скриптового языка), то этот займет не меньше года! И отнимет кучу свободного времени. Не охота через пол-года-год закрыть проект из-за его глючности или не полной совместимости... И начать переписывать его еще и на яву... Не хочу тратить СТОЛЬКО времени в пустую!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 07:30
Привет! Вот еще темы с ответами:

Android NDK - Программирование Android
Здравствуйте. Хотелось бы написать пару программок на андроид, но джаву вообще не знаю. Нагуглил, что можно писать на С++, но толком как...

SDK or NDK - Программирование Android
я начинающий разработчик, на данный момент не много знаю с++. 1) Что лучше изучать SDK и яву или же NDK, в будущем хочу попробовать себя...

Подключить NDK - Программирование Android
(моя 101я попытка начать работать с NDK) Чуть сдвинулся, но не хватает теории... 1) Скачал последний NDK (android-ndk-r9c) 2)...

NDK C vs C++ и примеры - Программирование Android
Гуру NDK! Посоветуйте! В очередной раз взялся за NDK и вдруг получилось... Успешно запустил все примеры что были под руками... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.06.2014, 07:30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru