ASE: un gran desconocido.
Android Scripting Environment (ASE) es un lenguaje de guiones (scripts) que puede ser directamente interpretado en un móvil Android. No deben confundirse los scripts y los apk (Android PacKage) simplemente porque un guión no sustituye un programa pero sí es cierto que resulta muy útil para crear utilidades y pequeñas aplicaciones.
El entorno ASE permite la creación y ejecución de código utilizando varios lenguajes interpretados entre los cuales todavía falta Javascript (aunque la versión r14 lo soporta vía Rhino) pero ya están disponibles los siguientes: (entre paréntesis las actuales versiones)
- Python (2.6.2)
- Perl (5.10.0)
- Rhino (1.7R2)
- JRuby (1.2.0RC1)
- Lua (5.1.4)
- BeanShell (2.0b4)
- shell
ASE es potente porque puede acceder a varias APIs como hacen las aplicaciones convencionales para:
- Manejar “intents”.
- Iniciar “activities”.
- Realizar llamadas telefónicas.
- Enviar mensajes de texto.
- Escanear códigos de barras.
- Obtener ubicaciones y datos de sensores.
- Utilizar el sintetizador de voz (text-to-speech).
- etc.
Procedimiento básico:
- Descargar ASE (actualmente: r14)
- Ejecutar ASE y descargar el intérprete que necesitemos (o todos los disponibles).
- Introducir el script.
- Ejecutar el script.
Descarga: ASE (r14)
Descarga la aplicación directamente a tu Android.
Para la lectura de este Código QR te recomendamos:
Barcode Scanner
Saltándome todas las reglas del buen programador creo que lo mejor será empezar directamente con un ejemplo de iniciación que encima sea práctico o sea que, si os parece, vamos al grano.
Ejemplo práctico: “Autosilenciador”
Utilidad: silenciar el móvil girándolo con la pantalla hacia abajo (y viceversa).
Intérprete: Lua.
- Abrimos: ASE.
- Pulsamos la tecla “menu”.
- Pulsamos “Add” para añadir intérpretes.
- Elegimos “Lua” (actualmente: 5.1.4)
- Introducimos el código siguiente:
-- autosilenciador.lua
-- autor: michel para AndroidApps
-- Modo silencio: poner la pantalla hacia abajo (vibra durante 150ms)
-- Modo normal: poner la pantalla hacia arriba (avisa vocalmente)
require "android"
android.startSensing()
android.sleep(1)
silent = false
while true do
s = android.readSensors()
haciabajo = s.result and s.result.zforce and s.result.zforce < -5
if haciabajo and not silent then
android.vibrate(150)
android.setRingerSilent(true)
silent = true
elseif not haciabajo and silent then
android.speak("Modo normal activado!")
android.setRingerSilent(false)
silent = false
end
android.sleep(1)
end
Notas: las 4 primeras líneas son comentarios y pueden ser eliminadas pero el archivo debe grabarse con extensión “.lua” para que el intérprete lo reconozca. Por otra parte aclarar que el sintetizador de voz (TTS), con la r14 de ASE, solo funcionará a partir de Donut. - Los que prefieran teclearlo pueden saltarse este paso y los que no quieran teclearlo pueden escanearlo a continuación:
El código QR debe ser escaneado desde ASE. Para ello basta pulsar la tecla “menu”, luego “Add” y seleccionar “Scan Barcode” (escáner de códigos de barra). ASE lo escaneará y lo integrará en su lista de scripts con el nombre: “- – autosilenciador.lua” pero, antes de ejecutarlo, hay que eliminar los dos guiones iniciales renombrándolo como: autosilenciador.lua.
- Desde ASE seleccionar “autosilenciador.lua” de la lista de scripts que se crea en el propio entorno. Al pulsar el cursor de bola se ejecutará el script y aparecerá un terminal con la secuencia mostrada a continuación.
- Ya podemos probarlo… Le damos la vuelta al terminal (con la pantalla hacia abajo) y el móvil vibrará brevemente para indicarnos que está en modo silencio (al mismo tiempo el icono del altavoz tachado hará su aparición en la barra de estado). Volvemos a darle la vuelta, el sintetizador de voz nos dirá “Modo normal activado!” y el icono mencionado desaparecerá. Si coincide con una llamada entrante también sonará el tono asignado. Podemos voltear la pantalla en todo momento conmutando alternativamente de modo (silencio / tono). Si queremos dejar el script trabajando (en background) basta con pulsar “home” y usar el móvil normalmente aunque es cierto que, según lo que se haga, el script puede morir sin preaviso (algo que abría que estudiar para darle un uso realmente pragmático). Si queremos detener el script manualmente basta con pulsar la tecla “atrás” desde ASE y la tarea “morirá” instantáneamente.
Para saber más (en inglés): android-scripting, presentación oficial.
Espero que esta introducción os motive para seguir creando códigos útiles y los compartais a través de este blog.









Vaya, gran descubrimiento michel, puede ser muy muy útil (eso si, para usuarios de android con conocimientos de programación), aunque he visto que no hay mucha documentación sobre la API de Lua ni de Phyton… de todas formas voy a probarlo, y a hacer algun scriptillo a ver que tal! Gracias!
@Mithlain: estoy de acuerdo que la documentación no abunda sobre todo si la buscamos en español pero para tener una idea global yo empezaría por la ayuda del API del propio ASE.
El codigo de ejemplo está basado en una “espera ocupada”. Es decir, en un bucle que comprueba periódicamente el estado (alternándlo con sueños). Esto gasta mucha batería (CPU). Lo bueno sería que la comprobación solo se ejecutara cuando ocurriera una interrupción (~IRQ) o un evento en el acelerómetro, que despertara al hilo.
¿No se puede hacer esto con los scripts?
PD: Muy curioso lo del entorno ASE
@Elreymon: ¡muy cierto! yo he tirado la primera piedra pero no espereis que haga todo el trabajo sucio…
Ahora en serio, si he conseguido picaros la curiosidad, he conseguido lo que pretendía. Ahora os toca currar a vosotros y yo que lo vea.
[...] (Android Script Environment) http://androidapps.es/2009/11/07/ase-un-gran-desconocido/ a few seconds ago from [...]
Hay un widget para lo de los artículos relacionados en thehouseofblogs que te podría quedar muy bien porque hay uno de los diseños con esquinas redondeadas muy parecido al de tu blog
http://thehouseofblogs.wordpress.com/2009/11/23/widget-de-articulos-recomendados-en-tu-blog/