Notificaciones de Android a través de ADB

Estoy escribiendo un script de shell que te permite instalar un .apk en todos los teléfonos android conectados a una computadora en paralelo usando Terminal . En mi empresa hacemos pruebas en muchos dispositivos y así esto hace que la parte de instalación sea más rápida.

Pregunta: Estoy buscando una manera de identificar rápidamente qué teléfonos han tenido el .apk instalado a través de algún tipo de retroalimentación / notificación. Lo ideal sería que puedas ver qué teléfonos han recibido el .apk simplemente mirando (algún tipo de sonido o pantalla flash) o simplemente desbloqueando el dispositivo (por ejemplo, la aplicación recién instalada se ha abierto).

¿Alguna idea de cómo podría hacer cualquiera de estas cosas?

He leído sobre el lanzamiento de aplicaciones, pero parece que no es algo que se puede hacer con sólo el .apk (también se debe especificar una actividad …).

¡Cualquier idea será altamente apreciada!

¡Gracias!

Encontré mi propia solución!

Yo estaba usando:

aapt dump badging 

Pensando que esto sólo saldría el nombre del paquete. Resulta que sale mucho más de información útil. Una de las líneas que noté fue la salida es la actividad de lanzamiento de la aplicación. Pude aislar esta línea con grep y luego cortar la actividad de lanzamiento como tal:

 aapt dump badging $1 | grep launchable | cut -d "'" -f 2 

Luego hay un comando que le permite lanzar una aplicación si conoce una de sus actividades. Al agregar esta línea se inicia la actividad que se recuperó utilizando el comando anterior.

 adb -s $deviceID shell am start -a android.intent.action.MAIN -n $packageName/$launchableActivity 

Puse esta línea en mi para el lazo inmediatamente después del comando de la instalación. No después de instalar la aplicación, el script intentará iniciarla después. ¡Muy útil!

¡Gracias por toda la ayuda! :RE

Utilice el gestor de paquetes para comprobar si el APK está instalado:

 pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [FILTER] pm list packages: prints all packages, optionally only those whose package name contains the text in FILTER. Options: -f: see their associated file. -d: filter to only show disbled packages. -e: filter to only show enabled packages. -s: filter to only show system packages. -3: filter to only show third party packages. -i: see the installer for the packages. -u: also include uninstalled packages. 

por ejemplo

 $ adb shell pm list packages com.example.mypkg 

Puede utilizar el 'adb shell am start' con argumentos que necesitará buscar para iniciar su paquete recién instalado.

Si hay alguna preocupación acerca de no ser confundido por un viejo, adb desinstalar el antiguo antes de instalar el nuevo, o mejor aún tener su splash actividad mostrar el control de versiones.

En realidad, puede empezar a iniciar una actividad que no conoce el iniciador, por lo que podría utilizarla para iniciar directamente una actividad "acerca de" que mostraría la versión actual. Su elección si usted hace eso disponible en el curso ordinario de la aplicación, o lo utiliza solamente esta vez como chapoteo.

También debe ser capaz de analizar la salida del comando adb install – tendrá que ver si envía errores / éxito a stderr o stdout.

ACTUALIZACIÓN: A continuación se muestra cómo realizar una actividad que puede utilizar para activar la pantalla y mostrar un mensaje como este:

 adb shell 'am start -n com.example.testreport/.ReportActivity -e result PASS' 

El código se cribbed pesadamente de construido en AlarmClock de una versión androide temprana, requerirá:

 <uses-permission android:name="android.permission.WAKE_LOCK"/> 

En el manifiesto

 package com.example.testreport; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.PowerManager; import android.util.Log; import android.view.Gravity; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.widget.TextView; public class ReportActivity extends Activity { PowerManager.WakeLock sScreenWakeLock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(android.view.Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } protected void onStart() { super.onStart(); if (sScreenWakeLock == null) { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); sScreenWakeLock = pm.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "ReportActivity Wakelock"); sScreenWakeLock.acquire(); } TextView tv=new TextView(this); tv.setTextSize(30); tv.setGravity(Gravity.CENTER); Intent i = getIntent(); if ((i != null) && (i.hasExtra("result"))) tv.setText(i.getStringExtra("result")); else tv.setText("???"); setContentView(tv); } protected void onStop() { if (sScreenWakeLock != null) { sScreenWakeLock.release(); sScreenWakeLock = null; } super.onStop(); } } 

Probablemente puede utilizar algunos de limpieza y mejora; Por ejemplo, en el momento en que no puede apagar el teléfono con el botón de encendido a menos que primero detenga la actividad navegando lejos para que pierda visibilidad.

Una forma de ver esto se está haciendo es una aplicación que verifica la instalación de las aplicaciones. Específicamente, una lista de verificación de las aplicaciones que deben instalarse en el dispositivo y cuando PackageManager finaliza la instalación, se actualiza según esta difusión.

Aparte de hacerlo fuera de la capa de la aplicación, no creo que sea posible a menos que olfatear el puerto USB que va al dispositivo e identificar los comandos y la carga útil y la figura que hacia fuera (HACK)

  • Shell / scripts por lotes para dirigir comandos a adb shell
  • Propiedades del sistema de Android: deshabilitarlas en la línea de comandos
  • ¿Cómo simular el tacto del servicio del fondo con sendevent o la otra manera?
  • ¿Cómo probar la conexión wifi vía adb?
  • Android: Permiso denegado para / data / local / tmp / *
  • ¿Cómo puedo eliminar todas las tareas / aplicaciones activas que utilizan ADB?
  • ¿Cómo medir el tiempo de shell de adb con resolución de milisegundos?
  • Android Shell EOF
  • No se puede ejecutar el archivo ejecutable desde el shell de adb
  • interpretando dumpsys cpuinfo
  • Ejecución de un comando de shell para copiar archivos de la aplicación Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.