9

我们正在考虑将我们的 C# .NET 应用程序移植到 Android,并且我已经开始阅读有关 Xamarin.Android 和 Mono 框架的信息。我刚刚开始进行 Android 开发。

我在http://xamarin.com/android主页面上注意到它指出:

本机代码 高性能编译代码,可完全访问所有本机 API。

这是否意味着生成的代码将是更难以逆向工程的本机代码?我们希望创建一个包含我们的关键算法的类库,如果我们可以将其编译为本机代码以阻止逆向工程,那将减少我们对移植的恐惧。

我已经阅读了其他几篇关于 Android 代码并不比混淆的 .net 程序集更难反编译的文章(在使用 ProGuard 之后)。本机代码编译是这些帖子之后出现的最新功能吗?感谢您的任何建议!

4

2 回答 2

11

目前,Android 下的 Xamarin 不编译为原生处理器代码。它创建 .NET p 代码,该代码在 Mono 虚拟机中运行,每个 Xamarin 编译的应用程序都与其余的应用程序文件一起安装。据我所知,为 Android 创建本机代码的唯一合理方法是使用 Android NDK ( http://developer.android.com/tools/sdk/ndk/index.html ) 并用 C 或 C++ 编写代码.

我做了一些非正式的基准测试,比较了用 Xamarin 和 Dot42 编译的 C# 中的 Java 和类似代码,以及用于真实应用程序(文本处理)的本机代码。基本上,来自 Xamarin 的 C# 在该特定应用程序上比 Java 或 Dot42 快约 10-20%,而本机代码则快约 5-6 倍。阅读更多:

有没有人有比较用 Xamarin C# 和 Java 编写的 Android 应用程序性能的基准(代码和结果)?

此外,为了保护我的 Android Java 代码免受黑客攻击,我使用了 DexGuard 混淆器(http://www.saikoa.com/dexguard)。但是,我真的不知道优秀的黑客要反编译和篡改这样的混淆代码有多难。DexGuard 当然不会保护 .NET Xamarin 代码,只保护 Java 代码或为 JVM 编译的其他代码。它甚至不会保护直接编译为 Dalvik VM p-code 的 Dot42 代码(运行所有普通 Android 应用程序的虚拟机,Java 代码也被“索引”并转换为 Dalvik 代码,然后才能在 Android 上运行)。

格雷格

于 2013-09-29T07:29:03.000 回答
4

因为 Xamarin.Android 是 JIT 的,所以它可以直接反编译回 C#。只需解压缩 APK 并将 ILSpy 与程序集/*.dll 一起使用。这不能在 Xamarin.iOS 上完成,因为它是 AOT 编译的,因为 Apple 施加了运行时限制。

Rdio.Android

于 2014-12-09T23:03:28.010 回答