android - 有没有办法将 ProGuard 与 MonoDroid 一起使用?

标签 android visual-studio mono xamarin.android proguard

我们的开发团队刚刚(大部分)在 Visual Studio 中使用 MonoDroid 完成了一个 Android 应用程序。因为它与银行业务有关,所以我们想尝试对其进行混淆,以增加一些安全性以防止任何人试图反编译它。最初,我认为我可以只使用 ProGuard,但似乎没有我可以在 Visual Studio 中编辑的 project.properties 文件。任何人都可以在这个主题上提供一些光荣的帮助,并告诉我是否可以将 ProGuard 与 Mono 一起使用,而我的新手只是模糊了我的视野?

(另一位开发人员尝试使用 Dotfuscator - 因为我们无法立即找到使用 ProGuard 的方法 - 但它失败并出现许多错误;Mono 运行时似乎给它带来了问题。)

最佳答案

Android 工具链的 Mono 目前不支持运行混淆器。

然而,除了一个广泛的异常(exception),proguard 支持的缺乏在很大程度上是没有实际意义的。 Proguard 仅在 Java 字节码上运行。 Mono for Android architecture在进程中运行 Mono 运行时; .NET CIL 没有“编译”成 Java 字节码,CIL 是由 Mono JIT 编译的。唯一运行的 Java 代码是 Android Callable Wrappers ,它允许 Java/Android 调用托管代码。

因此,proguard 将在 Mono for Android 应用程序中唯一保护的是生成的 Android Callable Wrappers,它主要由一堆 native 方法声明组成。在 Android Callable Wrappers 中不会有任何要反编译的业务逻辑。

相反,CIL 程序集未压缩地存储在 .apk 文件中。程序集又可以反编译以获得所有业务逻辑。这里的解决方案是在将程序集嵌入到 .apk 之前对其进行混淆处理。有reports可以使用 Xenocode 的 Postbuild 2010,尽管我不知道如何连接它的任何细节。

上述异常与 build proces 中包含的任何自定义 Java 代码有关通过 AndroidJavaSourceAndroidJavaLibrary 构建操作,这将用于包含 AdMob 库等内容。对于这种情况,我们应该在构建过程中添加 proguard 支持,但我不知道何时会添加 proguard 支持。

关于android - 有没有办法将 ProGuard 与 MonoDroid 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764511/

相关文章:

android - 如何以编程方式打开相机开关声音

android - 如何在android中查看表格列表

java - android.intent.action.CALL_PRIVILEGED 是否需要系统权限?

sql-server - 从存储过程到 REST 服务

c++ - init_seg和库代码中的警告C4073?

c++ - 微软 Visual Studio 社区 2019 : fatal error C1083: Cannot open include file: 'corecrt.h' : No such file or directory

java - 如何删除 Firebase 数据库数组中的项目?

mono - monodevelop 2.1+ 是否支持visual studio 2010 项目文件?

c# - 如何在不使用 System.Net 类的情况下在 C# 中发送 HTTP 请求?

.net - Mono 中的 RPC 选项? (WCF 替代品)