Existe uma maneira de executar o Python no Android?

2093

Estamos trabalhando em uma versão S60 e esta plataforma possui uma ótima API Python.

No entanto, não há nada oficial sobre Python no Android, mas como o Jython existe, existe uma maneira de permitir que a cobra e o robô trabalhem juntos?

e-satis
fonte

Respostas:

1061

Uma maneira é usar o Kivy :

Biblioteca Python de código aberto para desenvolvimento rápido de aplicativos que fazem uso de interfaces de usuário inovadoras, como aplicativos multi-touch.

O Kivy é executado no Linux, Windows, OS X, Android e iOS. Você pode executar o mesmo código [python] em todas as plataformas suportadas.

Aplicativo Kivy Showcase

JohnMudd
fonte
63
Se você usar Kivy, aqui está uma ferramenta para ajudar a empacotar o seu projeto em um APK: github.com/kivy/python-for-android
gdw2
17
Estive brincando com Kivy na semana passada tentando escrever um jogo. Seus principais desenvolvedores foram muito rápidos em responder perguntas no IRC, no entanto, se você programou uma GUI antes do Kivy fará com que você diga um pouco do WTF. Alguns exemplos de coisas não documentadas que eram estranhas para mim: todos os widgets recebem todos os eventos on_touch_down, mesmo que o evento ocorra fora de sua região; nenhum widget possui um método draw (); quase tudo acontece através de um padrão de observador personalizado nas propriedades personalizadas que eles criaram ( observar estes partilham o nome com a propriedade de Python, mas não são as mesmas)
Trey Stout
7
@Rey: E as coisas não relacionadas à GUI? Existem limitações quanto ao uso dos módulos do Python? E o acesso a recursos específicos do Android, como capacidade de ler mensagens, adicionar notificações, trabalhar em segundo plano, tirar uma foto, ler a lista de contatos, determinar a localização do GPS etc.?
Tadeck 24/03
7
E agora também há suporte para iOS!
Rubik
16
Agora, quase um ano depois, o suporte é melhor? Houve alguma melhoria notável?
TankorSmash
347

Há também o novo projeto Android Scripting Environment (ASE / SL4A). Parece incrível e tem alguma integração com componentes nativos do Android.

Nota: não está mais em "desenvolvimento ativo", mas alguns garfos podem estar.

