Cómo generar un APK Android con Python, Kivy y Buildozer

Publicado el: 12/07/2026
Tempo de leitura: 6 minutos
Gerando aplicativo APK Android com Python

Crear una aplicación Android con Python es posible mediante frameworks como Kivy y herramientas de empaquetado como Buildozer y python-for-android. El resultado puede ser un archivo APK instalable para pruebas. El proceso es más complejo que convertir un script en EXE porque Android exige una estructura de aplicación, permisos, SDK, NDK, firma y recursos específicos.

Antes de comenzar, revisa la guía de entornos virtuales, el tutorial para instalar paquetes con pip, el artículo de pathlib, la guía de manejo de excepciones y la versión inglesa de generación de APK con Python.

Las fuentes externas principales son la documentación oficial de Kivy para Android y la documentación oficial de Buildozer.

Entender las herramientas

Kivy crea la interfaz y administra eventos. python-for-android reúne Python, bibliotecas y componentes Android. Buildozer simplifica la configuración mediante un archivo buildozer.spec y ejecuta el proceso de compilación.

Buildozer se utiliza normalmente en Linux. En Windows puedes trabajar mediante WSL2 o una máquina virtual Linux. La compilación directa desde Windows no sigue el flujo estándar recomendado.

Crear un entorno de desarrollo

mkdir mi_app_android
cd mi_app_android
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install kivy buildozer

Las dependencias del sistema varían según la distribución y la versión de las herramientas. Sigue la documentación oficial y no copies comandos antiguos sin revisar.

Crear una aplicación Kivy mínima

Guarda este contenido como main.py:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label


