Как Kivy обеспечивает кроссплатформенную совместимость?

#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:

Я полагаю, что есть две ключевые крайности в достижении кросс-платформенной совместимости:

  1. Реализуя вещи по-разному на каждой платформе, так что Kivy запускает разный код на каждой из них, но скрывает это различие от пользователя, делая вывод одинаковым.
  2. Используя внешние API, которые поддерживаются всеми различными платформами, так что собственный код Kivy в основном одинаков, а платформы сами заботятся о том, чтобы он работал.

В Kivy есть немного того и другого, но, в частности, во всех чертежах используется OpenGL ES 2, который относится ко второму типу: вся логика рисования Kivy практически идентична на всех поддерживаемых платформах. Конечно, существуют и другие типы, например, при разработке показателей отображения, таких как плотность пикселей, Kivy использует разные методы на каждой платформе, но не предоставляет пользователю никаких таких деталей.

Конечно, при рассмотрении вещей в целом гораздо больше нюансов. Например, Kivy использует SDL2 в качестве библиотеки для создания окна, настройки его размера / паузы / возобновления работы с pos и т.д., Поэтому код Kivy здесь относится ко второму типу, поскольку он вызывает SDL2 одинаковым образом на каждой платформе. Однако SDL2 сам по себе не является родным для платформы и относится к первому типу, по-разному реализующему свой API на разных платформах, но предоставляющему один и тот же API для Kivy на каждой из них.