monodroid .so 文件可以托管 .NET 代码吗?

Can monodroid .so files be managed .NET code?

Xamarin Monodroid(libmonodroid.solibmonosgen-2.0.so)生成的.so文件是托管代码还是本机代码?从 this SO post 看来它们实际上是 .NET IL 二进制文件(不是本地机器代码)。一个答案甚至建议 Xamarin.Android 二进制文件是 JIT 的,可以在任何 .NET 反编译器中打开。但是,根据我的调查,这似乎不适用于 dotPeak 或 ILSpy。

然而,另一个 SE 站点上的 this other post 似乎与此矛盾。需要注意的是,它们泛指 Android NDK。 那么,本机库应该在 .NET 反编译器或反编译器(例如 Hopper 和 IDA Pro(给你汇编代码))上打开吗?

这些文件,libmonodroid.so 和 libmonosgen-2.0.so 是本地库,是 Mono 和 Xamarin.Android 的核心库,这些当然是基于 ABI/ARCH 您在应用程序中支持的类型。

Xamarin.Android 应用程序包与普通 Android 包具有相同的结构和布局,但增加了以下内容:

  • 应用程序程序集(包含 IL)未压缩地存储在程序集文件夹中。

  • 包含 Mono 运行时的本机库也包括在内,并为 Android 运行时 (ART) 和对话 from/to MONO <-> ART 提供并行运行时.

在 Xamarin.Android 5.1 及更高版本中,您可以选择像 Xamarin.iOS 那样 AOT 程序集,因为 Apple 要求 JIT/dynimically 不会在 iOS 上生成代码. Android 的此选项在包装属性中定义,默认情况下为 false。因此,对于已经过 AOT 的程序集,已生成基于 ABI/ARCH 类型的机器代码并替换了应用程序 C# IL。