Design system Compose (kotlin/functions/ui, modulo Gradle `fn.compose:ui`):
- FnTokens + FnTheme con la paleta heredada al hex de cpp/DESIGN_SYSTEM.md
(Mantine v9 dark + indigo), identica a la web @fn_library y a las apps C++.
- 26 componentes Compose (Layout/Display/Inputs/Feedback/Data/Charts) +
FnTheme + FnTokens registrados en el registry (28 entradas kind=component
lang=kt domain=ui), descubribles via fn_search. Habilitan init_kotlin_app.
Recuperacion: el commit cb6d9e6 habia anadido `kotlin/functions/ui/` al
.gitignore, por eso el design system nunca se versiono y se perdio del working
tree. Des-ignorado; el .gitignore interno del modulo ya excluye
build/.gradle/local.properties. La gallery (apps/gallery_kt) se recupero del
sub-repo Gitea y sus 27 componentes se reconstruyeron con su MainActivity como
contrato exacto.
Toolbelt Android Linux-first (antes asumia WSL2 + Windows):
- adb_wsl 1.1.0, android_emulator_start 1.1.0, android_emulator_list 1.1.0:
resuelven adb/emulator nativos del SDK ($ANDROID_HOME), .exe solo fallback WSL2.
- android_emulator_start: fix `timeout adb_run wait-for-device` (timeout no puede
ejecutar una funcion del shell; ahora invoca el binario $ADB directamente).
- install_android_sdk 1.0.1: fix licencias bajo pipefail (SIGPIPE de `yes`) +
trap EXIT con variable unbound.
- docs/capabilities/android.md regenerado Linux-first + seccion design system.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.0 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| install_android_sdk | function | bash | infra | 1.0.1 | impure | install_android_sdk() -> void | Descarga e instala Android SDK command-line tools y JDK 17 localmente (sin root/sudo) en $ANDROID_SDK_DIR (default: $HOME/android-sdk). Idempotente: detecta instalacion existente y sale sin hacer nada. Genera env.sh con JAVA_HOME, ANDROID_HOME y PATH listos para hacer source. |
|
false | error_go_core | sin salida estructurada; imprime progreso y resumen final con rutas de instalacion | false | bash/functions/infra/install_android_sdk.sh |
Ejemplo
# Instalacion en directorio por defecto ($HOME/android-sdk)
source install_android_sdk.sh
# Instalacion en directorio personalizado
ANDROID_SDK_DIR=/opt/android source install_android_sdk.sh
# Si ya esta instalado:
# Android SDK ya instalado en: /home/user/android-sdk
# Instalacion completa imprime:
# Descargando JDK 17...
# JDK 17 instalado: /home/user/android-sdk/jdk-17/jdk-17.0.x+y
# Descargando Android cmdline-tools...
# cmdline-tools instalados
# Aceptando licencias de Android SDK...
# Instalando platform-tools, platforms;android-34, build-tools;34.0.0...
#
# Android SDK instalado en: /home/user/android-sdk
# JDK 17: /home/user/android-sdk/jdk-17/jdk-17.0.x+y
# Para activar: source /home/user/android-sdk/env.sh
# Activar entorno en sesion actual
source ~/android-sdk/env.sh
Cuando usarla
Cuando necesites un Android SDK funcional en una maquina Linux sin permisos de root: CI, contenedores, o un PC de desarrollo donde quieras un SDK aislado en $HOME. Instala la base minima para compilar (cmdline-tools + JDK 17 + platform-tools + API 34 + build-tools). Hazle source para tener sdkmanager/avdmanager/adb en el PATH antes de invocar gradle_run, gradle_assemble_debug o capacitor_build_apk.
Gotchas
- No instala
emulatorni system images. Solo la base de compilacion. Para correr un AVD: tras hacersource env.sh, instalaemulatory una imagen (sdkmanager "emulator" "system-images;android-34;google_apis;x86_64") y crea el AVD conavdmanager create avd. - Aceleracion KVM: el emulador necesita acceso a
/dev/kvm. Verifica con[ -w /dev/kvm ]; si no, anade tu usuario al grupokvm(sudo usermod -aG kvm $USER+ re-login) o concede ACL. - URL de cmdline-tools clavada a la build 11076708 (2024). Si Google la retira, actualizar
tools_urlen el.sh. - Idempotente: re-ejecutar no reinstala; detecta
sdkmanagerexistente y sale en 0.
Notas
Requiere curl y unzip (disponibles en la mayoria de distros Linux). No requiere root ni sudo.
El JDK se descarga desde Adoptium (Eclipse Temurin) via su API oficial. La URL de cmdline-tools apunta a la version 11076708 (2024). Si Google actualiza la version, cambiar la URL con el nuevo numero de build.
La reorganizacion del zip es necesaria porque Google distribuye cmdline-tools con estructura cmdline-tools/bin/... pero sdkmanager espera estar en cmdline-tools/latest/bin/sdkmanager para que Android Studio y otras herramientas lo detecten correctamente.
El archivo env.sh generado en $ANDROID_SDK_DIR/env.sh contiene las variables de entorno necesarias (JAVA_HOME, ANDROID_HOME, ANDROID_SDK_ROOT, PATH) y puede hacerse source desde .bashrc, .zshrc o desde scripts de CI.
Paquetes instalados: platform-tools (adb, fastboot), platforms;android-34 (API 34), build-tools;34.0.0.
Capability growth log
- v1.0.1 (2026-06-03) — fix:
yes | sdkmanager --licensesdaba falso negativo bajopipefail(SIGPIPE deyes, exit 141) abortando una instalacion exitosa; ahora se desactivapipefailsolo en ese pipe. fix: el trapEXITreferenciaba$tmp_dir(variablelocal) fuera del scope de la funcion → "unbound variable" conset -u; ahora es global con expansion defensiva.