#java #c #android #math
#java #c #Android #математика
Вопрос:
я хочу написать научную / числовую среду для Android, я собираю информацию, поскольку я никогда ничего не разрабатывал для Android или мобильных устройств.
Недавно я услышал о native development kit, который должен позволить мне писать код на C для моего приложения для Android, но у меня есть несколько вопросов:
- Вызовет ли это проблемы с переносимостью? из-за компиляции и машинного ада с кодом
- Хороши ли базовые математические функции и объекты Java (по крайней мере, в Android) или мне следует попробовать пользовательскую реализацию общих функций?
- Писать все на Java? принесет ли это мне большую потерю производительности по сравнению с ndk?
Комментарии:
1. Я написал числовые приложения на Java. Я не мог провести никакого сравнения с эквивалентным приложением на C , но я сомневаюсь, что это могло быть быстрее.
2. Я бы подумал о том, чтобы сначала написать все это на Java, а затем профилировать и оптимизировать. Если вы обнаружите разделы, которые работают особенно медленно, перепишите их с помощью NDK.
3. Поймите это правильно, если есть какие-либо проблемы с производительностью, найдите их, а затем оптимизируйте. Для вашего первого прохождения сделайте это простым —
Ответ №1:
С веб-сайта:
Если вы пишете машинный код, ваши приложения по-прежнему упаковываются в файл .apk и они по-прежнему выполняются внутри виртуальной машины на устройстве.Фундаментальная модель приложения для Android не меняется.
Использование собственного кода не приводит к автоматическому увеличению производительности, но всегда увеличивает сложность приложения.
Итак, хорошая новость в том, что проблем с переносимостью нет! Плохая новость в том, что это не то же самое, что компиляция кода C для процессора, поэтому это может не дать вам желаемого повышения производительности. Более того, это определенно значительно усложнит вашу задачу как разработчика.
Чтобы повторить совет, который вы получили в комментариях: сначала получите функциональность с помощью чистой Java, а затем позаботьтесь об оптимизации позже.
Что касается «того, насколько хороши» математические объекты, функции в java.lang.Математика настолько хороша, насколько это возможно с помощью double
s. Похоже, что десятичные и целочисленные классы произвольной точности отсутствуют в библиотеках Android, поэтому вам придется написать их самостоятельно, если они вам понадобятся. То же самое касается любых объектов более высокого уровня (векторов (на самом ArrayList
деле можно использовать an), матриц, графиков) В Java есть Set
, если вам это нужно.