1 votes

Traitement des fichiers Android et DEX au moment de l'exécution

J'essaie de comprendre certaines choses sur la façon dont les fichiers dex sont traités par Android.

Ce que je sais, c'est qu'un APK envoie un fichier dex, le système le récupère, l'optimise au moment de l'installation, et stocke le fichier ODEX résultant (dex optimisé) dans /data/dalvik-cache/myOdexfile, puis exécute l'application à partir de là.

C'est vraiment comme ça que ça marche ?

Que se passe-t-il lorsqu'un fichier dex télécharge et ouvre un nouveau fichier dex à partir d'internet ? Est-ce que cela est également optimisé ?

Aussi - le système, afaik, garde l'APK original autour, non ? Je pense qu'il est conservé dans /data/app/myAPK-1.apk. Est-il utilisé de quelque manière que ce soit par le système ? Quand ?

Pouvez-vous d'une manière ou d'une autre forcer manuellement la régénération du fichier odex à partir du fichier APK stocké après l'installation ?

0 votes

Tout comme le fichier .class (byte code) est exécuté dans le JRE sur les systèmes de bureau. Android a Dalvik ou ART qui comprend le code byte mais dans le format .dex. Pour Android, le fichier .class est converti en fichier .dex, puis l'apk est formé.

2voto

Milner Points 533

Pour des informations d'ordre général, vous pouvez vous référer au document odex tag-wiki et le tag-wiki pour le dalvik étiquette. Mais votre question couvre même certaines parties qui n'y figurent pas -- et ce n'est que maintenant que je me suis rendu compte qu'en effet, toutes les .apk Les fichiers semblent inclure .dex (j'ai toujours pensé que seules les "applications odexées" faisaient cela), et vous semblez avoir raison sur la signification du "O" - du moins, cela a du sens. Alors pardonnez-moi, je ne suis pas un développeur :)

Mais je peux quand même répondre à une partie de votre question.

Oui, votre description semble correspondre à son fonctionnement (jusqu'au point d'interrogation, du moins). Mais, à ma connaissance, aucune application ne devrait télécharger et installer .dex séparément. Si l'application n'est pas exécutée avec les permissions Root, cela serait même difficile (car l'application ne pourrait pas écrire sur /data/dalvik-cache en l'absence de la autorisations de fichiers ). Nous pouvons donc sauter la deuxième partie car, selon la logique d'Aristote, on peut tout déduire d'une hypothèse erronée :)

Deuxièmement : Oui, le système conserve les .apk des fichiers. Si votre appareil est équipé d'une restauration personnalisée, vous pouvez effacer manuellement le cache Dalvik à partir de là - ce qui obligera le système Android à le générer à nouveau au prochain démarrage. En principe, cela est même fait pour le système-apps ( .apk sont situés dans /system/apps pour ces derniers, et donc survivre à une réinitialisation en usine), à savoir lorsque vous faites un Réinitialisation en usine .

Troisièmement : Oh, déjà répondu. Oui, en effaçant le Dalvik-Cache.

0 votes

Merci pour votre réponse. Quelques points cependant : L'effacement du cache dalvik est un point valable, cependant cela ne peut être initié par l'utilisateur que sur les téléphones rootés, n'est-ce pas ? Est-ce qu'un appareil non rooté a besoin de supprimer le cache, ou est-ce que l'utilisateur peut forcer le système à le faire, sur les téléphones non rootés ? Par ailleurs, en ce qui concerne votre autre point : Les applications ont la capacité de télécharger et d'exécuter des fichiers .dex à partir d'Internet au moment de l'exécution - bien que je ne sois pas sûr de pouvoir les installer. Je suppose qu'ils pourraient être téléchargés dans un emplacement temporaire dans /data/data/myapp/files et être exécutés à partir de là à chaque fois.

0 votes

Dalvik-Wipe : oui, c'est exact. Custom Recovery Menu, ou Root via terminal. Sur un appareil non rooté : uniquement via la réinitialisation d'usine AFAIK. .dex : oui, ils peuvent les télécharger -- mais pas les exécuter directement AFAIK (voir Réponse de yjarabi ). Ils ne peuvent pas les placer dans le cache Dalvik, mais bien sûr à n'importe quel endroit auquel ils ont accès (leurs propres répertoires ci-dessous /data/data/<packagename> , /data/local etc.)

1voto

Daniel Moura Points 4298

> Est-ce vraiment ainsi que cela fonctionne ?

Oui, je pense que ça marche comme ça.

> Que se passe-t-il lorsqu'un fichier dex télécharge et ouvre un nouveau fichier dex à partir d'Internet ? Est-ce que cela est également optimisé ?

Je pense qu'il n'est pas possible pour une application d'ouvrir directement un fichier dex.

> Aussi - le système, afaik, garde l'APK original autour, non ? Je pense qu'il est conservé dans /data/app/myAPK-1.apk. Est-il utilisé de quelque manière que ce soit par le système ? Quand ?

Oui, le fichier APK contient tous les actifs et ressources nécessaires à l'application lors de son exécution. Donc, en tant que développeur Android, je suis presque sûr que le fichier apk est utilisé à chaque fois qu'une application s'exécute.

> Pouvez-vous d'une manière ou d'une autre forcer manuellement la régénération du fichier odex à partir du fichier APK stocké après l'installation ?

Oui, si vous effacez le dossier dalvik-cache manuellement (votre appareil doit être ROOTé évidemment), le système régénère alors les fichiers odex nécessaires lorsque vous exécutez des applications. Certaines applications, comme Titanium Backup, ont une option pour effacer dalvik-cache. Je me souviens aussi qu'il y avait la même option dans le menu de récupération de mon appareil.

0 votes

Pour ce qui est de la deuxième question, les applications peuvent exécuter des fichiers dex, en utilisant ClassLoader. Un exemple d'application qui le fait est "DevAppsDirect". L'une des raisons d'avoir une telle fonctionnalité est la présence de plugins. Quoi qu'il en soit, j'aimerais également poser une question : les applications ont-elles d'autres fichiers similaires aux fichiers dex ? De plus, maintenant qu'Android Lollipop est sur le point d'être disponible, ces fichiers existeront-ils encore ? Qu'est-ce qui les remplacera, et où trouveront-ils leurs remplaçants ? Certains ont affirmé qu'il y aurait des remplacements et qu'ils seraient généralement plus gros. Est-ce vrai ?

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