Aversão ao calor
fonte
70
É verdade, mas eles têm que ter ASE instalado, não é uma solução que permite que você escrever um aplicativo Android em python sem nada já instalado (usuário normal vai ser tudo "wtf é essa coisa ASE?)
Stuart Axon
20
Além disso, o ASE é um ambiente restrito; você não pode escrever aplicativos Android completos, mesmo que o ASE esteja pré-instalado. Veja stackoverflow.com/questions/2076381
Sridhar Ratnakumar
10
Eu acho que foi renomeado para SL4A.
Vanuan
9
Você pode escrever aplicativos, empacotá-los e até vendê-los na Play Store, se quiser, com o SL4A agora. Ele veio bem desde que os comentários acima foram postados. Se você deseja Python no Android, o PY4A, que roda no SL4A, é provavelmente a melhor escolha.
Carl Smith
2
I confirmé, SL4A permite agora a escrever pacotes de aplicação prontos para usar, eu tentei com perl ele funciona
ubugnu
216

Sim! : Ambiente de script do Android

Um exemplo via Matt Cutts via SL4A - "aqui está um scanner de código de barras escrito em seis linhas de código 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)
desmontado
fonte
46
s / SIM / meh. talvez / ... seja extremamente limitado. qualquer coisa gráfica ou multi touch? um grande NÃO.
Gcb 23/10/10
2
@gcb, você não pode usar o conjunto normal de widgets para Android, mas pode usar "webviews" (que é o que o aplicativo nativo do Gmail usa, por exemplo).
gdw2
28
jogador de golfe: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']))
Alex L
12
@ gdw2, certamente o aplicativo nativo do Gmail usa apenas o WebViews para analisar e-mails, não para a interface do usuário real. Isso torna a comparação um pouco absurda.
Veselin Romić
88

Subconjunto Pygame para Android

Pygame é um mecanismo de jogo 2D para Python (na área de trabalho) que é popular entre os novos programadores. O Subconjunto Pygame para Android descreve-se como ...

... uma porta de um subconjunto da funcionalidade Pygame para a plataforma Android. O objetivo do projeto é permitir a criação de jogos específicos para Android e facilitar a transferência de jogos de plataformas semelhantes a PC para Android.

Os exemplos incluem um jogo completo empacotado como um APK, o que é bastante interessante.

muriloq
fonte
4
Vários aspectos foram quebrados no meu Droid X (botões ou tela sensível ao toque, não me lembro), então eu não cheguei muito longe nessa rota.
Gdw2 #
78

Compilação Cruzada & Ignifuga

Meu blog tem instruções e um patch para compilar o Python 2.7.2 para Android.

Também abri o Ignifuga de código aberto , meu 2D Game Engine. É baseado em Python / SDL e cruza compilações para Android. Mesmo se você não usá-lo para jogos, poderá obter idéias úteis do utilitário de código ou construtor (chamado Schafer , depois de Tim ... você sabe quem).

gabomdq
fonte
4
Impressionante. +1 para isso. Não aceito porque você não pode escrever nada para o público com isso.
e-satis
1
Se você quer dizer que não pode usar aplicativos gráficos com ele, certamente pode, obviamente, precisar de mais trabalho. Na verdade, eu uso essa porta combinada com o SDL 1.3, não é trivial passar do interpretador python para um aplicativo interativo, mas isso pode ser feito.
gabomdq
77

Camada de script para Android

SL4A faz o que você quer. Você pode instalá-lo facilmente diretamente no dispositivo a partir do site deles e não precisa de raiz.

Ele suporta vários idiomas. Python é o mais maduro. Por padrão, ele usa Python 2.6, mas há uma porta 3.2 você pode usar. Eu usei essa porta para todos os tipos de coisas em um Galaxy S2 e funcionou bem.

API

O SL4A fornece uma porta de sua androidbiblioteca para cada idioma suportado. A biblioteca fornece uma interface para a API Android subjacente por meio de um único Androidobjeto.

from android import Android

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

Cada idioma possui praticamente a mesma API. Você pode até usar a API JavaScript dentro de visualizações da web.

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

Interfaces do usuário

Para interfaces de usuário, você tem três opções:

  • Você pode usar facilmente os diálogos e menus genéricos nativos por meio da API. Isso é bom para diálogos de confirmação e outras entradas básicas do usuário.
  • Você também pode abrir uma visualização da Web a partir de um script Python e usar HTML5 para a interface do usuário. Quando você usa visualizações da Web do Python, pode passar mensagens entre a visualização da web e o processo do Python que a gerou. A interface do usuário não será nativa, mas ainda é uma boa opção.
  • algum suporte para interfaces de usuário nativas do Android, mas não tenho certeza de como funciona. Eu apenas nunca o usei.

Você pode misturar opções, para ter uma visualização na web da interface principal e ainda usar diálogos nativos.

QPython

Há um projeto de terceiros chamado QPython . Ele se baseia no SL4A e lança outras coisas úteis.

O QPython oferece uma interface do usuário mais agradável para gerenciar sua instalação e inclui um pequeno editor de código da tela de toque, um shell Python e um shell PIP para gerenciamento de pacotes. Eles também têm uma porta Python 3. Ambas as versões estão disponíveis na Play Store, gratuitamente. O QPython também agrupa bibliotecas de um monte de Python em projetos Android, incluindo o Kivy, portanto não é apenas o SL4A.

Observe que o QPython ainda desenvolve sua bifurcação do SL4A (no entanto, não há muito para ser honesto). O principal projeto SL4A em si está praticamente morto.

Links Úteis

Carl Smith
fonte
1
Você pode usar algum desses para executar scripts python a partir do terminal ou do tasker? Não consigo encontrar uma maneira :(
Pitto
1
Você pode iniciar um script SL4A a partir do Tasker. Existem alguns exemplos nesta página que têm trechos do Python sendo lançados do Tasker. É realmente uma questão totalmente diferente.
Carl Smith
77

Como amante de Python e programador do Android, lamento dizer que esse não é um bom caminho a percorrer. Existem dois problemas:

Um problema é que há muito mais do que apenas uma linguagem de programação nas ferramentas de desenvolvimento do Android. Muitos gráficos do Android envolvem arquivos XML para configurar a exibição, semelhante ao HTML. Os objetos Java integrados são integrados a esse layout XML, e é muito mais fácil do que escrever seu código para passar da lógica para o bitmap.

O outro problema é que o G1 (e provavelmente outros dispositivos Android em um futuro próximo) não é tão rápido. Os processadores de 200 MHz e a RAM são muito limitados. Mesmo em Java, você precisa reescrever para evitar mais criação de objetos se quiser tornar seu aplicativo perfeitamente tranquilo. O Python ficará muito lento por um tempo ainda em dispositivos móveis.

laca
fonte
48
Não há uma única palavra java em um telefone Android, ela é compilada para codificar em bytes durante o processo de empacotamento. Velocidade não é o problema: o Google pode fornecer ferramentas que produzam o código de bytes correto a partir de um código python (como o Jython). Aliás, Dalvik não é a Java VM, portanto, não se trata de Java VS Python.
e-satis
6
O bytecode JAVA ainda precisa ser processado por uma JVM, e a linguagem Java requer um coletor de lixo de qualquer maneira. A velocidade real só pode vir do C ++.
LtWorf
19
@Touzen 2 anos mais tarde, estamos executando o processador Intel Atom ou processadores octa-core agora. ;)
Rohan Kandwal
2
Devido à diferença de poder que eles conseguem, os telefones sempre serão uma ordem de magnitude mais lenta que os computadores de mesa. No entanto, não desista do Python para o dispositivo móvel, porque normalmente apenas uma fração do código é responsável pelo trabalho intensivo do processador, e essa fração pode ser otimizada reescrevendo-o em outro idioma.
Evgeni Sergeev
2
A propósito, o Google empurra o Kotlin atualmente - que é uma linguagem bastante desconhecida para a maioria dos usuários - é claro que é possível suportar outras linguagens além do Java (eu sou desenvolvedor de Java e fã de Python). Então, acho que a resposta é mais política do que prática.
1128 Alex
49

Kivy

Eu queria acrescentar o que @JohnMudd escreveu sobre Kivy. Faz anos desde a situação que ele descreveu, e Kivy evoluiu substancialmente.

O maior ponto de venda do Kivy, na minha opinião, é a compatibilidade entre plataformas. Você pode codificar e testar tudo usando qualquer ambiente de área de trabalho (Windows / * nix etc.) e empacotar seu aplicativo para uma variedade de plataformas diferentes, incluindo Android, iOS, MacOS e Windows (embora os aplicativos geralmente não tenham a aparência e a aparência nativas).

Com a própria linguagem KV do Kivy , você pode codificar e criar a interface da GUI facilmente (é como Java XML, mas em vez do TextView etc., o KV possui sua própria ui.widgetstradução semelhante), o que, na minha opinião, é bastante fácil de adotar.

Atualmente, o Buildozer e o python-for-android são as ferramentas mais recomendadas para criar e empacotar seus aplicativos. Eu tentei os dois e posso afirmar com firmeza que eles facilitam a criação de aplicativos Android com Python. Seus guias também estão bem documentados.

O iOS é outro grande ponto de venda do Kivy. Você pode usar a mesma base de código com poucas alterações necessárias através das ferramentas Homebrew do kivy-ios , embora o Xcode seja necessário para a compilação, antes de executar em seus dispositivos (o AFAIK, o iOS Simulator no Xcode atualmente não funciona na compilação da arquitetura x86) . Existem também alguns problemas de dependência que devem ser compilados manualmente e manipulados no Xcode para que a compilação seja bem-sucedida, mas eles não seriam muito difíceis de resolver e as pessoas no Kivy Google Group também são realmente úteis.

Com tudo isso dito, os usuários com bom conhecimento de Python não devem ter problemas para entender o básico rapidamente.

Se você estiver usando o Kivy para projetos mais sérios, poderá achar os módulos existentes insatisfatórios. Existem algumas soluções viáveis. Com o pyjnius (em andamento) para Android e pyobjus , os usuários agora podem acessar as classes Java / Objective-C para controlar algumas das APIs nativas.

Anzel
fonte
Acabei de baixar o Kivy do seu site. Mostra suporte para Python 3.4 de 32 e 64 bits e uma demonstração do funcionamento da entrada por toque.
codereview
1
@codeReview, eu tenho usado o Kivy apenas com Python2 e não tenho experiência com Python3, tudo está funcionando perfeitamente?
Anzel
Espero que em breve você saiba. Mas não tenho experiência com Python fora dos arquivos .py do shell de comando do CPython 3.4 para solucionar rapidamente problemas de computação ou algoritmos. Este será o meu primeiro aplicativo com uma GUI. Eu precisaria ler mais documentação, entender a linguagem Kivy e seguir cuidadosamente as etapas de instalação, para saber como instalar o Kivi no meu IDE Python preferido e empacotar o APK para o Android. O processo é de várias etapas, portanto, pode não ser incrivelmente rápido quando posso dizer.
codereview
1
@codeReview, boa sorte para sua jornada. Se este é seu primeiro aplicativo, recomendo usar .kv como arquivo de layout. É como um arquivo yaml ou simplesmente uma árvore para definir os widgets de layout. Se o seu aplicativo for de várias telas / layouts, use ScreenManagerisso para economizar muito tempo. Também um conselho é ler a lista de discussão, um grupo de pessoas conhecedoras dispostas a ajudá-lo.
Anzel
1
Também no @codeReview, em vez de aprender com o aplicativo de demonstração do Kivy, você pode obter mais informações pesquisando alguns aplicativos do kivy existentes e ver como as pessoas gerenciam os "widgets" e as chamadas de retorno em um cenário do mundo real. Kivy não é difícil de aprender em tudo, eu vou dizer muito mais fácil em termos de curva de aprendizagem do que dizer, em Java + Android ou objetivo-C + iOS
Anzel
40

Termux

Você pode usar o aplicativo Termux , que fornece um ambiente POSIX para Android, para instalar o Python.

Observe que apt install pythono Python3 será instalado no Termux. Para Python2, você precisa usar apt install python2.

Adrian Stanculescu
fonte
5
+1 para Termux. Ambiente absolutamente maravilhoso para trabalhar. Ótima seleção de pacotes nos repositórios, atalhos úteis de botões de volume. É a coisa mais próxima do Debian em um telefone que eu já encontrei.
James
39

Não no momento e você teria a sorte de conseguir que o Jython funcionasse em breve. Se você está planejando iniciar seu desenvolvimento agora, seria melhor seguir o Java por agora.

Ilya Kochetov
fonte
39

Usando o SL4A (que já foi mencionado por si só em outras respostas), você pode executar uma instância web2py completa (outras estruturas da web python também são provavelmente candidatas). O SL4A não permite que você faça componentes nativos da interface do usuário (botões, barras de rolagem e similares), mas suporta WebViews . Um WebView nada mais é do que um navegador listrado apontado para um endereço fixo. Acredito que o aplicativo nativo do Gmail use um WebView em vez de seguir a rota normal do widget.

Esta rota teria algumas características interessantes:

  • No caso da maioria das estruturas da web python, você pode realmente desenvolver e testar sem usar um dispositivo ou emulador Android.
  • Qualquer código Python que você escrever para o telefone também pode ser colocado em um servidor público com muito pouca (se houver) modificação.
  • Você pode tirar proveito de todas as coisas loucas da web disponíveis: consulta, HTML5, CSS3 etc.
gdw2
fonte
2
Cherrypy funciona bem, com suporte a ws4py websocket. A garrafa também é boa no SL4A.
Carl Smith
33

QPython

Eu uso o aplicativo QPython . É gratuito e inclui um editor de código, um intérprete interativo e um gerenciador de pacotes, permitindo criar e executar programas Python diretamente no seu dispositivo.

kyle k
fonte
2
Agora, o qpython adicionou o suporte ao Django! É tudo o que eu preciso! Surpreendente!
swdev
27

No site Python para Android :

Python para android é um projeto para criar sua própria distribuição Python, incluindo os módulos que você deseja, e criar um apk incluindo python, libs e seu aplicativo.

gdw2
fonte
1
@ e-satis: Obrigado pelo seu comentário. Não vejo qual resposta estou duplicando. Só posso supor que você acha que o PFA é o mesmo que Kivy. Embora esteja hospedado no projeto Kivy, você nem precisa usar o Kivy para usar o PFA.
Gdw2
Verifique a resposta excluída do @ tito no ponto inferior do PFA. Além disso, há pouco interesse em executar o PFA sem o kivy, pois é o único kit de ferramentas que você possui.
e-satis
Não é porque atualmente o kivy é o único kit de ferramentas disponível (algumas pessoas estão trabalhando para integrar outras) que é uma duplicata. Por favor, considere as outras opções como ele, e não mesclar tudo em um post: |
tito
21

Chaquopy

Chaquopy é um plug-in para o sistema de compilação baseado no Gradle do Android Studio. Ele se concentra na estreita integração com as ferramentas de desenvolvimento padrão do Android.

  • Ele fornece APIs completas para chamar Java do Python ou Python do Java , permitindo que o desenvolvedor use a linguagem que for melhor para cada componente do aplicativo.

  • Ele pode baixar automaticamente pacotes PyPI e construí-los em um aplicativo, incluindo pacotes nativos selecionados, como o NumPy.

  • Ele permite acesso total a todas as APIs do Android a partir do Python, incluindo o kit de ferramentas da interface do usuário nativo ( exemplo de atividade pura em Python ).

Este é um produto comercial, mas é gratuito para uso em código aberto e sempre permanecerá assim.

(Eu sou o criador deste produto.)

mhsmith
fonte
20

Aqui estão algumas ferramentas listadas no site oficial do python


Existe um aplicativo chamado QPython3 no playstore que pode ser usado para editar e executar scripts python.

Link Playstore


Outro aplicativo chamado Termux, no qual você pode instalar o python usando o comando

pkg install python

Link da Playstore


Se você deseja desenvolver aplicativos, existe o 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.


Você também pode verificar o PySide para Android , que é na verdade ligações do Python para o Qt 4.


Existe uma plataforma chamada PyMob, na qual os aplicativos podem ser escritos exclusivamente em Python e o fluxo de ferramentas do compilador (PyMob) os converte em códigos-fonte nativos para várias plataformas.


Verifique também 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.


Experimente o Chaquopy A Python SDK para Android


Anddd ... BeeWare

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.

pz64_
fonte
2
usando Termux você pode instalar python 2, bem $ apt python2 instalar
M.Hefny
12

Outra opção, se você estiver procurando pelo 3.4.2 ou 3.5.1, é este arquivo no GitHub.

Python3-Android 3.4.2 ou Python3-Android 3.5.1

Atualmente, ele suporta Python 3.4.2 ou 3.5.1 e a versão 10d do NDK. Também pode suportar 3.3 e 9c, 11c e 12

É legal que você simplesmente faça o download, execute make e obtenha o .so ou o .a

Atualmente, uso isso para executar o Python bruto em dispositivos Android. Com algumas modificações nos arquivos de construção, você também pode criar x86 e armeabi de 64 bits

Enviado do GR
fonte
11

Não vi isso postado aqui, mas você pode fazê-lo com Pyside e Qt agora que o Qt funciona no Android, graças ao Necessitas.

Parece uma briga no momento, mas poderia ser uma rota viável eventualmente ...

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

radix07
fonte
9

Mais uma opção parece ser pyqtdeploy, que cita os documentos:

uma ferramenta que, em conjunto com outras ferramentas fornecidas com o Qt, permite a implantação de aplicativos PyQt4 e PyQt5 criados com o Python v2.7 ou Python v3.3 ou posterior. Ele suporta a implantação em plataformas de desktop (Linux, Windows e OS X) e em plataformas móveis (iOS e Android).

De acordo com a implantação do aplicativo PyQt5 no Android via pyqtdeploy e Qt5, ele é desenvolvido ativamente, embora seja difícil encontrar exemplos de aplicativos Android em funcionamento ou um tutorial sobre como compilar todas as bibliotecas necessárias no Android. É um projeto interessante a ter em mente!

Andrzej Pronobis
fonte
6

Dê uma olhada no BeeWare . No momento de responder a essa pergunta, ela ainda está em desenvolvimento inicial. Seu objetivo é ser capaz de criar aplicativos nativos com Python para todos os sistemas operacionais suportados, incluindo Android.

DrawT
fonte
Qual é a diferença para Kivy? É python portátil estável baseado em Gui
Carsten Thielepape 16/02
5

Confira enaml-native, que pega o conceito react-native e o aplica ao python.

Ele permite que os usuários criem aplicativos com widgets nativos do Android e fornece APIs para usar bibliotecas android e java a partir de python.

Ele também se integra ao android-studio e compartilha alguns dos agradáveis ​​recursos de desenvolvimento do Rea, como recarga de código e depuração remota.

frmdstryr
fonte