3 votes

Déterminer l'ABI de l'application installée

Pour une application particulière installée (dans mon cas, com.android.chrome ), existe-t-il un moyen de savoir quelle ABI est utilisée (par exemple, arm64-v8a ) ?

Je sais que je pourrais lancer l'application et exécuter file sur /proc/<PID>/exe mais je me demande s'il y a un moyen de le faire en examinant l'application elle-même.

5voto

pr0nin Points 353

Les applications modernes installées à partir de Google Play Store se composent de plusieurs fichiers APK (également appelés fichiers APK fractionnés). Si l'application contient des fichiers natifs .so ces fichiers sont généralement empaquetés par ABI (par ex. armeabi-v7a arm64-v8a x86 o x86_64 ) et seul le fichier ABI correspondant est téléchargé et installé.

Par conséquent, pour certaines applications, vous pouvez vérifier l'ABI installé en listant tous les fichiers APK qui appartiennent à une application :

adb shell pm path <packagename>

Beispiel:

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 liste des APK contient une entrée qui se termine par arm64_v8a.apk et qu'aucun autre fichier APK ne contient dans son nom de fichier un autre nom d'ABI, alors vous savez que l'application arm64_v8a La version ABI est installée et utilisée.

Malheureusement, cela ne peut fonctionner que pour les APK divisés. Et même pour certaines applications APK divisées, cela ne fonctionne pas pour une raison inconnue - com.android.chrome est une de ces applications qui est une application divisée avec des fichiers dépendants de la plateforme mais aucun des fichiers APK n'a d'indicateur dans le nom du fichier pour savoir quel ABI est installé.

4voto

Hexile Points 31

Pour compléter la réponse de @Robert, si l'application n'a pas de bibliothèques natives, cela signifie qu'elle est indépendante de la plate-forme, et vous pouvez obtenir l'ABI à partir de adb shell getprop ro.product.cpu.abi .

Dans l'autre cas, supposons que vous ayez un téléphone avec arm64-v8a et com.android.chrome ne dispose que d'une bibliothèque native pour armeabi-v7a vous pouvez exécuter adb shell pm dump <packagename> | grep primaryCpuAbi et obtenir l'ABI de l'application.

Beispiel:

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

    primaryCpuAbi=armeabi-v7a

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

    primaryCpuAbi=null

Vous pouvez également essayer adb shell pm dump <packagename> | grep -A 3 "Dexopt state:"

Exemple arm :

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

Exemple arm64 :

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

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X