Есть ли способ использовать ProGuard с MonoDroid? - PullRequest
3 голосов
/ 07 января 2012

Наша команда разработчиков только что (в основном) завершила приложение для Android, используя MonoDroid в Visual Studio. Поскольку это связано с банковским делом, мы хотели попытаться запутать его, чтобы добавить некоторую защиту против любого, кто пытается его декомпилировать. Сначала я подумал, что могу просто использовать ProGuard, но, похоже, нет файла project.properties, который я мог бы редактировать в Visual Studio. Может ли кто-нибудь пролить свет на эту тему и сказать мне, можно ли использовать ProGuard с Mono, а мое новшество только затуманивает мое зрение?

(Другой разработчик пытался использовать Dotfuscator - так как мы не смогли сразу найти способ использовать ProGuard, - но он потерпел неудачу с многочисленными ошибками; среда выполнения Mono, кажется, вызывает проблемы.)

1 Ответ

5 голосов
/ 08 января 2012

В наборе инструментов Mono для Android на данный момент нет поддержки Proguard.

Тем не менее, с одним широким исключением, отсутствие поддержки Proguard во многом спорное. Proguard работает только на байт-коде Java. В архитектуре Mono для Android запущена среда исполнения Mono; .NET CIL не «компилируется» в байт-код Java, CIL - это JITed от Mono. Единственный работающий Java-код предназначен для Android Callable Wrappers , которые позволяют Java / Android вызывать управляемый код.

Таким образом, единственное, что proguard защитит в приложении Mono для Android, - это сгенерированные Android Callable Wrappers, которые в основном состоят из набора native объявлений методов. В Android Callable Wrappers не будет никакой бизнес-логики для декомпиляции.

Вместо этого сборки CIL хранятся без сжатия в файле .apk. Сборки, в свою очередь, могут быть декомпилированы для получения всей вашей бизнес-логики. Решение здесь состоит в том, чтобы запутать сборки перед их внедрением в .apk. Есть отчеты о том, что Xenocode Postbuild 2010 можно использовать, хотя я не знаю каких-либо подробностей о том, как это подключить.

Указанное выше исключение относится к любому пользовательскому коду Java, включенному в процесс сборки с помощью действий AndroidJavaSource и AndroidJavaLibrary Build, который будет использоваться для включения таких вещей, как библиотека AdMob. Для этого сценария мы должны добавить поддержку proguard в процесс сборки, хотя у меня нет ETA, когда будет добавлена ​​поддержка proguard.

...