Xamarin.Android – делает сборку собственного кода сделать реинжиниринг сложнее?

Мы рассматриваем перенос нашего приложения C # .NET на Android, и я начал читать о Xamarin.Android и структуре Mono. Я только начинаю с разработки Android.

Я замечаю на главной странице http://xamarin.com/android, что она заявляет:

Собственный код Высокопроизводительный скомпилированный код с полным доступом ко всем родным API.

Означает ли это, что сгенерированный код будет родным кодом, который сложнее перестроить? Мы хотели бы создать среди других классов библиотеку классов, которая содержит наши ключевые алгоритмы, и если мы сможем скомпилировать ее с собственным кодом, чтобы помешать обратному проектированию, это сделало бы нас менее опасными для переноса.

Я прочитал несколько других сообщений об Android-коде, которые не сложнее декомпилировать, чем обфусканные сборки .net (после использования ProGuard). Является ли встроенная компиляция кода последней функцией, появившейся после этих сообщений? Спасибо за любой совет!

В настоящее время Xamarin под Android не компилирует собственный процессорный код. Он создает .NET-код, который работает на виртуальной машине Mono, которую каждое скомпилированное приложение Xamarin устанавливается вместе с остальными файлами приложений. Насколько я знаю, единственный способ разумного способа создания собственного кода для Android – использовать Android NDK ( http://developer.android.com/tools/sdk/ndk/index.html ) и писать код на C или C ++ ,

Я сделал несколько неофициальных тестов, сравнивая код Java и аналогов на C #, скомпилированный с Xamarin и Dot42, и собственный код для реального приложения (текстовая обработка). В основном C # от Xamarin был примерно на 10-20% быстрее, чем Java или Dot42 в этом конкретном приложении, в то время как собственный код был примерно в 5-6 раз быстрее. Читайте больше на:

Кто-нибудь имеет контрольные показатели (код и результаты), сравнивающие производительность приложений Android, написанных на Xamarin C # и Java?

Кроме того, чтобы защитить мой код Java Java от взлома, я использую DexGuard obfuscator ( http://www.saikoa.com/dexguard ). Тем не менее, я действительно не знаю, сколько еще труднее для хороших хакеров декомпилировать и манипулировать таким запутанным кодом. DexGuard не будет защищать код .NET Xamarin, конечно, только код Java или другой код, скомпилированный для JVM. Он даже не защитит Dot42-код, который компилируется непосредственно на p-код Dalvik VM (на виртуальной машине запускаются все обычные приложения для Android, код Java также «деширован» и преобразован в код Dalvik, прежде чем он сможет работать на Android).

Greg

Поскольку Xamarin.Android JIT'ed, он может быть декомпилирован непосредственно на C #. Просто разархивируйте APK и используйте ILSpy с сборками / *. Dll. Это не может быть сделано на Xamarin.iOS, поскольку это AOT, скомпилированный из-за ограничений времени выполнения, наложенных Apple.

Rdio.Android