- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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
规则;他们只会积累。proguard.txt
文件,因此您需要使用更新后的文件创建自定义 .aar 文件规则,或向库的开发人员发送建议。关于android - 我如何教 ProGuard 摆脱它保留的我不使用的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45718831/
我是一名优秀的程序员,十分优秀!