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

2024-02-06

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

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


Mono for Android 工具链目前不支持运行 proguard。

然而,除了一个广泛的例外,缺乏 proguard 支持在很大程度上是没有意义的。 Proguard 仅在 Java 字节码上运行。这Android 架构的 Mono http://docs.xamarin.com/android/advanced_topics/architecture进程中有Mono运行时运行; .NET CIL 没有“编译”成 Java 字节码,CIL 是由 Mono 进行 JIT 处理的。唯一运行的 Java 代码是Android 可调用包装器 http://docs.xamarin.com/android/advanced_topics/architecture/android_callable_wrappers,允许 Java/Android 调用托管代码。

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

相反,CIL 程序集未压缩地存储在.apk文件。依次可以对程序集进行反编译以获得所有业务逻辑。这里的解决方案是在将程序集嵌入到.apk。有reports http://lists.ximian.com/pipermail/monodroid/2011-December/007586.html可以使用 Xenocode 的 Postbuild 2010,尽管我不知道如何连接它的任何细节。

上面提到的异常与包含在构建过程 http://docs.xamarin.com/android/advanced_topics/build_process#Java_Interop_Support通过AndroidJavaSource and AndroidJavaLibrary构建操作,用于包含 AdMob 库等内容。对于这种情况,我们应该在构建过程中添加混淆器支持,尽管我没有关于何时添加混淆器支持的预计时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将 ProGuard 与 MonoDroid 一起使用? 的相关文章

随机推荐

  • 我无法通过鼠标事件添加灯光

    我无法在 Three js 场景中使用 keydown 事件添加灯光 我有以下功能 function putLight light new THREE SpotLight 0xffffff light position set 10 80
  • osmdroid MapTileDownloader 现在显示 403 禁止作为 HTTP 响应

    我已经成功使用 osmdroid android 4 1 jar 一段时间来在我的应用程序中显示 OSM 地图图块 现在 从昨天开始 我根本没有显示任何图块 当我将手机连接到 PC 时 我在日志中看到 403 禁止响应 我使用 Androi
  • 使用 CSS 使图像大小为容器高度的 100%

    我环顾四周 阅读了一个又一个的解决方案 并尝试了各种方法 但从未让它正常工作 我希望图像最终根据浏览器窗口的当前高度动态调整大小 目前使用图像下方的代码是原始高度 最终比浏览器窗口大 导致出现垂直滚动条 注意 请记住 我希望使用相同数量的表
  • 为什么使用 IN(子查询)的查询比使用 IN(离散列表)的查询花费更长的时间

    这一直困扰着我 为什么这个查询 SELECT FROM TABLE WHERE value IN SELECT val FROM OTHER TABLE WHERE date lt 2014 01 01 运行速度比顺序运行此查询慢几个数量级
  • bash脚本..复制文件而不覆盖[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想知道是否可以根据原始名称将文件复制 移动到目的地 基本上 我有一个 mail 文件夹 其中有几个子文件夹 例如 cur 和 new 等 然后我在
  • 计算 PHP 类的创建次数

    我有一个 php 类 我为其创建了多个实例 我想计算一下我创建该对象的次数 有没有办法知道我已经创建了 3 个 myObjects 您可以创建一个static http php net manual en language oop5 sta
  • 无法安装自制程序

    我有一台相当新的 macbook pro 我只是尝试按照他们网站上的说明安装自制程序 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install mas
  • NSString 属性是复制还是只读?

    我看到很多讨论说我应该使用copyNSString 属性 因为它会阻止其他人在我背后更改它 但那我们为什么不直接设置readonly财产呢 Update 谢谢回答我的问题 但问题是 对于 NSString 属性 你总是不希望别人修改它 对吧
  • Swift UITableViewAutomaticDimension 不起作用

    我的 Swift 项目中有一张这样的表 var tableView UITableView tableView UITableView tableView dataSource self tableView delegate self ta
  • 如何在android中的通知中添加按钮?

    我的应用程序播放音乐 当用户通过从屏幕顶部 或通常从平板电脑屏幕的右下角 滑动打开通知屏幕时 我想向他们展示一个按钮来停止当前播放的音乐并在以下情况下重新启动 他们要 我不打算将小部件放在用户的主屏幕上 而只是放在通知中 我怎样才能做到这一
  • 如何使用无法删除的值初始化输入,但允许用户在输入后写入

    我正在使用 Angularjs 和 bootstrap 创建一些表单 我想使用无法删除的默认值来初始化输入 我不想使输入只读或禁用它 我想用一些无法删除的文本初始化输入 但让用户在该文本后写入 Example 代码 xyz 用户想要写入的任
  • 在新版本的 matplotlib 中使用 twinx 时定义宽高比

    当前版本的 matplotlib 不允许box forced再说了 我应该怎么做同样的事情answer https stackoverflow com a 24742133 11840592 我正在使用 matplotlib 3 1 0 当
  • 如何在CSS中倾斜虚线边框?

    我正在尝试使用 CSS 为邮件应用程序设计一个信封 我的客户想要这种方式的虚线边框 如何用 CSS 边框达到这种效果 您可能需要稍微调整一下颜色 enveloppe padding 1em border 16px solid transpa
  • 在 Storybook v6.4 中加载 css 模块类时出现问题

    我在让故事书与我的 Gatsby 项目中的 css 模块完美配合时遇到问题 我能够渲染按钮组件 但它没有添加任何我的样式 在检查元素时 我只得到undefined undefined从下面的代码 按钮 jsx import React fr
  • 如何关闭 Nifi 处理器计划

    我有 GetHttp 和 InvokeHttp Nifi 处理器 它们在 Nifi 中启动流 但我希望它们仅从 URL 获取一次并将数据传递到下一个进程 使用处理器配置 我无法关闭调度 如何实现这一点 Apache NiFi 处理器和流程专
  • lambda 表达式中的返回类型错误

    以下代码在 IntelliJ 和 Eclipse 中可以正常编译 但 JDK 编译器 1 8 0 25 会报错 首先 代码 import java util function Predicate public abstract class
  • 如何将多个收件人添加到mailitem.cc字段c#

    好的 我正在处理 Outlook msg 模板 以编程方式打开它们 根据我的数据库中的内容插入值 前任 当我想在 收件人 字段添加多个收件人时 而不是执行以下操作 mailitem To a b c 我执行下面的操作 这更简单 尤其是当我循
  • iPhone:线程+释放池+[对象释放]=“消息发送到已释放的实例”

    我在 iPhone 上运行一些小代码时遇到了麻烦 基本上 我只需按一个按钮 它就会调用runTest 它运行test后台线程上的方法 这就是我创建自动释放池的原因 如果我运行下面的代码 我会在控制台上收到一条漂亮的消息 2010 09 07
  • AWS 公共 IP 限制是多少? (公共IP不是弹性IP)

    对于给定的 AWS 区域 您可以使用的公共 IP 数量是否有限制 不是弹性 IP 注意 我知道您最多只能使用 5 个弹性 IP 但是 如果您在创建 AWS 实例时选择 自动分配 IP 您将获得一个 IP 该 IP 在重新启动时会发生变化 我
  • 有没有办法将 ProGuard 与 MonoDroid 一起使用?

    我们的开发团队刚刚 大部分 在 Visual Studio 中使用 MonoDroid 完成了一个 Android 应用程序 因为它与银行业务有关 所以我们想尝试对其进行混淆 以增加一些安全性 防止任何人试图反编译它 最初 我认为我可以只使