5 votes

Comment le système Android exécute-t-il les jarres Java ?

Il y a une grande quantité de jarres Java dans /system/framework par exemple, am.jar . Je comprends qu'Android utilise Java d'une manière très confuse (du moins pour moi). Je ne comprends pas complètement le fonctionnement de dalvik.

En fait, je ne comprends pas comment Android fait fonctionner ces jars. Quelqu'un peut-il m'expliquer comment il fait cela, et éventuellement comment je peux exécuter mes propres jars ? Je suis sur Resurrection Remix, 6.0.1, avec le framework Xposed, si cela peut aider.

Gracias

0 votes

Qu'essayez-vous d'accomplir en exécutant vos propres JARs ? Nouvelles applications, modification du comportement du système d'exploitation, etc.

0 votes

@Mufasa Je veux juste savoir comment il les fait fonctionner. Je ne veux pas faire fonctionner le mien. (Du moins pour l'instant)

0 votes

@Mufasa Je sais que c'est un peu vieux maintenant, mais s'il exécute seulement .dex 'es, alors que sont ces .jar est là pour ça ?

3voto

Roy Falk Points 131

Vous pouvez exécuter les fichiers Jar en utilisant app_process, qui remplace l'exécutable java sur Android. En regardant /system/bin/am par exemple, nous voyons qu'il s'agit en fait d'exécuter

exec app_process $base/bin com.android.commands.am.Am "$@"

Vous avez mentionné l'utilisation de Xposed. Si vous cherchez dans Google l'installation manuelle de ce framework, vous verrez qu'il déploie un jar dans /system/frameworks et remplace app_process par un autre modifié, où les hooks sont ajoutés. Il est également instructif de lire le document code app_process modifié .

Remarque : vous aurez peut-être besoin de cette réponse pour faire fonctionner vos applications.

Enfin, notez que vous semblez avoir mal compris le lien vers la réponse de stackoverflow dans les commentaires ( https://stackoverflow.com/q/30656933/2291 ). Les jarres son installés. Sur les systèmes plus récents, ils sont convertis (et les fichiers retirés du jar) en ART et s'exécutent en code natif (c'est-à-dire en langage machine). Sur les systèmes plus anciens, je pense que les fichiers de classe java sont convertis en bytecode Dex et exécutés dans la VM Dalvik. Cela signifie que le bytecode Dex est exécuté dans Dalvik de la même manière que le bytecode Java est exécuté par la VM Java à la volée. Dans tous les cas, les fichiers JAR contiennent toujours du code au départ.

1voto

Xetius Points 10445

C'est une question assez importante ; c'est un système très compliqué et très vaste. Si vous ne pouvez pas préciser davantage votre question, la réponse courte se trouve dans la documentation d'Android :

La VM Dalvik est une machine virtuelle à interpréteur seul qui exécute les fichiers au format Dalvik Executable (.dex).

Similaire à la JVM Java, mais avec une implémentation différente optimisée pour les modèles d'utilisation d'Android.

Voir aussi Qu'est-ce que Dalvik et dalvik-cache ? qui le décrit un peu plus.

Sinon, je vous suggère de lire Documentation de Google sur le sujet pour trouver plus d'informations sur les parties du système dalvik qui vous intéressent. (Si nous essayions de répondre à tout ici, il faudrait un défilement de page presque infini (en exagérant un peu) pour décrire toutes les différentes parties et pièces comment et pourquoi cela fonctionne.

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