问题标签 [android-proguard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
271 浏览

android - 有史以来最奇怪的 Android 错误 - 也许是 ProGuard 问题?

我都不知道给这个起什么名字,太奇怪了。我构建了一个小的Android 逻辑谜题,它使用 ARGB 整数格式的颜色值。要在完成关卡时混合动画的颜色,我有以下功能:

我在动画期间使用此代码调用此函数(包括调试打印语句):

这里,pos只是一个从 0.0 到 1.0 的双精度值。

如果我通过 Android 开发者插件从 Eclipse 中直接在手机上运行此代码,一切正常。

但是:如果我打包应用程序并安装 APK,它可靠地搞砸了,给我类似这样的输出:

在这个例子中,直到位置 0.89,一切都很好。然后,事情开始在工作和只搞砸 R 分量(设置为 0;总是搞砸的 R 分量)之间摇摆不定,最终,在这个例子中从 0.93 开始,事情总是搞砸了。然后,如果我再次运行完全相同的动画,它会立即开始搞砸......

这怎么可能?这个 ProGuard 是否在弄乱我的代码?如果这是一种可能性,有没有办法确定?我真的在这里不知所措......它是否有效怎么可能是概率性的?还是我只是在这里遗漏了一些完全明显的东西?

如果可能是 ProGuard 问题,什么样的优化会影响这部分代码?是否有一个开关列表,我可以尝试逐个关闭以找到易碎的开关?

更新:

我的project.properties文件如下所示(已删除注释行):

像这样proguard-project.txt

proguard-android.txtSDK 目录中的内容仍应与 SDK Tools v24.1.2 随附的一样(假设这是包含 ProGuard 的软件包...;再次排除注释):

更新 2:

blend我想我在文件中找到了 ProGuard 对 -method所做的编译输出dump.txt

更新 3

我试图将 blend 方法重写为此(想法是,如果我将所有组件都视为相同,则不可能再搞砸一个):

毫不奇怪,这段代码现在可以正常工作了!但这仍然没有让我更接近于理解为什么原始代码会失败,以及在我的应用程序的其他地方,类似的微不足道的事情可能会以意想不到的方式失败。

更新 4:

只需将这些行重新排序也可以解决问题:

它一定是一些局部变量重用的东西,我只是不知道为什么从上面的 dump.txt 文件中看不到这一点......这是 Dalvik 所做的事情(但仅限于签名的 APK!?!)?

0 投票
1 回答
592 浏览

android - Android Proguard:发布构建强制关闭

我通过启用 minifyEnabled 属性生成了发布版本,当我尝试运行发布版本时,它会强制关闭并显示以下日志。请帮我调试一下

这是我的方法 onCreateOptionsMenu 的代码

0 投票
2 回答
1404 浏览

android-proguard - 最新 mp4parser/isoparser 库的正确 ProGuard 定义是什么?

我一直在这里和那里挣扎-

您需要添加到项目 proguard 配置文件中以允许 mp4parser 库工作的 proguard 定义是什么?

0 投票
1 回答
282 浏览

android - Proguard Gradle 重复的罐子

我有一个依赖于两个不同模块的 android 项目。

两个模块都需要相同的两个 jar 库。模块的配置如下:

当我使用 proguard 构建主项目时,出现错误:

java.io.IOException:重复的 zip 条目 [......class]

有没有办法只包含一次 JAR 并避免错误?

0 投票
2 回答
2419 浏览

java - Gradle Build 在启用 ProGuard 的情况下失败,缺少 classes.jar

尝试构建启用了 ProGuard 的签名 APK 时出现以下错误:

错误:任务“:app:packageRelease”执行失败。无法计算 D:\Work\Android\MyApp\app\build\intermediates\classes-proguard\release\classes.jar 的哈希

我检查了给定的路径,没有 classes.jar 文件。我可以从哪里获得 .jar?

0 投票
0 回答
61 浏览

android - 可以保护用于测试但不在发布中的代码吗?

有没有办法使用 Proguard 注释掉一行源代码,以便它存在用于测试但不进入发布版本?

我正在开发一个 Android 应用程序,并将测试移植到 Google Espresso 进行仪器测试。结果,我不得不在/src/树中添加一些代码来在应用程序繁忙时通知 Espresso,特别是它是由静态(和无状态)方法触发的广播意图。我不想让生产代码创建只有测试听过的广播。

我正在寻找的解决方案类似于 C 的#ifdef...#endif它将完全消除上面的单线,或者类似于Log.v()仍然保留上面的单线但将方法的内容视为 NOOP。

我对 Proguard 不熟悉,但从我读过的内容来看,这似乎是不可能的。非常感谢任何类似项目的建议或链接。

0 投票
5 回答
5169 浏览

android - NoClassDefFoundError:Android 4.2.2 (wiko) 上的 android.support.design.internal.NavigationMenu

我正在尝试使用 Android Support Design 库(版本 23.0.1)和类NavigationMenu(我将此类用作布局中的 XML 标记)。

当我在 Android 4.3 上的三星或 Android 5.x 或 6.0 上的 Nexus 上执行我的应用程序时,一切正常,但是当我在 Android 4.2.2 上的 Wiko Rainbow 上执行应用程序时,它会崩溃并出现以下异常:

这个错误让我想起了几个月前开发人员遇到的一个类似错误,在 Android 4.2.2 的一些 Wiko 和三星手机上使用 appcompat-v7 库。

错误是:

解决方案是在项目中使用以下 proguard 文件:

这个解决方案很棒,因为我不必-dontwarn为我使用的其他库(如 Jackson)添加特定规则(只需几行)或为 android 组件添加特定规则。

因为NavigationMenu类继承了MenuBuilder类,我认为我们可以像这样修改proguard文件来解决这个问题:

不幸的是它不起作用......所以我尝试了另一种解决方案:

这个解决方案有效,但......事实上,我不再有NoClassDefFoundError例外,但我有其他例外(发生在所有 Android 版本上),如:

  • 一些缺少的构造函数与反射一起使用;
  • Jackson 对象或Fragment.

那么,您是否知道一种解决方案,它允许我在 Android 4.2.2 上的 Wiko 上执行我的应用程序,并且我不必为我使用或将来使用的每个库添加特定规则?

预先感谢您的帮助 !

0 投票
1 回答
11264 浏览

android - 无法膨胀行为子类 android.support.design.widget.AppBarLayout$ScrollingViewBehavior

帮帮我,我的应用程序有问题,何时运行显示此错误...帮助我,我的应用程序有问题,何时运行显示下一个错误...

尝试设置 ProGuard 但仍然不知道是否 proguard-rules.pro PROGuard - android.txt ,我是新手,请帮助我。

0 投票
1 回答
248 浏览

android - 从 apk 中删除特定的包类

我需要从发布 apk 中删除一些特定的包类。我正在寻找某种可以提供帮助的 proguard 或 gradle 选项。这些类是我项目的一部分(没有它代码无法编译),但我想从 apk 中删除这些类。实际上我需要两种构建风格,一种是删除包,因为我将处理代码中未找到的类异常。

0 投票
2 回答
12611 浏览

android - ProGuard 构建失败“未解决的引用”

我一直在开发我的应用程序的最新版本,它测试得很好,但是当我进行发布 ProGuard 构建时,我得到了很多错误,主要是关于 not able to find org.apache.http.*,我没有在我的项目中使用。我已经在整个项目中搜索了该文本,但找不到它。我添加了一些依赖项,但没有一个我认为会使用 HTTP。

我如何找出ProGuard 抱怨并正确解决的原因?它说我可以“使用 --stacktrace 选项”运行,但我不知道该怎么做。

感谢任何帮助,因为我发现 ProGuard 经常令人困惑。

构建输出:

从我的 Gradle 文件中:

我的proguard-rules.pro文件: