将带有 proguard 的 Android 项目迁移到 R8,缺少 rt.java 文件,Android Studio 4.2

     2023-03-17     13

关键词:

【中文标题】将带有 proguard 的 Android 项目迁移到 R8,缺少 rt.java 文件,Android Studio 4.2【英文标题】:Migrating Android project with proguard to R8, missing rt.java file, 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。

【问题讨论】:

【参考方案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 版本之后。

【讨论】:

带有 Gradle 和 Proguard 的 Android

】带有Gradle和Proguard的Android【英文标题】:AndroidwithGradleandProguard【发布时间】:2014-03-0815:19:26【问题描述】:我刚刚使用Gradle创建了一个新的Android库项目,并希望通过Proguard优化和混淆代码。这是build.gradle文件的android部分:andr... 查看详情

将 ProGuard / Dexguard 与多个 Android Studio 模块一起使用

】将ProGuard/Dexguard与多个AndroidStudio模块一起使用【英文标题】:UsingProGuard/DexguardwithmultipleAndroidStudioModules【发布时间】:2015-05-2917:15:23【问题描述】:我有一个带有两个模块的AndroidStudioandroid项目,模块A和模块B。我正在构建和... 查看详情

Android Proguard 跳过外部 jar

】AndroidProguard跳过外部jar【英文标题】:AndroidProguardskipexternaljar【发布时间】:2011-06-2202:52:46【问题描述】:我尝试在我的Android项目中使用Proguard,我使用命令行“androidupdateproject/path/to/project”设置Proguard,并在项目的根目录中... 查看详情

带有 proguard 的 Android ant build.xml 未在发行版中构建

】带有proguard的Androidantbuild.xml未在发行版中构建【英文标题】:Androidantbuild.xmlwithproguarddoesnotbuildinrelease【发布时间】:2012-08-1708:11:13【问题描述】:我有以下项目设置:两个库“commoncomponents”和“libs”都定义了一些活动,例如... 查看详情

Android Proguard,删除所有Log语句并合并包

】AndroidProguard,删除所有Log语句并合并包【英文标题】:AndroidProguard,removingallLogstatementsandmergingpackages【发布时间】:2011-05-2501:27:30【问题描述】:我的项目中有大约5个包,是否可以将所有包合并为一个大包,我想这样做以使黑... 查看详情

dagger android支持proguard规则

】daggerandroid支持proguard规则【英文标题】:daggerandroidsupportproguardrules【发布时间】:2018-02-0502:08:13【问题描述】:我正在使用带有Proguard的Dagger2android-support库,但由于此错误,我无法编译我的项目:Warning:dagger.android.AndroidInjector:... 查看详情

带有 Android 的 ProGuard:java.lang.NoSuchMethodError:android.util.Xml.asAttributeSet

】带有Android的ProGuard:java.lang.NoSuchMethodError:android.util.Xml.asAttributeSet【英文标题】:ProGuardwithAndroid:java.lang.NoSuchMethodError:android.util.Xml.asAttributeSet【发布时间】:2013-05-0416:53:38【问题描述】:当ProGuard被禁用时,我的应用程序可... 查看详情

Proguard 可以混淆 Android 库项目 (APKLIB) 吗?

】Proguard可以混淆Android库项目(APKLIB)吗?【英文标题】:CananAndroidLibraryProject(APKLIB)beobfuscatedbyProguard?【发布时间】:2012-10-1014:30:52【问题描述】:我正在尝试混淆一个Android库项目(APKLIB),允许将该库分发给潜在客户进行测试开发... 查看详情

带有proguard的Android应用程序在发布时崩溃

】带有proguard的Android应用程序在发布时崩溃【英文标题】:AndroidAppcrashesonreleasewithproguard【发布时间】:2019-09-2519:31:54【问题描述】:当我创建发布版本时,我的应用程序崩溃。该应用程序正常运行,突然之间发生了这种情况。... 查看详情

使用 Android 库项目设置 ProGuard

】使用Android库项目设置ProGuard【英文标题】:SettingupProGuardwithAndroidLibraryProjects【发布时间】:2013-02-1611:09:06【问题描述】:我正在尝试为我的Android项目设置proguard。我的应用程序项目中的代码很少,但引用了一个包含绝大多数... 查看详情

使用 Scala 编写的库在 Android 应用上运行 Proguard

】使用Scala编写的库在Android应用上运行Proguard【英文标题】:RunningProguardonAndroidappwithlibswritteninScala【发布时间】:2012-07-2205:38:21【问题描述】:我有一个将用Java编写的android项目,但将使用一些用Scala编写的库。我正在使用AndroidP... 查看详情

Android 库中的 Proguard

】Android库中的Proguard【英文标题】:ProguardinAndroidLibrary【发布时间】:2013-08-1415:30:30【问题描述】:我在使用Android中的Proguard文件时遇到错误。关键是,我知道如何在Android项目中使用它,但是现在,我需要将它用于Android库项目... 查看详情

Android Proguard 重复定义

】AndroidProguard重复定义【英文标题】:AndroidProguardDuplicateDefinition【发布时间】:2012-02-0700:11:38【问题描述】:我正在尝试将第3方库(JmDNS)添加到我的Android项目中。我在基础项目目录下创建了一个文件夹“libs”,并将jar文件放在... 查看详情

在 Eclipse 中使用 Proguard for Android 出错

】在Eclipse中使用ProguardforAndroid出错【英文标题】:UsingProguardforAndroidinEclipsegotError【发布时间】:2011-05-2404:54:04【问题描述】:我已经全新安装了Eclipse和所有最新的Android工具,并希望在现有项目上使用Proguard,但现在我创建了一... 查看详情

带有 proguard 的 Kotlin AAR 库:如何只保留类和方法名?

】带有proguard的KotlinAAR库:如何只保留类和方法名?【英文标题】:KotlinAARlibraryw/proguard:HowtokeepONLYclassandmethodnames?【发布时间】:2020-04-2323:34:59【问题描述】:我正在使用Kotlin构建一个android库(aar文件)。我需要以第3方用户将... 查看详情

使用 ProGuard 混淆 Android 库项目源代码

】使用ProGuard混淆Android库项目源代码【英文标题】:ObfuscatingAndroidLibraryProjectsourcecodewithProGuard【发布时间】:2014-05-3123:34:49【问题描述】:我正在使用Eclipse开发一个想要获得许可的Android库项目。为了防止我的客户轻松地进行逆... 查看详情

如何从 Proguard(Android 项目)的混淆中排除外部 .jar?

】如何从Proguard(Android项目)的混淆中排除外部.jar?【英文标题】:HowcanIexcludeexternal.jarfromobfuscationbyProguard(Androidproject)?【发布时间】:2011-05-2709:08:05【问题描述】:当我使用proguard.cfg导出android项目时,所有引用的.jar文件也会... 查看详情

使用 Ant 和 Proguard 编译 Android 应用程序的问题

】使用Ant和Proguard编译Android应用程序的问题【英文标题】:ProblemscompilinganAndroidAppwithAntandProguard【发布时间】:2012-02-1300:56:05【问题描述】:我有一个包含不同模块的Android应用程序。Main模块使用了一些库,例如Google的GSON或v4.supp... 查看详情