Искал способ как запаковать свой собственый проект на python в apk файл , без помощи пк и вот наконец- таки такая возможность появилась. Об этом собственно и поговорим в данной статье.
вступление
1.что для этого необходимо. Подготавливаем проект.
2.Структура проекта. Пакуем наше приложение в apk файл.
Положение дел.
что нам понадобится
-Для начала установим sl4a и python. Этот пункт я описывал в своей статье -. и стандартный шаблон ссылка
-далее установим aide. Начиная с версии 1.0 beta9 поддерживается запаковка любых проектов для андроид.(найти можно в маркете бесплатно)
-файловый менеджер. Я использую Total comander и root explorer.
-текстовый редактор. Встроенный в aide редактор тормозит при открытии больших файлов , поэтому предлогаю пользоваться сторонним. Посоветовать могу 920 text editor . Автоопределение кодировок , шустрый,удобный редактор с подсветкой синтаксиса.(найти так же можно в маркете абсолютно бесплатно)
когда все установлено можно приступать к работе. Для начала напишем к примеру простенькую программу на питон используя sl4a. После того скачаем шаблон для упаковки нашего будущего проекта. распакуем архив и папку с исходниками положим по пути sdcard/AppProjects/ .В этой папке по умолчанию располагаются проекты для работы с ними в нашей ide. Рассмотрим структуру проекта подробнее.
Как скомпилировать python в APK на андроиде
Программа содержит все необходимое для работы питон скрипта. Дополнительные библиотеки, описание элементов интерфейса в xml , java код . Остановлюсь на том что пригодится нам.
папка res : в тут располагаются ресурсы программы , иконка и логотип проекта, сам питон скрипт ,xml с описанием некоторых элементов интерфейса. В корне папки располагаются 4 папки.
1. drawable/
— icon.png — иконка программы которая будет отображаться в меню. можно заменить на свою.
— script_logo_48.png — логотип программы. Будет отображаться в статус баре когда программа запущена. так же можно заменить на свой.
— stat_sys_warning.png — иконка отображающаяся в статус-баре если во время работы программы возникла ошибка (код ошибки отображается рядом в строке).
2. layout/
— script.py — рабочий скрипт нашего приложения. В нем содержится весь исходный код питон части нашего приложения. Заменим имеющийся в скрипте код на свой.
4. values/
Как скомпилировать Python в мобильное приложение
— strings.xml — тут нас интересуют две строки .
тут пишем название нашего приложения которое будет отображаться в списке установленных приложений
пишем текст который будет отображаться в статус баре при загрузке приложения
с данной папкой разобрались идем дальше. Возвращаемся в корневой каталог.
SRC/ тут располагается java часть программы. Взглянем на путь по которому лежат файлы — com/dummy/foofoandroid/ — этот путь и есть название пакета нашего проекта — com.dummy.fooforandroid. То есть если мы запакуем два разных проекта с одним и тем же названием то программы будут устанавливаться друг на друга заменяя собой предыдущую версию.
Поэтому нам необходимо будет переименовать эти папки и заменить несколько строк в .java файлах. Переименуем например в com.test.app. откроем последнюю папку, в ней лежат 5 файлов, их мы слегка и будем редактировать. Откроем dialogactivity.java в любом текстовом редакторе, смотрим первую строчку — package com.dummy.fooforandroid; меняем выделенное на com.test.app . сохраняем и закрываем файл. То же самое делаем и с остальными четыремя файлами. Т.е меняем название пакета на свое.
сохраняем все и возвращаемся обратно в корневой каталог. находим там файл androidmanifest.xml , в нем так же меняем название. Собственно и все , можно собирать проект.
Сборка проекта
запускаем ide. В панеле файлов видим папку с нашим проектом , нам нужно открыть проект . для этого необходимо открыть любой файл. Например манифест. появится окно уведомления о том что наш проект открыт. Нажимаем клавишу меню в нем выбираем пункт » run » . Начнется компиляция и сборка. По завершению которой программа установится на телефон и мы можем запустить ее , проверить работу.
Готовый апк файл располагается по пути папка с нашим проектом /bin/ . Вот о чем хотел собственно рассказать в данной статье. Спасибо за внимание , успехов вам в ваших начинаниях.
Источник: zaterehniy.blogspot.com
Kivy. Сборка пакетов под Android и никакой магии
Во вчерашней статье Python в Mobile development, в которой речь шла о библиотеке KivyMD (коллекции виджетов в стиле Material Design для использования их в кроссплатформенном фреймворке Kivy), в комментариях меня попросили рассказать о процессе сборки пакета для платформы Android. Для многих этот процесс, к сожалению, был и остается чем-то из ряда магического шаманства и не подъёмным для новичков делом. Что ж, давайте разбираться, так ли на самом деле все сложно и действительно ли я маг и волшебник.
Конечно, мог бы! Итак, вы написали свой код на Python и Kivy. Что нужно для того, чтобы это можно было запустить на Android устройствах? Перейдите в репозиторий KivyMD и вы увидите, что в этой инструкции уже давно прописаны шаги, которые позволят вам собрать APK пакет:
- Загрузите XUbuntu 18.04
wget https://github.com/HeaTTheatR/KivyMD-data/raw/master/install-kivy-buildozer-dependencies.sh
chmod +x install-kivy-buildozer-dependencies.sh
./install-kivy-buildozer-dependencies.sh
Все! Теперь у вас есть виртуальная машина для сборки APK пакетов для приложений Kivy!
Что дальше? Давайте, собственно, займемся сборкой тестового приложения. Создайте в домашнем каталоге вашей виртуальной машины директорию TestKivyMD с пустым файлом main.py:
Далее откройте файл main.py и напишите код нашего тестового приложения, которое будет использовать библиотеку KivyMD:
from kivy.lang import Builder from kivymd.app import MDApp KV = «»» Screen: MDToolbar: title: «My firt app» elevation: 10 md_bg_color: app.theme_cls.primary_color left_action_items: [[«menu», lambda x: x]] pos_hint: MDRaisedButton: text: «Hello World» pos_hint: «»» class HelloWorld(MDApp): def build(self): return Builder.load_string(KV) HelloWorld().run()
Сохраните, откройте терминал в директории с файлом main.py и установите библиотеку KivyMD:
sudo pip3 install kivymd
После установки можно протестировать наш код:
python3 main.py
Результатом работы скрипта будет экран с Toolbar и одной кнопкой «Hello World»:
Дальше нам нужно создать файл спецификации buildozer.spec, который должен располагаться в той же директории, что и файл main.py:
Если вы не закрывали терминал (если терминал был закрыт, откройте его в директории TestKivyMD), введите команду:
buildozer init
Эта команда создаст дефолтный файл спецификации. Откройте его и отредактируйте:
[app] # (str) Title of your application title = KivyMDTest # (str) Package name package.name = kivymd_test # (str) Package domain (needed for android/ios packaging) package.domain = com.heattheatr # (str) Source code where the main.py live source.dir = . # (list) Source files to include (let empty to include all the files) source.include_exts = py,png,jpg,jpeg,ttf # (list) Application version version = 0.0.1 # (list) Application requirements # comma separated e.g. requirements = sqlite3,kivy requirements = python3,kivy==1.11.1,kivymd # (str) Supported orientation (one of landscape, sensorLandscape, portrait or all) orientation = portrait # (bool) Indicate if the application should be fullscreen or not fullscreen = 1 # (list) Permissions android.permissions = INTERNET,WRITE_EXTERNAL_STORAGE # (int) Target Android API, should be as high as possible. android.api = 28 # (int) Minimum API your APK will support. android.minapi = 21 # (str) Android NDK version to use android.ndk = 17c # (bool) If True, then skip trying to update the Android sdk # This can be useful to avoid excess Internet downloads or save time # when an update is due and you just want to test/build your package android.skip_update = False # (bool) If True, then automatically accept SDK license # agreements. This is intended for automation only.
If set to False, # the default, you will be shown the license when first running # buildozer. android.accept_sdk_license = True # (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64 android.arch = armeabi-v7a [buildozer] # (int) Log level (0 = error only, 1 = info, 2 = debug (with command output)) log_level = 2 # (int) Display warning if buildozer is run as root (0 = False, 1 = True) warn_on_root = 0 # (str) Path to build artifact storage, absolute or relative to spec file build_dir = ./.buildozer # (str) Path to build output (i.e. .apk, .ipa) storage bin_dir = ./bin
Здесь все понятно поэтому дополнительные комментарии излишни. Почитайте внимательно дефолтную спецификацию, в ней можно указать путь к иконке, пресплеш при загрузке приложения и многое другое. Я оставил лишь то, что нам сейчас нужно для сборки нашего тестового пакета. И, собственно, запускаем процесс сборки командой в терминале:
buildozer android debug
Можете смело идти на кухню и заваривать кофе, потому что в первый раз процесс загрузки и компиляции библиотек займет очень много времени. Все последующие сборки проходят за 10-20 секунд.
Кофе выпит и самое время заглянуть в терминал:
Вуаля! Наше приложение построено! Самое время закинуть его на смартфон и запустить:
Все работает! И оказывается не все так сложно, как казалось.
Также меня спрашивали:
Ни у Flutter ни у React Native нет преимуществ перед языком разметки Kivy Language, которая позволяет создавать и позиционировать лайоуты и виджеты. Как по мне, то, как строится UI во Flutter — это самое настоящее извращение. Придумать это мог только больной на голову человек. Чтобы не быть голословным, давайте посмотрим на код Flutter и код Kivy одного и того же простейшего приложения… Выглядеть оно будет следующим образом:
А вот абсолютно тоже самое, но с использованием Kivy и KivyMD:
from kivy.lang import Builder from kivymd.app import MDApp KV = «»» #:import get_color_from_hex kivy.utils.get_color_from_hex Screen: MDCard: MDLabel: value: 0 text: str(self.value) halign: «center» on_touch_down: self.value += 1 canvas.before: Color: rgba: get_color_from_hex(«#4eaabe») Ellipse: pos: self.center[0] — dp(25), self.center[1] — dp(25) size: dp(50), dp(50) «»» class HelloWorld(MDApp): def build(self): return Builder.load_string(KV) HelloWorld().run()
По-моему, вывод очевиден и не нуждается в моем комментировании…
Надеюсь, был вам полезен. Оставляю опрос на тему «Удалось ли вам построить приложение для Андроид».
Источник: habr.com
VS Web School
В предыдущем посте мы рассматривали как Как установить Kivy и Buildozer на Ubuntu 14.04 (Часть 1) , в этой статье мы сделаем компиляцию нашего кода в .apk файл с помощью Buildozer. Если вы читали предыдущую статью то, вы уже установили Buildozer в ваше виртуальное окружение. Однако, мы еще не готовы к созданию .apk файла.
Продолжим. Создадим папку myapp и файл main.py
Добавьте этот код:
Это очень простое приложение которое содержит кнопку и текст на ней «Hello World». Кнопка ничего не делает, когда вы нажимаете на нее, она только изменяет цвета фона, по умолчанию она является частью интерфейса в Kivy.
Теперь нам нужно проверить код, прежде чем мы будем его компилировать. Случайная ошибка в коде может повлиять на компиляцию файла .apk или же на работу в самом телефоне.
Запустим наше приложение
Должна появиться вот такая кнопка
После этого шага, нужно инициализировать Buildozer в этой папке:
$ buildozer init
В текущей папке появиться файл с именем buildozer.spec . В нем находится много опций, которые мы можем изменить. Это настройки нашего приложения и процесса компиляции.
Настоятельно рекомендуется изменить LOG_LEVEL на ( debug ) в buildozer.spec для того, чтобы увидеть ошибки компиляции. Со временем, вы можете столкнуться с различными ошибками и режим отладки, будет очень полезным для их решения.
В файле buildozer.spec, нужно установить LOG_LEVEL со значением = 2 :
Выбираем Application Versioning с методом 2, она нужна Buildozer для компиляции приложения.
Для того, чтобы собрать .apk и проверить код на ошибки используйте эту команду:
В некоторых случаях .apk почему-то не хочет компилироваться если виртуальное окружение находится не в домашней директории, а на другом диске, тогда создайте ваше виртуальное окружение в папке /home это должно помочь. И повторите все шаги, которые были описаны выше.
Источник: vswebschool.blogspot.com