【问题标题】:Migrating Android project with proguard to R8, missing rt.java file, Android Studio 4.2将带有 proguard 的 Android 项目迁移到 R8,缺少 rt.java 文件,Android Studio 4.2
【发布时间】:2021-08-06 23:43:34
【问题描述】:

我将我的 Android Studio 版本从 4.1 更新到 4.2 并且项目没有编译,因为 Proguard 版本非常旧 (4.7) 并且与 Java 10 不兼容,但是我决定将我的项目从 proguard 迁移到 R8,但由于此错误,项目未编译:

File not found: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/lib/rt.jar

然后我将 R8 设置为 false 并使用 Proguard 将此行添加到我的 build.gradle 以将我的 Proguard 更新到更高版本:

classpath 'net.sf.proguard:proguard-gradle:6.1.1'

但是,我还是遇到了同样的错误,而不是第一个告诉我更新 Proguard 新版本的错误。

那么我该如何修复那个 rt.jar?也许从一个 AS 版本和另一个版本发生了一些目录更改?,如果我将我的 android studio 降级到 4.1 并恢复我所做的所有更改,该项目工作正常,但我想升级 Android Studio。

【问题讨论】:

    标签: android android-studio jar proguard android-r8


    【解决方案1】:

    从 JDK 9 开始,rt.jar 不再是 JDK 的一部分,有关详细信息,请参阅 Removed rt.jar and tools.jar in JDK 9

    在大多数情况下,如果需要在 JDK 8 中的 rt.jar 工作之前编译需要 rt.jar

    但是,在 Android 项目中使用rt.jar 的原因是什么?通常,Android Studio/AGP 在收缩时提供的android.jar 应该可以工作。

    【讨论】:

    • 嗨,谢谢你的回答,其实我不知道 AS 需要这个,这个问题只发生在 Android Studio 4.2 上,我在 Android 4.1 上打开了我的项目,然后我启用了 R8,项目是在那个版本上编译得很好,但是如果我将 AS 更新到 4.2,我会收到找不到 rt.jar 文件的错误。但还没有找到解决办法。
    • 从 jdk8 复制 rt.jar 不是一个可行的解决方案
    • 首先要做的是找到对rt.jar 的引用在您的配置中的位置。通常一个 AS 项目不会有对rt.jar 的引用,所以它一定是以某种方式添加到项目配置中的。
    • @sgjesse 在项目文件上:proguard-rules.pro 我有这句话,这是整个项目中 rt.jar 命名的唯一图片:-libraryjars / lib/rt.jar,这可能是问题吗?我会尝试删除它,看看它是怎么回事
    • 是的,删除-libraryjars <java.home>/lib/rt.jar 应该是正确的方法。 AGP 会为编译 SDK 隐式添加 android.jar 作为库路径。
    【解决方案2】:

    从 proguard.txt 中删除 -libraryjars /lib/rt.jar 应该是正确的方法

    @sgjesse 作为评论提到,应在回答中标记。

    仅适用于 java 8 版本之后。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 2015-03-11
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      相关资源
      最近更新 更多