gpt4 book ai didi

android - 我如何教 ProGuard 摆脱它保留的我不使用的东西?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:14 25 4
gpt4 key购买 nike

我有一个 Android 项目,其中包含用于 app 模块的 proguard-rules.pro 文件,其中仅包含以下内容:

# ProGuard rules
-dontobfuscate
-dontwarn android.arch.util.paging.CountedDataSource
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource

我自己没有保留任何东西。所有 -keep 规则都来自其他东西,无论是 getDefaultProguardFile('proguard-android-optimize.txt') 提供的规则还是来自打包在库中的规则。

但是,我没有使用的东西被保留了下来。如果我在我的 release 构建中使用 Android Studio APK 分析器,虽然 ProGuard 删除了很多东西,但还有很多其他东西我没有引用。 p>

例如:通过传递依赖项,我在应用程序的依赖项树中有包含 ViewPager 的支持库模块。但是,我(目前)没有在此应用程序中使用 ViewPager。尽管如此,某些原因导致它被保留,因为 APK 分析器显示了 107 个为 android.support.v4.view.ViewPager 定义的方法,包括它的构造函数。

我可以使用各种 ProGuard 选项来追踪为什么要保留它。但是,它不是来 self 的规则。我自己没有需要修复的 -keep-keep 来自其他人,大概是 Google 工程师。

那么,我该如何摆脱 ViewPager?有没有一种方法可以覆盖导致它被保留的 -keep 规则(例如,使用 allowshrinking)?如果是这样,Android Studio 调用的 ProGuard 如何确定谁的 -keep 规则获胜?

最佳答案

ViewPager 类并没有保存在我刚刚检查的一个小应用程序中,因此它必须确实是您项目中的其他代码或其他规则。

您可以从让 ProGuard 打印出触发 ViewPager 的链开始:

-whyareyoukeeping class android.support.v4.view.ViewPager

您可能需要对各种类和方法重复多次,才能找到根本原因。 ProGuard 不会打印出具体负责的规则——诚然,这将是一个有用的功能。

然后您可以在 build/intermediates/exploded-aar 中查找包含匹配规则的 proguard.txt 文件。

至于当时的解决方案:

  • 不可能覆盖-keep规则;他们只会积累。
  • 据我所知,Android Gradle 插件也不支持禁用库中过于保守的 proguard.txt 文件,因此您需要使用更新后的文件创建自定义 .aar 文件规则,或向库的开发人员发送建议。

关于android - 我如何教 ProGuard 摆脱它保留的我不使用的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45718831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com