Чи є спосіб запустити Python на Android?


2093

Ми працюємо над версією S60, і ця платформа має приємний API Python ..

Тим не менш, немає нічого офіційного в Python на Android, але оскільки Jython існує, чи є спосіб, щоб змія і робот працювали разом ??

Відповіді:


1060

Одним із способів є використання Kivy :

Бібліотека Python з відкритим кодом для швидкого розвитку додатків, які використовують інноваційні користувальницькі інтерфейси, такі як додатки для багатьох дотиків.

Kivy працює на Linux, Windows, OS X, Android та iOS. Ви можете запустити один і той же [python] код на всіх підтримуваних платформах.

Додаток Kivy Showcase


63
Якщо ви використовуєте Kivy, ось інструмент, який допоможе упакувати ваш проект у APK: github.com/kivy/python-for-android
gdw2

17
Я минулий тиждень грав з Ківі, намагаючись написати гру. Їх основні розробники дуже швидко відповіли на запитання IRC, проте якщо ви запрограмували графічний інтерфейс, перш ніж Kivy змусить вас сказати WTF зовсім небагато. Деякі приклади недокументованих речей, які для мене були дивними: Усі віджети отримують кожну подію on_touch_down, навіть якщо подія відбулася за межами їх регіону. Жоден віджет не має методу draw (), майже все відбувається за допомогою власного шаблона спостерігача на створених ними спеціальних властивостях ( зауважте, вони поділяють цю назву з майном Python, але вони не однакові)
Trey Stout

7
@Trey: Що з речами, що не стосуються GUI? Чи є якісь обмеження щодо використання модулів Python? А як щодо доступу до функцій Android, таких як можливість читати повідомлення, додавати сповіщення, працювати у фоновому режимі, робити фотографії, читати список контактів, визначати розташування GPS тощо?
Тадек

7
А тепер є підтримка iOS!
rubik

16
Тепер, майже повний рік пізніше, чи є підтримка кращою? Чи були тут помітні вдосконалення?
TankorSmash

346

Існує також новий проект Android Scripting Environment (ASE / SL4A). Це виглядає приголомшливо і має певну інтеграцію з рідними компонентами Android.

Примітка: більше не під "активним розвитком", але деякі вилки можуть бути.


