android - puedo - puede que no dispongas de una aplicacion compatible para abrir este archivo
¿Cómo ejecutar(no solo instalar) una aplicación de Android usando un archivo.apk? (6)
Creé alias de terminal para instalar y ejecutar un apk con un solo comando.
// I use ZSH, here is what I added to my .zshrc file (config file)
// at ~/.zshrc
// If you use bash shell, append it to ~/.bashrc
# Have the adb accessible, by including it in the PATH
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:path/to/android_sdk/platform-tools/"
# Setup your Android SDK path in ANDROID_HOME variable
export ANDROID_HOME=~/sdks/android_sdk
# Setup aapt tool so it accessible using a single command
alias aapt="$ANDROID_HOME/build-tools/27.0.3/aapt"
# Install APK to device
# Use as: apkinstall app-debug.apk
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
# As an alternative to apkinstall, you can also do just ./gradlew installDebug
# Alias for building and installing the apk to connected device
# Run at the root of your project
# $ buildAndInstallApk
alias buildAndInstallApk=''./gradlew assembleDebug && apkinstall ./app/build/outputs/apk/debug/app-debug.apk''
# Launch your debug apk on your connected device
# Execute at the root of your android project
# Usage: launchDebugApk
alias launchDebugApk="adb shell monkey -p `aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e ''package: name'' | cut -d /' -f 2` 1"
# ------------- Single command to build+install+launch apk------------#
# Execute at the root of your android project
# Use as: buildInstallLaunchDebugApk
alias buildInstallLaunchDebugApk="buildAndInstallApk && launchDebugApk"
Nota: Aquí estoy creando, instalando y ejecutando el apk de depuración que suele estar en la ruta:
./app/build/outputs/apk/debug/app-debug.apk
, cuando este comando se ejecuta desde la raíz del proyectoSi desea instalar y ejecutar cualquier otro apk, simplemente reemplace la ruta de depuración de apk con la ruta de su propio apk
Aquí está la gist de lo mismo. Creé esto porque estaba teniendo problemas para que la compilación de Android Studio llegara a los 28 minutos, así que cambié a las compilaciones de terminales que duraban unos 3 minutos. Puedes leer más sobre esto here
Explicación:
El alias que creo que necesita explicación es el alias launchDebugApk
. Aquí está cómo se descompone:
La parte aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e ''package: name
aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e ''package: name
básicamente usa la herramienta aapt
para extraer el nombre del paquete de la apk.
A continuación, está el comando: adb shell monkey -p com.package.name 1
, que básicamente usa la herramienta monkey
para abrir la actividad de inicio predeterminada de la aplicación instalada en el dispositivo conectado. La parte de com.package.name
es reemplazada por nuestro comando anterior que se encarga de obtener el nombre del paquete de la apk.
¿Hay algún comando en cmd.exe
que me permita iniciar la actividad principal de una aplicación de Android en particular usando el archivo .apk
de esa aplicación? Tenga en cuenta que conozco este comando que solo instala una aplicación de Android:
adb install myapp.apk
Este comando solo instalará myapp
en el emulador y tengo que ejecutar manualmente esta aplicación desde el emulador (haciendo un solo clic en su icono).
Lo que quiero hacer es usar un comando que no solo instala la aplicación sino que también inicia su actividad principal (tenga en cuenta que solo tengo su archivo .apk
, así que no sé cuál es el nombre del paquete o el nombre de cualquier actividad).
Cuando inicie la aplicación desde la GUI, adb logcat
puede mostrarle la acción / categoría / componente correspondiente:
$ adb logcat
[...]
I / ActivityManager (1607): START {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.android.browser / .BrowserActivity} de pid 1792
[...]
Esta es una solución en shell script:
apk="$apk_path"
1. Instalar apk
adb install "$apk"
sleep 1
2. Obtener el nombre del paquete
pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " ''{print $2}''`
eval $pkg_info > /dev/null
3. Iniciar aplicación
pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1
No puede instalar y ejecutar de una sola vez, pero ciertamente puede usar adb para iniciar su aplicación ya instalada. Use adb shell am start para disparar un intento, aunque deberá usar el intento correcto para su aplicación. Un par de ejemplos:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
iniciará Configuración, y
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity
lanzará el navegador. Si desea apuntar el navegador a una página en particular, haga esto
adb shell am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://www.google.co.uk
Si no sabe el nombre de las actividades en el APK, haga esto
aapt d xmltree <path to apk> AndroidManifest.xml
El contenido de salida incluirá una sección como esta:
E: activity (line=32)
A: android:theme(0x01010000)=@0x7f080000
A: android:label(0x01010001)=@0x7f070000
A: android:name(0x01010003)="com.anonymous.MainWindow"
A: android:launchMode(0x0101001d)=(type 0x10)0x3
A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
A: android:configChanges(0x0101001f)=(type 0x11)0x80
E: intent-filter (line=33)
E: action (line=34)
A: android:name(0x01010003)="android.intent.action.MAIN"
XE: (line=34)
Eso le dice el nombre de la actividad principal (MainWindow), y ahora puede ejecutar
adb shell am start -a android.intent.action.MAIN -n com.anonymous/.MainWindow
Puse esto en mi makefile, justo en la siguiente línea después de adb install ...
adb shell monkey -p `cat .identifier` -c android.intent.category.LAUNCHER 1
Para que esto funcione, debe haber un archivo .identifier con el identificador del paquete de la aplicación, como com.company.ourfirstapp
No hay necesidad de cazar el nombre de la actividad.
si está buscando el equivalente de "adb run myapp.apk"
Puedes usar el script que se muestra en esta respuesta.
(Solo Linux y Mac, tal vez con Cygwin en Windows)
Los usuarios de linux / mac también pueden crear un script para ejecutar un apk con algo como lo siguiente:
cree un archivo llamado "adb-run.sh" con estas 3 líneas:
pkg=$(aapt dump badging $1|awk -F" " ''/package/ {print $2}''|awk -F"''" ''/name=/ {print $2}'')
act=$(aapt dump badging $1|awk -F" " ''/launchable-activity/ {print $2}''|awk -F"''" ''/name=/ {print $2}'')
adb shell am start -n $pkg/$act
luego "chmod + x adb-run.sh" para hacerlo ejecutable.
ahora puedes simplemente:
adb-run.sh myapp.apk
El beneficio aquí es que no necesita saber el nombre del paquete o el nombre de la actividad de inicio. Del mismo modo, puede crear "adb-uninstall.sh myapp.apk"
Nota: Esto requiere que tengas aapt en tu camino. Puede encontrarlo en la nueva carpeta de herramientas de compilación en el SDK.