我们正在考虑将我们的C#.NET应用程序移植到Android,我已经开始阅读有关Xamarin.Android和Mono框架的内容。我刚刚开始Android开发。
我在主要http://xamarin.com/android页面上注意到它声明:
原生代码 具有对所有本机API的完全访问权限的高性能编译代码。
这是否意味着生成的代码将是更难以进行逆向工程的本机代码?我们希望创建一个包含我们的关键算法的类库,如果我们可以将它编译为本机代码以阻碍逆向工程,那么这将使我们不那么害怕移植。
我已经阅读了其他一些关于Android代码的帖子,而不是比模糊的.net程序集(在使用ProGuard之后)更难反编译。本机代码编译是在这些帖子之后出现的最新功能吗?谢谢你的建议!
答案 0 :(得分:10)
目前,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倍。阅读更多内容:
另外,为了保护我的Android Java代码免受黑客攻击,我使用了DexGuard混淆器(http://www.saikoa.com/dexguard)。但是,我真的不知道好黑客去编译和篡改这些混淆代码要困难得多。 DexGuard当然不会保护.NET Xamarin代码,只保护Java代码或为JVM编译的其他代码。它甚至不会保护Dot42代码,后者直接编译为Dalvik VM p代码(所有普通Android应用程序运行的虚拟机,Java代码也是“dexed”并且在它可以在Android上运行之前转换为Dalvik代码)。 / p>
格雷格
答案 1 :(得分:4)
因为Xamarin.Android是JIT,它可以直接反编译回C#。只需解压缩APK并使用ILSpy和assemblies / * .dll。这不能在Xamarin.iOS上完成,因为它是AOT编译的,因为Apple强加了运行时限制。