Xamarin Monodroid(libmonodroid.so
和 libmonosgen-2.0.so
)生成的 .so 文件是托管代码还是 native 代码?来自 this SO post看来它们实际上是 .NET IL 二进制文件(不是 native 机器代码)。一个答案甚至表明 Xamarin.Android 二进制文件是 JIT 的,可以在任何 .NET 反编译器中打开。但是,根据我的调查,这似乎不适用于 dotPeak 或 ILSpy。
但是,this other post另一个 SE 网站似乎与此相矛盾。需要注意的是,它们一般指的是 Android NDK。 那么,是否应该在 .NET 反编译器或反汇编器(例如 Hopper 和 IDA Pro)(提供汇编代码)上打开 native 库?
最佳答案
这些文件 libmonodroid.so 和 libmonosgen-2.0.so 是 native 库,是 Mono 和 Xamarin.Android 的核心库,这些当然基于您在应用程序中支持的 ABI/ARCH 类型。
Xamarin.Android 应用程序包与普通 Android 包具有相同的结构和布局,但添加了以下内容:
应用程序程序集(包含 IL)未压缩地存储在程序集文件夹中。
还包含包含 Mono 运行时的 native 库,并为 Android 运行时 (ART) 提供并行运行时以及与 MONO <-> ART 对话的桥梁。
在 Xamarin.Android 5.1 及更高版本中,您可以选择像 Xamarin.iOS 一样 AOT 程序集,因为 Apple 要求在 iOS 上没有 JIT/动态生成的代码。 Android 的此选项在打包属性中定义,默认情况下为 false。因此,对于已 AOT 的程序集,已生成基于 ABI/ARCH 类型的机器代码并替换了 APP C# IL。
关于android - monodroid .so 文件可以通过 .NET 代码进行管理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799663/