# 6. Utilizando Python no Android

Python no Android é diferente do Python em plataformas de desktop. Em uma plataforma desktop, o Python geralmente é instalado como um recurso do sistema que pode ser usado por qualquer usuário daquele computador. Os usuários então interagem com o Python executando um executável python e inserindo comandos em um prompt interativo ou executando um script Python.

No Android, não existe o conceito de instalação como recurso do sistema. A única unidade de distribuição de software é uma aplicação, ou “app”. Também não há console onde você possa executar um executável python ou interagir com um REPL do Python.

Como resultado, a única maneira de usar Python no Andoid é no modo incorporado – ou seja, escrevendo uma aplicação Android nativo, incorporando um interpretador Python usando `libpython` e invocando o código Python usando API de incorporação do Python. O interpretador Python completo, a biblioteca padrão e todo o seu código Python são então empacotados para sua aplicação para seu próprio uso privado.

A biblioteca padrão do Python tem algumas omissões e restrições notáveis no Andoid. Consulte o guia de disponibilidade de API para Android para obter detalhes.

## 6.1. Adicionando Python a uma aplicação Android

A maioria dos desenvolvedores de aplicações deve usar uma das seguintes ferramentas, o que proporcionará uma experiência muito mais fácil:

- Briefcase, do projeto BeeWare

- Buildozer, do projeto Kivy

- Chaquopy

- pyqtdeploy

- Termux

Se você tem certeza de que quer fazer tudo isso manualmente, continue lendo. Você pode usar a aplicação testbed como um guia; cada passo abaixo contém um link para o arquivo relevante.

- Primeiro, obtenha uma construção do Python para Android:

  - A maneira mais fácil é baixar uma versão do Android em python.org. O diretório `prefix` mencionado abaixo está no nível raiz do pacote.

  - Ou, se quiser construí-la você mesmo, siga as instruções em Android/README.md. O diretório `prefix` será criado em `cross-build/HOST`.

- Adicione código ao seu arquivo build.gradle para copiar os seguintes itens para o seu projeto. Todos, exceto seu próprio código Python, podem ser copiados de `prefix/lib`:

  - Em suas bibliotecas JNI:

    - `libpython*.*.so`

    - `lib*_python.so` (bibliotecas externas, tal como OpenSSL)

  - Em seus ativos (assets):

    - `python*.*` (a biblioteca padrão do Python)

    - `python*.*/site-packages` (seu próprio código Python)

- Adicione código ao seu aplicativo para extrair os ativos para o sistema de arquivos.

- Adicione código a sua aplicação para iniciar o Python em modo incorporado. Isso precisará ser código C chamado via JNI.

## 6.2. Construindo um pacote Python para Android

Pacotes Python podem ser criados para Android como wheels e lançados no PyPI. A ferramenta recomendada para isso é cibuildwheel, que automatiza todos os detalhes da configuração de um ambiente de compilação cruzada, da construção da wheel e dos testes em um emulador.