问题标签 [android-r8]

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 投票
0 回答
216 浏览

android - 仅限 Google Play 发布前报告,java.io.FileNotFoundException: 此文件无法作为文件描述符打开;它可能被压缩了

我在发布前报告中看到了这个错误:

该应用程序在真实设备上运行良好,也在模拟器中运行良好。它似乎只出现在发布前的报告中(所有设备都出现故障)。

有没有人遇到过这个?

以下 StackOverflow 帖子看起来相关: java.io.FileNotFoundException:此文件无法作为文件描述符打开;它可能被压缩了

但是我运行了命令unzip -lv MyApplication.apk,它说声音文件没有被压缩(“存储”为 0%)。

我也尝试明确添加

但无济于事。

这是 Firebase 模拟器的问题吗?列为故障的设备之一与我在物理设备上测试过的真实设备配置相匹配。

另外,我正在使用 LibGDX 框架。我在加载屏幕中加载资产,如下所示:

然后我让他们使用:

0 投票
0 回答
43 浏览

android - proguard 映射中数字的含义

我可以看到在构建我的应用程序后生成的 proguard 映射中存在以下几行:

在上面的映射中,1000:1000 表示该方法的行号。“:44”、“:101”或“:104”在这里是什么意思?

我找不到相同的任何文档。是否有文档可以在其中找到 proguard 映射中存在的所有部分的含义。

0 投票
1 回答
139 浏览

java - 即使使用 ProGuard(或 R8)剥离,Log.d() 中的语句是否仍会执行?

我有以下语句proguard-rules.pro来删除生产 apk 中的日志记录:

这具有删除以下语句的效果:

现在让我们考虑以下语句:

到目前为止,我的假设是该Log.d()语句将被删除,因此client.getStatus()永远不会被调用。

具体来说,如果client碰巧是,null那么我的假设是不会有NullPointerException.

但现在我不太确定。也许编译器看起来更像下面的语句:

现在该client.getStatus()语句执行并NullPointerException 可能产生结果。

实际情况如何?

注意:我现在实际上使用的是 R8 而不是 ProGuard。

0 投票
1 回答
1746 浏览

android - 如何为android数据绑定点击监听器编写progaurd规则?

databinding在我的应用程序中使用它,它运行良好。但是当我启用它时minifyEnabled trueshrinkResources true它会显示一些错误。

layout.xml的是

现在我的问题是如何为android数据绑定和点击监听器编写progaurd规则。任何帮助将不胜感激,谢谢。

0 投票
1 回答
360 浏览

android - R8 仍然在堆栈跟踪中,即使它在属性中被关闭

我正在使用 android 插件 3.4.2,gradle 5.0。我在 gradle.properties 中关闭了 R8android.enableR8 = false

但是我仍然有一个堆栈跟踪,其中 R8 在包中。

这是否意味着 R8 仍然可以工作,或者它只是 r8 包中的 dexer?我知道如何修复此错误,但我想确定 R8 未启用。

0 投票
1 回答
463 浏览

android - Evernote Android SDK library throws java.lang.VerifyError under R8

Facing notorious java.lang.VerifyError. Initially problem showed up in Fabric. Was able to reproduce (with identical stacktrace) once set minifyEnabled true for debug build.

I see that typically java.lang.VerifyError issues are recognized as related to difference between code to compile and run against.

This is not the case since code runs just fine when minification is disabled.

The way I see this can be helped is making another rule, but I am failing to understand which classes need to be kept from this error details.

We are already doing

... and those classes don't get modified in any way. I've checked it using -printusage ./full-r8-config.txt instruction and checking the output. Classes mentioned in error details do not show up there.

UPDATE 1 day later: Really strange thing going on here. So far I have a verified backup plan: switching back to proguard fixes issue.

But in case if I want to stay with R8, here comes:

  • using -dontshrink, -dontoptimize and -dontobfuscate (all three at once) does no impact;

  • forcing specific apache.http version dependency does no impact;

  • I've checked mapping: neither Evernore SDK, nor Apache http classes don't get obfuscated;

  • issue pertains when app executed on api22 device (emulator, actually);

  • I was able to debug code once I had -dontobfuscate set. All goes well until Evernote's ClientFactory#createUserStoreClient decides to instantiate TEvernoteHttpClient - the moment program execution touches latter class's constructor - exception thrown.

It looks like it is all good to go, but this verifier fails.

Later update:

Issue filed as a bug for R8: https://issuetracker.google.com/issues/139268389. Please feel free to star it if facing similar situation (all code is in place but VerifyError is thrown)

0 投票
2 回答
1133 浏览

android - R8 问题:由于超出错误 GC 开销限制,无法设置 Proguard minifyEnabled

minifyEnabled true生成带有选项的发布包时出错。以下是给我错误的 Gradle 设置:

我还看到任务 transformClassesAndResourcesWithR8For... 需要太多时间(最多 10-20 分钟)

错误: java.lang.OutOfMemoryError: GC overhead limit exceeded在 Gradle 任务中 transformClassesAndResourcesWithR8ForCommonRelease

0 投票
2 回答
2415 浏览

android - 在启用 R8 的模块中发现重复的类

我创建了两个 aar 库:com.example:test1:1.0.0 和 com.example:test2:1.0.0。我将这些库添加到我的主应用程序中,构建 Android-Studio 后抛出错误:

Duplicate class com.example.utils.a found in modules classes.jar (com.example:test1:1.0.0) and classes.jar (com.example:test2:1.0.0)

我发现发生此错误是因为两个库在同一个包(com.example.utils)中都有类,并且在混淆后,R8 创建了具有相同全名的类(a.class)(我在 aar 的 classes.jar 中看到了这个)。如果我在我的库的属性中禁用 R8,这个错误就消失了。

'a' 不是库类:经过混淆处理后,所有库类名称保持不变,并且 a.class 由 R8 额外添加到包中。我阅读了 R8 文档并没有发现任何关于这个问题的信息。有什么方法可以解决这个问题,而无需在我的一个库中重新命名包?

0 投票
4 回答
20980 浏览

android - Gradle:DSL 元素“useProguard”已过时,将很快被删除

自 Android Studio 3.5 更新以来,我在构建我的应用程序时收到此警告:

DSL 元素“useProguard”已过时,很快将被删除。在 gradle.properties 中使用 'android.enableR8' 在 R8 和 Proguard 之间切换。

0 投票
1 回答
664 浏览

android-studio - 缺少类:com.fasterxml.jackson.core.type.TypeReference。R8:警告

在我将 Android Studio 更新到 3.5 之后,每当我构建我的项目时,我都会面临以下警告。

缺少类:com.fasterxml.jackson.core.type.TypeReference

在此处输入图像描述

我的项目正在使用AndroidX。这是我的build.gradle (app) https://gist.github.com/Arkar009/4ae5a05ff3435636bc605fee1fbdb050的要点。谁能知道为什么会发生此错误或解决此错误的替代方法?提前感谢。