问题标签 [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 投票
1 回答
444 浏览

android - Android Studio 3.5 :此方法包含本机引用并将被缩小。[继续失踪]

昨天我将 Android Studio 更新到了新的 3.5 版本。重新启动我的电脑后,Android Studio 无法再编译我的应用程序。我有3个这样的错误:

App.java:29:错误:此方法包含本机引用并将被缩小。[继续失踪]

在两个不同的 Java 文件中,我在其中调用了一些本机方法

我知道 3.5 版将 R8 作为默认代码混淆器,因此在我的 build.gradle 中,我从我的调试/发布构建类型中注释了 useProguard false/true。现在看起来像这样:

我怎么解决这个问题?

0 投票
1 回答
2923 浏览

android - 如何在android中添加r8规则?

我们如何在 android 项目中为依赖项添加 R8 规则,并从缩小和混淆中排除文件和包?

0 投票
1 回答
1584 浏览

android - Android R8 找不到方法

我有两个问题。无论哪种方式,我都无法构建发布 apk。当我禁用 R8(首选 proguard)时,构建会永远持续下去(有时会崩溃,引用“内存不足:java 堆空间”),当我启用 R8 时,会出现以下错误:

我的项目级 build.gradle:

还有我的项目模块 build.gradle:

gradle.properties:

jvmargs 和 dexOptions 堆大小都被放在那里,试图解决“java 堆空间”问题,但他们没有。

0 投票
3 回答
9875 浏览

android-studio - R8 从 AndroidStudio 中抛出 NullPointerException,但不是从命令行通过 gradlew

问题

当我单击 Android Studio 中的调试图标时,我从 R8 获得了这个 NullPointerException。

但...

gradlew当我尝试通过从命令行运行进一步调查时,没有报告错误。

所以我不知道如何进行。这是一个商业媒体应用程序,已经通过了 beta 测试并应该发布......但现在这让我受阻。

到目前为止我尝试过的事情......

  1. 清理并重建
  2. 文件 -> 使缓存无效并重新启动
  3. 擦除项目 .gradle 和 user/.gradle 缓存,清理和重建
  4. gradle.config 中的 enableMultiDex = true
  5. 将 JVM 内存从 2MB 增加到 4MB
  6. 重新启动计算机

问题

  1. 如何解决此异常并摆脱困境?
  2. 是我的代码还是 R8 错误?
  3. 为什么我不能从命令行重现错误?
  4. Android Studio 是否在运行带有额外标志的 gradle 时没有报告?

版本信息

(在堆栈溢出中归档时,所有内容都应该是最新的)

  • 安卓工作室 3.5
  • 摇篮 5.4.1
  • Android Studio Gradle 插件 3.5.0
  • Java 1.8
  • 构建工具 28.0.3

构建.gradle =

gradle.properties =

0 投票
1 回答
1861 浏览

android - R8 去除反射所需的 Kotlin 伴生对象

我有一个带有实现工厂接口的伴随对象的类。

我有一些代码在运行时使用反射检查此类,以查看该类是否提供工厂方法。它通过检查该类是否具有伴随对象companionObjectInstance

这一切在调试版本中都可以正常工作。

它在启用 R8 的发布版本中失败(minifyEnabled truebuild.gradle中)。它失败了,因为companionObjectInstance返回null

我正在使用不优化Proguard 配置:

在我自己的proguard-rules.pro中,我添加了几乎所有-keep我能想象到的规则,试图保留这个伴随对象,并@Keep为所有内容添加了注释,但没有任何效果。R8决心将其剥离。

例如:

是否有任何其他-keep规则或配置选项可以指示 R8 保留此伴随对象?

0 投票
2 回答
544 浏览

android-r8 - r8类名的混淆图

我正在使用 r8 dexer 从一堆 *.class 文件中制作 classes.dex 文件。我想对我的所有类使用混淆功能,但问题是我也有指定类名的 AndroidManifest.xml 文件。因此,我必须知道 r8 转换从哪个名称到哪个名称,以便相应地更改我的 AndroidManifest.xml。问题是 - 如何制作这样的地图?

到目前为止,情况如下:

0 投票
1 回答
601 浏览

android - 混淆的 Android 库上的 java.lang.VerifyError

对于较少数量的设备,我们遇到了一个奇怪的异常,显然该类由于方法而未验证。不幸的是,我们无法用我们的设备重现这一点,并且堆栈跟踪来自 Fabric。

堆栈跟踪如下所示:

MyLibrary.java:317中的代码如下所示:

函数定义如下:

内部称之为:

请注意,堆栈跟踪在到达函数之前就结束了,所以我认为问题出在 lambda 函数中?还是在定义中?我不知道如何解决这个问题,但这是我们现在遇到的最常见的错误。它发生在随机设备上,Android OS 版本无关紧要。因此,如果有人可以提供帮助或提供一些反馈,我将不胜感激。谢谢。

0 投票
1 回答
108 浏览

java - 使用proguard构建应用程序时出现Android异常

我想使用 proguard 更改一个DigestUtils类的名称来克服这个问题Method not found using DigestUtils in Android。这是proguard-rules.pro文件(只有一行,只混淆一个文件):

这是应用程序build.gradle文件:

那么如果我尝试运行./gradlew assembleDebug --stacktrace我会得到这个异常:

0 投票
0 回答
395 浏览

java - 无法使用 R8 签署 APK

我正在准备将我的应用程序部署到playstore,我目前的专业是基于proguard,看来现在我们必须使用R8,所以我按照Android开发者网站上的指南进行操作,因为R8可以使用相同的proguard文件和配置,我只是简单地创建并添加了工作所需的规则。就在我准备注册时,我收到此错误:

C:\Users\bgatica\.gradle\caches\transforms-2\files-2.1\10d9066f27f47bf4c88827e811c3eb8a\obfuscation-dictionary.txt'

我去了那个路径,看起来那些文件是由 gradle 生成的?我在互联网上搜索了类似的错误或他们指导创建此文件的教程,但没有,您能帮帮我吗?

这是我的配置

这是我对 Proguard 的配置

0 投票
3 回答
1903 浏览

android - 构建 R8 失败 -> 错误:`dalvik.annotation.EnclosureClass` 类型的多个注释

我从命令行构建项目时遇到错误:

Android Studio 版本:3.5 Gradle 插件:3.5.1 Gradle:5.4.1