#python #python-3.x #user-interface #kivy #cross-platform
#python #python-3.x #пользовательский интерфейс #kivy #кроссплатформенность
Вопрос:
Что позволяет Kivy быть кроссплатформенным?
Другими словами, как один и тот же исходный код Kivy может генерировать приложения на нескольких типах аппаратных платформ, таких как desktop, iOS и Android?
Комментарии:
1. Потому что именно так это написано. Он имеет общий, независимый от платформы код и отдельный зависящий от платформы код для каждой из поддерживаемых им платформ. Многие кроссплатформенные программы похожи на это.
2. @MattDMo Я так и думал. Я спрашивал в надежде узнать, как Kivy, в частности, это делает, включая ссылки на документацию, если таковая имеется.
3. репозиторий исходного кода Kivy находится здесь , если вы хотите изучить его самостоятельно. Я не уверен, сколько там будет документации по фактической механизме кроссплатформенной работы, но просмотр старых проблем может быть информативным.
Ответ №1:
Я полагаю, что есть две ключевые крайности в достижении кросс-платформенной совместимости:
- Реализуя вещи по-разному на каждой платформе, так что Kivy запускает разный код на каждой из них, но скрывает это различие от пользователя, делая вывод одинаковым.
- Используя внешние API, которые поддерживаются всеми различными платформами, так что собственный код Kivy в основном одинаков, а платформы сами заботятся о том, чтобы он работал.
В Kivy есть немного того и другого, но, в частности, во всех чертежах используется OpenGL ES 2, который относится ко второму типу: вся логика рисования Kivy практически идентична на всех поддерживаемых платформах. Конечно, существуют и другие типы, например, при разработке показателей отображения, таких как плотность пикселей, Kivy использует разные методы на каждой платформе, но не предоставляет пользователю никаких таких деталей.
Конечно, при рассмотрении вещей в целом гораздо больше нюансов. Например, Kivy использует SDL2 в качестве библиотеки для создания окна, настройки его размера / паузы / возобновления работы с pos и т.д., Поэтому код Kivy здесь относится ко второму типу, поскольку он вызывает SDL2 одинаковым образом на каждой платформе. Однако SDL2 сам по себе не является родным для платформы и относится к первому типу, по-разному реализующему свой API на разных платформах, но предоставляющему один и тот же API для Kivy на каждой из них.