3 votos

Determinar el ABI de la aplicación instalada

Para una determinada aplicación instalada (en mi caso, com.android.chrome ), ¿hay alguna manera de saber qué ABI se está utilizando (por ejemplo, arm64-v8a )?

Sé que podría lanzar la aplicación y ejecutar file en /proc/<PID>/exe pero me pregunto si hay una forma de hacerlo examinando la propia aplicación.

5voto

pr0nin Puntos 353

Las aplicaciones modernas instaladas desde Google Play Store constan de varios archivos APK (también conocidos como archivos APK divididos). Si la app contiene archivos nativos .so esos archivos suelen estar empaquetados por-ABI (por ejemplo armeabi-v7a arm64-v8a x86 o x86_64 ) y sólo se descarga e instala el archivo ABI correspondiente.

Por lo tanto, para algunas aplicaciones se puede comprobar el ABI instalado mediante una lista de todos los archivos APK que pertenecen a una aplicación:

adb shell pm path <packagename>

Ejemplo:

package:/data/app/.../com.example.app-SO6ebvL9yDViMlHkHQ6NPw==/base.apk
package:/data/app/.../com.example.app-SO6ebvL9yDViMlHkHQ6NPw==/split_config.arm64_v8a.apk
package:/data/app/.../com.example.app-SO6ebvL9yDViMlHkHQ6NPw==/split_config.xxhdpi.apk

Si la lista de APKs contiene una entrada que termina con arm64_v8a.apk y ningún otro archivo APK contiene en su nombre de archivo otro nombre ABI, entonces sabe que el arm64_v8a La versión ABI está instalada y se utiliza.

Lamentablemente, esto sólo puede funcionar para APKs divididos. E incluso para algunas aplicaciones APK divididas no funciona por una razón desconocida - com.android.chrome es una de esas aplicaciones que es una aplicación dividida con archivos dependientes de la plataforma, pero ninguno de los archivos APK tienen un indicador en el nombre del archivo que se instala ABI.

4voto

Waati Puntos 11

Para añadir a la respuesta de @Robert, si la aplicación no tiene bibliotecas nativas, significa que es independiente de la plataforma, por lo que puede obtener la ABI de adb shell getprop ro.product.cpu.abi .

En el otro caso, suponga que tiene un teléfono con arm64-v8a y com.android.chrome sólo tiene una biblioteca nativa para armeabi-v7a puede ejecutar adb shell pm dump <packagename> | grep primaryCpuAbi y obtener el ABI de la aplicación.

Ejemplo:

$ adb shell pm dump com.android.chrome | grep primaryCpuAbi

    primaryCpuAbi=armeabi-v7a

$ adb shell pm dump com.example.platform.independent | grep primaryCpuAbi

    primaryCpuAbi=null

También puedes probar adb shell pm dump <packagename> | grep -A 3 "Dexopt state:"

Ejemplo arm :

Dexopt state:
  [com.example.nativelib]
    path: /data/app/~~ThisIsAnExampleAAAAAAA==/com.example.nativelib-ThisIsAnExampleAAAAAAA==/base.apk
      arm: [status=quicken] [reason=bg-dexopt]

Ejemplo arm64 :

Dexopt state:
  [com.android.dialer]
    path: /system/product/priv-app/Dialer/Dialer.apk
      arm64: [status=speed-profile] [reason=bg-dexopt]

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X