class Interfaz(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(orientation="vertical", padding=20, spacing=10, **kwargs)

        self.etiqueta = Label(text="Hola desde Python")
        self.boton = Button(text="Presionar")
        self.boton.bind(on_press=self.cambiar_texto)

        self.add_widget(self.etiqueta)
        self.add_widget(self.boton)

    def cambiar_texto(self, instancia):
        self.etiqueta.text = "La aplicación funciona"


class MiAplicacion(App):
    def build(self):
        return Interfaz()


if __name__ == "__main__":
    MiAplicacion().run()

Ejecuta en el escritorio antes de compilar:

python main.py

Inicializar Buildozer

buildozer init

El comando crea buildozer.spec. Este archivo define nombre, paquete, versión, orientación, requisitos, permisos y recursos.

Configurar nombre y dominio

title = Mi Aplicacion
package.name = miapp
package.domain = com.ejemplo

El identificador final será similar a com.ejemplo.miapp. Utiliza letras minúsculas y un dominio que controles para proyectos publicados.

Definir la versión

version = 1.0.0

Cada actualización publicada necesita una versión coherente y un código de versión creciente según el proceso de distribución.

Configurar requisitos

requirements = python3,kivy

Añade únicamente las bibliotecas utilizadas. No todos los paquetes de PyPI funcionan automáticamente en Android, especialmente los que contienen extensiones nativas sin receta compatible.

Seleccionar extensiones de archivos

source.include_exts = py,png,jpg,kv,json

Incluye los recursos utilizados y evita copiar archivos de desarrollo, secretos o bases de datos privadas.

Definir orientación

orientation = portrait

También puedes permitir varias orientaciones, pero la interfaz debe adaptarse a diferentes tamaños y densidades.

Crear un icono

icon.filename = %(source.dir)s/assets/icon.png

Utiliza una imagen cuadrada de buena calidad y comprueba cómo se adapta al recorte de los launchers. Android moderno puede utilizar iconos adaptativos mediante configuraciones adicionales.

Añadir una pantalla de inicio

presplash.filename = %(source.dir)s/assets/presplash.png

Mantén la imagen ligera para no aumentar el tiempo de inicio.

Compilar un APK de depuración

buildozer -v android debug

La primera compilación puede descargar SDK, NDK y otras herramientas, por lo que tarda más y necesita espacio en disco. El APK suele aparecer en la carpeta bin.

Instalar y ejecutar en un dispositivo

Activa las opciones de desarrollador y la depuración USB únicamente en un dispositivo de pruebas. Conecta el móvil y ejecuta:

buildozer android deploy run

Para ver logs:

buildozer android logcat

Desactiva la depuración USB cuando no sea necesaria.

Probar con adb

adb devices
adb install -r bin/miapp-debug.apk

Acepta la autorización en el dispositivo y verifica que el equipo sea confiable.

Permisos de Android

Declara solo los permisos necesarios:

android.permissions = INTERNET

No solicites almacenamiento, ubicación, cámara o micrófono si la función no los necesita. Además de declararlos, algunos permisos requieren solicitud durante la ejecución.

Acceder a Internet

Una solicitud HTTP debe realizarse sin bloquear la interfaz. Utiliza herramientas asíncronas o ejecuta la tarea fuera del hilo principal y muestra estados de carga. Define timeout y maneja errores de conexión.

Almacenamiento de archivos

Android restringe rutas y acceso al almacenamiento. Guarda datos internos en el directorio proporcionado por la aplicación:

from pathlib import Path
from kivy.app import App

ruta = Path(App.get_running_app().user_data_dir)
ruta.mkdir(parents=True, exist_ok=True)
archivo = ruta / "config.json"

No escribas en el directorio temporal del paquete.

Separar la interfaz con lenguaje KV

Crea miaplicacion.kv:

<Interfaz>:
    orientation: "vertical"
    padding: "20dp"
    spacing: "10dp"

    Label:
        id: etiqueta
        text: "Hola desde Kivy"

    Button:
        text: "Cambiar"
        on_release: etiqueta.text = "Botón presionado"

Incluye la extensión kv en source.include_exts.

Usar unidades dp y sp

Las pantallas Android tienen densidades distintas. Utiliza dp para dimensiones y sp para texto en lugar de píxeles rígidos.

Evitar bloquear la interfaz

El bucle de eventos debe permanecer libre. Una operación larga congela la pantalla. Utiliza Clock.schedule_once, threads para I/O o procesos compatibles, y vuelve al hilo principal para modificar widgets.

Depurar errores de compilación

Lee el primer error relevante, no solo la última línea. Los fallos comunes incluyen dependencias del sistema ausentes, versión incompatible de Java, falta de espacio, recetas no disponibles y nombres de paquetes inválidos.

buildozer android clean
buildozer -v android debug

Limpiar obliga a recompilar y puede tardar. Hazlo cuando cambien componentes importantes o el caché esté dañado.

Reducir el tamaño

El APK incluye Python y bibliotecas, por lo que será mayor que una aplicación nativa mínima. Elimina dependencias no usadas, recursos duplicados y archivos de desarrollo. No comprimas agresivamente sin probar el inicio.

Arquitecturas

Configura las arquitecturas compatibles según el público y los requisitos de la tienda:

android.archs = arm64-v8a, armeabi-v7a

Las opciones compatibles pueden cambiar. Consulta la documentación actual de python-for-android y de la plataforma de distribución.

Firmar una versión de lanzamiento

Una compilación para distribución debe firmarse con una clave privada. Protege el keystore, su contraseña y las copias de seguridad. Perder la clave puede impedir actualizar la aplicación existente.

No guardes el keystore ni contraseñas en Git. Utiliza secretos de CI o almacenamiento seguro.

APK frente a AAB

El APK es útil para pruebas e instalación directa. Las tiendas pueden exigir Android App Bundle para publicación. Revisa las reglas actuales de la plataforma antes de preparar una versión final.

Probar en varios dispositivos

Verifica distintas resoluciones, versiones de Android, orientaciones, permisos, modo sin conexión y reanudación después de minimizar. Un emulador ayuda, pero no sustituye un dispositivo real.

No incluir secretos

Cualquier token incluido en el APK puede extraerse. Las credenciales sensibles deben permanecer en un servidor seguro. La aplicación puede autenticarse y recibir permisos limitados.

Automatizar compilaciones

Puedes utilizar CI con una imagen Linux preparada, pero fija versiones, protege claves y conserva artefactos con hashes. Una compilación reproducible facilita investigar errores y publicar actualizaciones.

Errores frecuentes

Los problemas más habituales son intentar compilar directamente desde Windows sin entorno Linux, añadir paquetes incompatibles, solicitar permisos innecesarios, bloquear la interfaz, escribir en rutas prohibidas y perder la clave de firma. También es frecuente pensar que cualquier script de terminal se convierte automáticamente en una aplicación móvil.

Conclusión

Crear un APK con Python requiere construir una interfaz Kivy, configurar Buildozer y compilar en un entorno Linux compatible. Empieza con una aplicación mínima, añade dependencias gradualmente y prueba en un dispositivo. Cuida permisos, almacenamiento, rendimiento y firma. Con un archivo SPEC bien configurado y pruebas repetibles puedes transformar un proyecto Python en una aplicación Android funcional.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Geração e edição de planilhas Excel usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear y editar archivos Excel con Python

    Crea y edita Excel con Pandas y openpyxl: hojas, fórmulas, estilos, filtros, validación, gráficos, rutas seguras y manejo de archivos

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Web scraper de notícias em Python com envio para Telegram
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un scraper de noticias y enviarlas a Telegram con Python

    Crea un scraper de noticias con Requests y Beautiful Soup, elimina duplicados y envía titulares a Telegram de forma segura

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Logos do Python e Excel lado a lado representando a importação de dados do Excel para Python.
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo importar datos de Excel en Python con Pandas

    Importa Excel con Pandas y openpyxl: selecciona hojas y columnas, convierte fechas y números, valida el esquema y exporta datos

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Automação em Python para organizar arquivos do computador
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo organizar archivos del PC automáticamente con Python

    Organiza archivos del PC con Python usando pathlib y shutil, evita sobrescrituras, registra movimientos y añade modo simulación.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Compactação de arquivos ZIP usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo descomprimir archivos ZIP con Python de forma segura

    Descomprime archivos ZIP con Python de forma segura: valida rutas, evita Zip Slip, limita tamaños, verifica integridad y procesa archivos

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Python e ícone de e-mail sobre teclado de notebook
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo automatizar correos electrónicos con Python

    Automatiza correos con Python usando EmailMessage y smtplib: texto, HTML, adjuntos, TLS, variables de entorno, reintentos y prevención de duplicados.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026