2017-10-08 42 views
1

Je ai read que les applications qui sont en cours de développement en utilisant Mono sont déployés avec un MonoRuntime qui fonctionne comme ART, interprète le code C#, les exécute, etc. Je suppose que Unity et Xamarin à la fois.Comment MonoRuntime vit-il côte à côte avec ART?

Ce qui est étrange pour moi, c'est qu'en théorie, je pourrais écrire un runtime et l'expédier avec mon application? Mais cela est censé être à côté du runtime, en dessous du cadre d'application? Comment le bac à sable peut-il laisser cela se produire?

Je suppose que this pourrait être la solution à ma confusion, mais j'ai du mal à la comprendre.

Qu'est-ce qui me manque ici?

Merci à l'avance

Répondre

1

d'abord penser à la façon dont applications NDK/JNI travail sur Android. Ils sont lancés à partir du code Java Android standard exécuté via ART/Dalvik et utilisent les appels JNI en code C/C++. Le processus est toujours dans le «sandbox» Android standard, mais dispose d'un accès supplémentaire aux bibliothèques fournies par les en-têtes Android NDK. Comme ce code est écrit en C/C++, il peut être compatible avec les systèmes performants/croisés.

Donc, pour répondre:

Mais qui est censé être à côté de l'exécution, au-dessous du cadre d'application?

Je dirais non, au moins vous n'êtes pas vraiment en dessous du cadre de l'application Android. Le MonoRuntime est démarré à partir d'Android et peut utiliser l'une des 'bibliothèques standard' qui sont exposées soit via un wrapper JNI au côté Java Android ou par un en-tête NDK. Si vous regardez le diagramme ci-dessous, vous verrez des «bibliothèques standard» qui peuvent être OpenGL ES qui a une API Java Android et OpenSL ES qui expose plus de détails dans NDK que l'API Android Java.

NDK app

Je pourrais écrire un temps d'exécution et l'expédier avec mon application?

Oui, bien que vous puissiez définir clairement ce que vous entendez par 'runtime'. Si vous êtes pré-compilé, vous pouvez supprimer les classes/modules inutiles, ce que Mono fait, je crois.

Comment le bac à sable peut-il permettre cela?

Vous êtes toujours dans le bac à sable. Rien ne vous empêche d'écrire votre propre interpréteur/machine virtuelle écrite en C/C++, en interfaçant le framework Android via des appels JNI/NDK standard, et en l'ajoutant à votre propre fichier APK. Peu importe, vous êtes toujours limité à ce que le cadre Android/runtime permet pour les applications avec les mêmes restrictions et limitations de processus.

+0

Vous avez déjà fourni une bonne réponse sur Xamarin.Android. Cependant, Unity sur Android est complètement différent. Unity a développé sa propre technologie appelée IL2CPP, et compile tous les fichiers source de MSIL vers C++, puis les compile et les lie à un paquet natif, similaire aux applications Android NDK. –