70
Щоправда, але у них повинен бути встановлений ASE, це не рішення, яке дозволяє писати додаток для Android у python без нічого встановленого (нормальний користувач буде все "wtf це штука ASE?)
Stuart Axon

20
Крім того, ASE є обмеженим середовищем; ви не можете писати повнорозмірні програми для Android, навіть якщо попередньо встановлено ASE. Див stackoverflow.com/questions/2076381
Шрідхара Ratnakumar

10
Я думаю, що це було перейменовано на SL4A.
Вануан

9
Ви можете писати програми, упаковувати їх і навіть продавати їх у Play Store, якщо ви хочете, з SL4A зараз днями. Це добре вживається, оскільки коментарі вище були розміщені. Якщо ви хочете Python на Android, то PY4A, який працює на SL4A, мабуть, найкращий вибір.
Карл Сміт

2
Я підтверджую, SL4A тепер дозволяє писати пакети програм, готових до використання, я намагався з Perl це працює
ubugnu

216

Так! : Середовище для сценаріїв Android

Приклад через Метт Кеттс через SL4A - "ось сканер штрих-коду, написаний у шести рядках коду Python:

import android
droid = android.Android()
code = droid.scanBarcode()
isbn = int(code['result']['SCAN_RESULT'])
url = "http://books.google.com?q=%d" % isbn
droid.startActivity('android.intent.action.VIEW', url)

46
с / ТАК / мех. можливо / ... це надзвичайно обмежено. щось графічне чи мульти дотик? великий НІ.
gcb

2
@gcb ви не можете використовувати звичайний набір Android-віджетів, але ви можете використовувати "веб-перегляди" (для чого, наприклад, користується нативна програма gmail).
gdw2

28
гольф:import android as a;d=a.Android();d.startActivity('android.intent.action.VIEW',"http://books.google.com?q=%d"%int(d.scanBarcode()['result']['SCAN_RESULT']))
Алекс Л

12
@ gdw2, звичайно, в нашому додатку Gmail використовується WebViews лише для розбору електронних листів, але не для власного інтерфейсу. Це робить порівняння трохи абсурдним.
Веселін Ромич

88

Підмножина Pygame для Android

Pygame - це 2D ігровий движок для Python (на робочому столі), який популярний серед нових програмістів. Pygame Subset для Android описує себе як ...

... порт підмножини функціональності Pygame до платформи Android. Мета проекту - дозволити створення ігор для Android, а також полегшити перенесення ігор з платформ, подібних до ПК, на Android.

Приклади включають повну гру, упаковану як APK, що досить цікаво.


4
На моєму Droid X було порушено декілька аспектів (кнопки чи сенсорний екран, не можу запам’ятати), тому я не дуже вдався до цього маршруту.
gdw2

78

Перехресна компіляція та Ігніфуга

У моєму блозі є інструкції та виправлення для крос-компіляції Python 2.7.2 для Android.

Я також відкрив джерело Ignifuga , мій 2D Game Engine. Це на основі Python / SDL, і він перетинає компіляції для Android. Навіть якщо ви не використовуєте його для ігор, ви можете отримати корисні ідеї з коду чи утиліти для побудови (на ім’я Шафер , за Тімом ... ви знаєте, хто).


4
Вражає. +1 для цього. Не прийнято, оскільки ви не можете нічого написати для цього.
e-satis

1
Якщо ви маєте на увазі, що не можете робити графічні додатки з цим, ви, безумовно, можете, звичайно, потребувати більше роботи. Я фактично використовую цей порт у поєднанні зі SDL 1.3, переходити з інтерпретатора python до інтерактивного додатка не тривіально, але це можна зробити.
gabomdq

77

Сценарій шару для Android

SL4A робить те, що ви хочете. Ви можете легко встановити його безпосередньо на свій пристрій зі свого сайту, і він не потребує root.

Він підтримує різні мови. Пітон - найзріліший. За замовчуванням він використовує Python 2.6, але є 3.2 порт, який ви можете використовувати замість цього. Я використовував цей порт для всіляких речей на Galaxy S2, і він прекрасно працював.

API

SL4A надає порт їх androidбібліотеки для кожної підтримуваної мови. Бібліотека забезпечує інтерфейс до базового API Android через один Androidоб'єкт.

from android import Android

droid = Android()
droid.ttsSpeak('hello world') # example using the text to speech facade

Кожна мова має майже однаковий API. Ви навіть можете використовувати API JavaScript у веб-переглядах.

let droid = new Android();
droid.ttsSpeak("hello from js");

Інтерфейси користувача

Для користувацьких інтерфейсів у вас є три варіанти:

  • Ви можете легко використовувати загальні, рідні діалоги та меню через API. Це добре для діалогів підтвердження та інших основних входів користувачів.
  • Ви також можете відкрити веб-перегляд із сценарію Python, а потім використовувати HTML5 для інтерфейсу користувача. Коли ви використовуєте веб-перегляди з Python, ви можете передавати повідомлення вперед і назад між веб-переглядом та процесом Python, який його породив. Користувацький інтерфейс не буде рідним, але це все-таки хороший варіант.
  • Існує деяка підтримка власних інтерфейсів користувача Android, але я не впевнений, наскільки добре він працює; Я просто ніколи не використовував це.

Ви можете змішувати параметри, так що ви можете мати перегляд веб-сторінки для основного інтерфейсу та все ж використовувати вбудовані діалоги.

QPython

Існує сторонній проект під назвою QPython . Він базується на SL4A і додає деякі інші корисні речі.

QPython надає приємніший інтерфейс користувача для управління вашою установкою і включає невеликий редактор коду сенсорного екрану, оболонку Python та оболонку PIP для управління пакетами. Вони також мають порт Python 3. Обидві версії доступні в магазині Play, безкоштовно. QPython також поєднує бібліотеки з безлічі Python для проектів Android, включаючи Kivy, тому це не лише SL4A.

Зауважте, що QPython все ще розробляє свою вилку SL4A (правда, не дуже чесно). Сам головний проект SL4A майже загинув.

корисні посилання


1
Чи можете ви скористатися будь-яким із них, щоб запустити скрипт python від терміналу або програми? Я не можу знайти спосіб :(
Пітто,

1
Ви можете запустити скрипт SL4A від Tasker. На цій сторінці є кілька прикладів, у яких фрагменти Python запускаються з програми Tasker. Це дійсно зовсім інше питання.
Карл Сміт

77

Як любитель Python та програміст Android, мені сумно сказати, що це не гарний шлях. Є дві проблеми:

Одна з проблем полягає в тому, що для інструментів розробки Android існує набагато більше, ніж просто мова програмування. Для налаштування дисплея, як і в HTML, використовується файли XML. Вбудовані Java-об’єкти інтегровані в цей XML-макет, і це набагато простіше, ніж писати ваш код, щоб перейти від логіки до растрової карти.

Інша проблема полягає в тому, що G1 (і, ймовірно, інші Android-пристрої на найближчий час) не такі швидкі. Процесори 200 МГц і оперативна пам’ять дуже обмежені. Навіть на Java вам потрібно зробити пристойну кількість переписування, щоб уникнути створення більше об'єктів, якщо ви хочете зробити додаток ідеально рівним. На мобільних пристроях Python деякий час буде занадто повільним.


48
На телефоні Android немає жодного слова java, воно складено для байт-коду під час упаковки. Швидкість - це не проблема: Google може надати інструменти, що створюють правильний байтовий код з коду python (наприклад, для Jython). BTW, Dalvik не є Java VM, тому мова не йде про Java VS Python.
e-satis

6
Байт-код JAVA все ще повинен оброблятися JVM, а мова Java все одно потребує збору сміття. Фактична швидкість могла досягати лише C ++.
LtWorf

19
@Touzen ще 2 роки потому ми зараз запускаємо процесор Intel Atom або процесори з базовою октаною. ;)
Рохан Кандвал

2
Через різницю у потужності, яку вони здатні намалювати, телефони завжди будуть на порядок повільнішими, ніж настільні. Однак не відмовляйтесь від Python для мобільного пристрою, оскільки, як правило, лише частина коду відповідає за інтенсивну роботу процесора, і цю частку можна оптимізувати, переписавши її іншою мовою.
Євгеній Сергєєв

2
До речі, Google сьогодні підштовхує Котліна - який є більш невідомою мовою для більшості користувачів - зрозуміло, що можна підтримувати інші мови, ніж Java (я - Java-розробник та фанат Python). Тож я думаю, що відповідь є скоріше політичною, ніж практичною.
Алекс

49

Ківі

Я хотів додати те, що @JohnMudd написав про Ківі. Минуло роки з описуваної ним ситуації, і Ківі істотно розвинувся.

Найбільшою точкою продажу Kivy, на мою думку, є його сумісність між платформами. Ви можете кодувати та протестувати все, використовуючи будь-яке середовище робочого столу (Windows / * nix тощо), а потім пакувати свою програму для різних платформ, включаючи Android, iOS, MacOS та Windows (хоча програмам часто не вистачає назви).

Завдяки власній мові KV , ви можете легко кодувати та створювати інтерфейс GUI легко (це як Java XML, але замість TextView тощо. У KV є свій власний ui.widgetsаналогічний переклад), що, на мою думку, досить легко прийняти.

В даний час Buildozer і python-for-android є найбільш рекомендованими інструментами для створення та упаковки ваших програм. Я спробував їх обидва і можу твердо сказати, що вони створюють Android-програми з Python вітерцем. Їх путівники також добре задокументовані.

iOS - ще одна велика точка продажу Kivy. Ви можете використовувати ту саму базу коду з кількома змінами, необхідними за допомогою інструментів kivy-ios Homebrew, хоча для збірки потрібен Xcode перед запуском на своїх пристроях (AFAIK iOS Simulator в Xcode в даний час не працює для збірки архітектури x86) . Також є деякі проблеми залежності, які потрібно вручну скласти і вирішити в Xcode, щоб мати успішне складання, але їх було б не надто складно вирішити, і люди в Kivy Google Group теж дуже корисні.

З урахуванням сказаного, у користувачів, які володіють хорошими знаннями Python, не повинно бути проблем зібрати основи швидко.

Якщо ви використовуєте Kivy для більш серйозних проектів, ви можете виявити існуючі модулі незадовільними. Однак є деякі ефективні рішення. З ( пізніше працює) pyjnius для Android та pyobjus користувачі тепер можуть отримувати доступ до класів Java / Objective-C для управління деякими з рідних API.


Я щойно завантажив Ківі з його сайту. Показує підтримку Python 3.4 32 та 64-бітної версії та демонстрацію роботи сенсорного вводу.
codeReview

1
@codeReview, я використовую Kivy тільки з Python2 і не маю досвіду роботи з Python3, чи все працює без проблем?
Анзель

Я сподіваюсь про це, сподіваюсь, незабаром. Але у мене немає досвіду роботи з Python поза файлами .py файлів командної оболонки CPython 3.4 для швидкого вирішення обчислювальних чи алгоритмічних задач. Це буде моє перше додаток із графічним інтерфейсом. Мені потрібно прочитати додаткову документацію, зрозуміти мову Kivy та уважно виконувати кроки встановлення, тому я знаю, як встановити Kivi на мій вибір Python IDE та упакувати APK, щоб перейти на Android. Процес - це багатоетапний процес, тому, можливо, це не дуже швидко, коли я можу сказати.
codeReview

1
@codeReview, удачі у вашій подорожі. Якщо це ваш перший додаток, я настійно рекомендую використовувати .kv як файл макета. Це як файл yaml або просто дерево, щоб визначити віджети компонування. Якщо у вашому додатку багатоекранні / макети, використовуйте, ScreenManagerоскільки це заощадить ваші тони часу. Також порада - прочитати їхній список розсилки - купу знаючих людей, які бажають вам допомогти.
Анзель

1
@codeReview, також замість того, щоб вчитися в демонстраційному додатку Kivy, ви можете отримати більше інформації про пошук деяких існуючих додатків kivy та побачити, як люди керують "віджетами" та зворотними зворотами в реальному сценарії. Ківі зовсім не важко навчитися, я скажу набагато простіше з точки зору кривої навчання, ніж скажімо, на Java + Android або на
об’єкті

40

Термукс

Ви можете використовувати додаток Termux , який забезпечує POSIX середовище для Android, щоб встановити Python.

Зауважте, що apt install pythonвстановіть Python3 на Termux. Для Python2 потрібно використовувати apt install python2.


5
+1 для Termux. Абсолютно чудове середовище для роботи. Чудовий вибір пакетів у репост, зручні ярлики кнопок гучності. Це найближча річ з Debian по телефону, який я коли-небудь знаходив.
Джеймс

39

Наразі не так, і вам би пощастило незабаром змусити Jython працювати. Якщо ви плануєте розпочати свою розробку зараз, вам би краще було лише дотримуватися Java.


39

Використовуючи SL4A (про який уже згадувалося в інших відповідях), ви можете запустити повнорозмірний екземпляр web2py ( ймовірно, інші кандидати в веб-рамки python ). SL4A не дозволяє виконувати вбудовані компоненти інтерфейсу користувача (кнопки, смуги прокрутки тощо), але він підтримує WebViews . В основному WebView - це не що інше, як смугастий веб-браузер, вказаний на фіксовану адресу. Я вважаю, що в нашому додатку Gmail використовується веб-перегляд, а не звичайний маршрут віджетів.

Цей маршрут мав би кілька цікавих особливостей:

  • У разі більшості веб-рамок python ви могли б насправді розробити та протестувати, не використовуючи Android-пристрій чи емулятор Android.
  • Який би код Python ви не писали в телефоні, ви також можете розміщувати на загальнодоступному веб-сервері з дуже невеликими (якщо такі є) модифікаціями.
  • Ви можете скористатися всіма шаленими веб-речами там: запитом, HTML5, CSS3 тощо.

2
Cherrypy добре працює з підтримкою websocket ws4py. Пляшка також чудово підходить на SL4A.
Карл Сміт

33

QPython

Я використовую додаток QPython . Це безкоштовно і включає редактор коду, інтерактивний перекладач та менеджер пакунків, що дозволяє створювати та виконувати програми Python безпосередньо на своєму пристрої.


2
Тепер qpython додав підтримку Django! Це все, що мені потрібно! Дивовижний!
swdev

27

З сайту Python для android :

Python for android - це проект зі створення власного дистрибутива Python, включаючи потрібні модулі, та створення apk, включаючи python, libs та вашу програму.


1
@ e-satis: Дякуємо за ваш коментар. Я не бачу, яку відповідь дублюю. Я можу лише здогадуватися, що ви думаєте, що PFA - це те саме, що і Ківі. Хоча він розміщений в рамках проекту Kivy, вам навіть не потрібно використовувати Kivy, щоб використовувати PFA.
gdw2

Перевірте видалену відповідь @ tito в нижній точці до PFA. Плюс до того, що PFA без ківі є малим інтересом, оскільки це єдиний інструментарій, який у вас є.
e-satis

Це не тому, що киві наразі є єдиним доступним інструментарієм (деякі люди працюють над інтеграцією інших), а не дублікатом. Будь ласка, розгляньте інші варіанти як-то, а не об’єднуйте всі в одну посаду: |
тито

21

Чакопія

Chaquopy - плагін для системи побудови на базі Gradle Android Studio. Основна увага приділяється тісній інтеграції зі стандартними засобами розробки Android.

  • Він надає повний API для виклику Java з Python або Python з Java , що дозволяє розробнику використовувати ту мову, яка найкраща для кожного компонента їх програми.

  • Він може автоматично завантажувати пакети PyPI і вбудовувати їх у додаток, включаючи вибрані натільні пакети, такі як NumPy.

  • Він надає повний доступ до всіх API API від Python, включаючи нативний інструментарій користувальницького інтерфейсу ( наприклад, чистий Python-активність ).

Це комерційний продукт, але він безкоштовний для використання з відкритим кодом і завжди залишатиметься таким.

(Я творець цього продукту.)



20

Ось кілька інструментів, перелічених на офіційному веб-сайті python


У playstore є додаток під назвою QPython3, який можна використовувати як для редагування, так і для запуску сценарію python.

Посилання Playstore


Ще одне додаток під назвою Termux, в якому ви можете встановити python за допомогою команди

pkg install python

Посилання Playstore


Якщо ви хочете розробити додатки, існує Python Android Scripting Layer ( SL4A ) .

The Scripting Layer for Android, SL4A, is an open source application that allows programs written in a range of interpreted languages to run on Android. It also provides a high level API that allows these programs to interact with the Android device, making it easy to do stuff like accessing sensor data, sending an SMS, rendering user interfaces and so on.


Ви також можете перевірити PySide для Android , що насправді є зв'язками Python для Qt 4.


Існує платформа під назвою PyMob, де програми можна записати чисто в Python, а потік інструментів компілятора (PyMob) перетворює їх у вихідні вихідні коди для різних платформ.


Також перевірте python-for-android

python-for-android is an open source build tool to let you package Python code into standalone android APKs. These can be passed around, installed, or uploaded to marketplaces such as the Play Store just like any other Android app. This tool was originally developed for the Kivy cross-platform graphical framework, but now supports multiple bootstraps and can be easily extended to package other types of Python apps for Android.


Спробуйте Chaquopy A Python SDK для Android


Ендд ... Бджола

BeeWare allows you to write your app in Python and release it on multiple platforms. No need to rewrite the app in multiple programming languages. It means no issues with build tools, environments, compatibility, etc.


2
за допомогою Termux ви можете встановити python 2, а також $ apt встановити python2
M.Hefny

16

Ви можете запустити свій код Python, використовуючи sl4a . sl4a підтримує сценарії Python, Perl , JRuby , Lua , BeanShell, JavaScript, Tcl та оболонки.

Ви можете дізнатися приклади Python sl4a .


13

Ви можете використовувати QPython :

Він має консоль Python, редактор, а також управління пакунками / установниками

http://qpython.com/

Це проект з відкритим кодом з реалізаціями як Python 2, так і Python 3. Ви можете завантажити вихідний і .apk файли для Android безпосередньо з github.

QPython 2: https://github.com/qpython-android/qpython/releases

QPython 3: https://github.com/qpython-android/qpython3/releases


12

Ще один варіант, якщо ви шукаєте 3.4.2 або 3.5.1, це цей архів на GitHub.

Python3-Android 3.4.2 або Python3-Android 3.5.1

В даний час він підтримує Python 3.4.2 або 3.5.1 та 10d версію NDK. Він також може підтримувати 3.3 та 9c, 11c та 12

Приємно, що ви просто завантажуєте його, запускаєте make і отримуєте .so або .a

В даний час я використовую це для запуску сирого Python на Android-пристроях. За допомогою декількох модифікацій файлів збірки ви також можете зробити x86 та Armeabi 64 біт


11

Ви не бачили цього тут, але це можна зробити за допомогою Pyside та Qt тепер, коли Qt працює на Android завдяки Necessitas.

На сьогодні це схоже на безладдя, але зрештою це може бути життєздатним маршрутом ...

http://qt-project.org/wiki/PySide_for_Android_guide


9

Ще одним варіантом, здається, є pyqtdeploy, який посилається на документи:

інструмент, який у поєднанні з іншими інструментами, що надаються з Qt, дозволяє розгортати програми PyQt4 та PyQt5, написані з Python v2.7 або Python v3.3 або новіших версій. Він підтримує розгортання на настільних платформах (Linux, Windows та OS X) та на мобільних платформах (iOS та Android).

Згідно з розгортанням програми PyQt5 на Android через pyqtdeploy та Qt5, він активно розробляється, хоча важко знайти приклади працюючих додатків Android або підручника про те, як перехресно скласти всі необхідні бібліотеки на Android. Це цікавий проект, про який потрібно пам’ятати!


6

Погляньте на BeeWare . На даний момент відповіді на це питання він ще знаходиться на початку розвитку. Його мета полягає в тому, щоб мати можливість створювати вбудовані програми з Python для всіх підтримуваних операційних систем, включаючи Android.


У чому різниця від Ківі? Це стабільний портативний пітон Gui на базі
Carsten Thielepape

5

Перевірте enaml-native, який бере концепцію нативної реакції та застосовує її до python.

Він дозволяє користувачам створювати додатки з вбудованими віджетами Android і надає API для використання андроїд і java-бібліотеки з python.

Він також інтегрується з android-studio і ділиться кількома приємними розробниками, такими як перезавантаження коду та віддалена налагодження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.