Обновить
Комментарии 27
Спасибо, это ценно!
В прошлом году я предлагал своим школьникам написать что-нибудь на kivy. И один из них в итоге даже сделал относительно успешное приложение и даже сумел залить его в магазины приложений google и apple. Но стрясти с него адаптированных инструкций мне пока не удалось :) А у самого пока руки не доходят.
Я вообще ЗА написание приложений на Python.
Спасибо за труд.

В свое время так и не разобрался, как сделать запрос на выдачу приложению определенных разрешений во время его работы. Вам удалось это реализовать?

Мне не совсем понятно, что означает «во время работы» и зачем это может быть нужно — ведь разрешения можно запросить при установке?

Начиная с 6 андроида (sdk 23), а это около половины устройств, надо запрашивать некоторые разрешения при необходимости, а не при установке. Например написали Вы какой-нибудь аналог обычного блокнота, но с возможностью чтения контактов пользователя. При чтении контактов приложение должно проверить наличие разрешения и, в случае необходимости, запросить у пользователя разрешение на чтение. Это я и имел ввиду под выражением "во время работы"

Понятно. С такой задачей пока не сталкивался, так что подсказать не могу.
Выглядело хоть и заманчиво, но время запуска даже демок удручало.
Согласен, время запуска (особенно первого) — это действительно значимый минус. Хотя, зачастую, приложения на Unity, например, запускаются примерно столько же по времени, но никто же не говорит, что Unity так уж плох :)

Спасибо за статью (две подряд за два дня о Kivy это, конечно, круто). Насчет создания виджетов. Здесь, как Linux меню Home: первая генерация действительно заметна для глаза. Но все последующие вызовы происходят мгновенно.

Возможно, вы это имели в виду:
image
Пункт 'Плагины' ещё не открывался, и окно не было создано, поэтому видно небольшую задержку.
Пункт 'Мои группы' уже был открыт, окно создано, поэтому открывается мгновенно.


Здесь, кстати говоря, много зависит от того, как вы код пишите. Можно такого написать, что это будет работать так медленно, что у людей всякое желание пропадет использовать Kivy.

Я начал готовить свою статью за несколько дней до выхода вашей, и забавно, что и у вас, и у меня рассматривается вопрос создания виджетов и работы с RecycleView. Думаю, это говорит в пользу того, что, с одной стороны, вопрос действительно актуальный, а с другой — неочевидный: как я и писал в статье, разработчику, ещё не изучившему все тонкости, просто неоткуда узнать о том, как это сделать правильно. Ну, точнее, в случае с RecycleView теперь уже есть откуда (я не только о наших с вами статьях, я и на StackOverflow описывал свой опыт). Но очень много ещё не документированного, особенно в том, что не касается конкретно Kivy. Те же сервисы — ушло несколько дней на дебаггинг, чтобы понять в чём проблема, а будь это нормально документированно — ушло бы несколько минут. Я уже не говорю про in-app purchases, Google Play Games и Facebook SDK, которые я собираюсь описать во второй части. ИМХО именно в этом на данный момент одна из основных проблем Kivy и P4A — многие вещи сделать можно, но нигде не написано, как, а тратить своё время на глубокий дебаггинг многие не готовы — и это нормально, если уж позиционировать фреймворк как полноценный инструмент для разработки под Android. Но сам инструмент правда хороший, и поэтому я пытаюсь сделать хоть какой-то вклад в решение данной проблемы своими статьями :)
Кстати, на счёт первой генерации и последующих: это действительно так. Однако, я, наоборот, прописываю в on_leave удаление всех динамически создающихся виджетов, и в on_pre_enter каждый раз создаю их заново. Ведь если этого не делать, созданные виджеты будут продолжать висеть в памяти (что и подтверждается вышеописанным эффектом). А если их реально много, хотя бы десятки, в итоге мы получим весьма нерациональное использование памяти. Я не прав?

