【问题标题】:Proguard obfuscation of library and app that have a common DTOProguard 混淆具有共同 DTO 的库和应用程序
【发布时间】:2017-08-08 16:20:54
【问题描述】:

我将混淆我的库,其中包含一些带有应用程序的 Common DTO。我的应用程序使用这个 DTO。 我创建了两个包含彼此设置的 proguard-rules 文件。

  1. 当我使用 build variant->"release" 和 lib->"debug" 运行应用程序时,应用程序无法识别来自 Web API 的我的 lib DTO,并且没有加载任何内容。这似乎是正常的,因为 app 被缩小了,而 lib 没有。所以他们不能与同一个 DTO 通信。
  2. 但是当我同时选择构建变体->“发布”时,在编译时出现错误,即应用程序无法识别库 DTO。消息是:Error:(23, 41) error: package com.testlib.model.DTO does not exist 但它确实存在。

我是否必须定义一个通用的 proguard-rules 或类似的东西?

【问题讨论】:

  • 我删除了您在stackoverflow.com/a/38042098/229044 下方的评论。不要将 cmets 留在其他人的问题或答案下方,要求他们来查看您的帖子。这是您的最后警告,下次您这样做时,您将被暂停。
  • @meagar 为什么要删除我的评论?哪个对?在哪里写我不能链接到我的问题?如果堆栈溢出中存在该定律,请告诉我。
  • 是的。由于您需要第二个意见,我可以确认:评论要求其他人查看您的问题或答案的帖子被视为垃圾邮件。这里不受欢迎。 cmets将被删除,如果您不停止,则可能会被暂停。

标签: android build proguard obfuscation


【解决方案1】:

你不应该那样在 Android 中使用 Proguard。

如果您想在将某个库导出给其他人之前保护该库(例如:Google 服务在发布之前使用 proguard 进行处理),您必须防止所有公共 API 被混淆(例如您的情况下的公共 DTO)。但是由于你的库模块不是供外部使用的,你可能根本不想用 Proguard 处理它。

如果您想保护生成的应用程序,请仅将 Proguard 应用于生成的应用程序。您根本不必将其应用于其他模块。在应用程序模块的编译过程中,Android 构建工具会将其所有依赖项捆绑在一起,并一次将 Proguard 应用于所有这些依赖项,包括应用程序代码和库代码。因此,您的应用程序保护规则将包含应用程序代码及其所有依赖项的规则。

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多