R8/Proguard 保留父包而不保留特定子包

问题描述 投票:0回答:1

我正在使用的库或依赖项在其子包之一中存在安全问题。假设包的名称是父包,导致问题的子包的名称是子包,不幸的是我必须保留包才能使应用程序正常工作,否则我会遇到著名的崩溃,提示没有此类方法异常管他呢。所以我需要保留包裹。问题是,当将 apk 上传到 google play 控制台时,我在该第三方包的子包之一内遇到了安全问题。有没有办法让 R8/Proguard 只保留父级但删除子级。

我尝试使用聊天 gpt,得到了这个答案,但我认为它不起作用:

-keep class com.example.parent.** {
    *;
    !public class com.example.parent.child;
}

我阅读了 Android 中 R8 的整个文档,并且总体上还阅读了 Proguard 的文档,但我认为我找不到任何有用的东西。

android proguard android-r8
1个回答
0
投票

基于这个答案,您可以保留整个包并排除一个子包,如下所示:

-keep class !com.example.parent.child.**, com.example.parent.** { *; }

请注意,如果保留类引用了

child
包中的类,收缩器可能仍会保留这些类。在这种情况下,请使用
-whyareyoukeeping
指令找出原因。

此问题的另一个可能的解决方法是通过删除不需要的子包来编辑库本身。

© www.soinside.com 2019 - 2024. All rights reserved.