Ну, насчет памяти я не беспокоюсь, память нынче дешевая и её много :) Да и не так уж много созданный виджет её отнимает.

Сначала стило убедиться

опечатка, исправьте, пожалуйста.
Спасибо за статью, друг мой! Продолжайте писать.
Если будет возможность — осветите, пожалуйста тему распараллеливания процессов.
Когда я делал простенькое приложение для отправки почтового сообщения, столкнулся с тем, что не так-то просто сделать корректно работающий поп-ап, уведомляющий о том, что сообщение в настоящий отправляется. Он выскакивал уже по факту отправки, хотя в коде функция его вызова была раньше, чем функция непосредственно отправки.
В сети есть информация по этому вопросу, но я так и не разобрался: кто-то пишет, что здесь сработает threading, кто-то пишет, что нужно что-то другое.
Было бы здорово, если бы кто-то объяснил, что да как.
Threading + Clock должны помочь. Мне это в моём приложении, в итоге, не понадобилось, но я немного с ними игрался, и это работает. Посмотрите на StackOverflow, там есть несколько вопросов (и ответов) на эту тему.

Можно костыли: вешаете на функцию отправки декоратор (вся работа с передачей данных на сервер должна быть реализована в потоке), вызываете функцию отправки сообщения на сервер, далее через Clock вызываете функцию, которая отслеживает получение данных функцией, которая работает с передачей данных. Это схематично. А вообще же в Python 3.6 есть async await, которые можно использовать в Kivy не прибегая к костылям, описаным выше.

Обратите внимание, что в конце видео, где показана загрузка файла, интерфейс приложения работает параллельно работе функций передачи данных на сервер.

Привет, @ТС! Я вот хочу попробовать себя в разработке простых игр (ну типа тетриса), ибо щас этих игр в google play просто дофига. Опыт есть в разработке и под винду, и веб. Но под андроид я почти не писал, а писать на java я категорически не хочу (тем более на андроид студио). Будет ли легко и правильно писать "тетрис" на python? Я, допустим, не планирую писать сложные. И как вы считаете, если я динозавр, имеет смысл писать на rad studio, то есть delphi или cpp?

Понимаю, что это плохо сочетается со статьёй, но, по прошествию какого-то времени я понимаю, что корректный ответ — нет, это не будет легко и правильно, а что хуже — это бесперспективно. К сожалению.

Хехе, понял, спасибо. А как по-вашему, на чем писать простые игры и программы если я
1) Не люблю джаву
2) Люблю питон и дельфи?

Пишите на Kivy. Его возможностей более, чем достаточно для создания как простых, так и для сложных игр:


https://play.google.com/store/apps/details?id=org.test.spaceravens
https://play.google.com/store/apps/details?id=ch.cyril_stoller.deflectouch
https://play.google.com/store/apps/details?id=au.com.quadropoly.quadropoly
https://play.google.com/store/apps/details?id=org.vocaword.frogs

Если хотите писать приложения, у которых будет больше, чем пара сотен скачиваний, и у которых будут перспективы – Java практически не имеет альтернатив. Всё остальное – это для экспериментов для собственного удовольствия, как мой собственный пример из статьи :)

А какое отношение имеет технология к количеству скачиваний?! Говна с сотней скачиваний полно и на Java. И если ты — рукожоп, то ты ни на Kivy, ни на поганой Java, ни на C++ не напишешь ничего достойного! Так что не надо тут воздух пинать! Вот то, что не безрукие люди делают на Kivy (первые два приложения сделаны мною на коммерческой основе для заказчиков из Европы и России)


https://www.youtube.com/watch?v=7gTXreji0QY&t=77s
https://www.youtube.com/watch?v=uDmUNSK52LI
https://vimeo.com/297768834
https://vimeo.com/297757037
https://vimeo.com/238618045
https://vimeo.com/206290310
https://vimeo.com/170447721

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.