Android Support v4 22.2.0的Proguard配置

21
在将Gradle Android构建中的依赖项更新为来自本地Maven extras存储库(位于SDK内部)的com.android.support:support-v4:22.2.0后,Proguard开始出现以下问题。
Warning: android.support.v4.app.DialogFragment: can't find referenced class android.support.v4.app.DialogFragment$DialogStyle
Warning: android.support.v4.app.FragmentTransaction: can't find referenced class android.support.v4.app.FragmentTransaction$Transit
Warning: android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$ResolvedLayoutDirectionMode
Warning: android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$LayoutDirectionMode
Warning: android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$LayerType
Warning: android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$AccessibilityLiveRegion
Warning: android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$ImportantForAccessibility
Warning: android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$OverScroll
Warning: android.support.v4.widget.DrawerLayout: can't find referenced class android.support.v4.widget.DrawerLayout$EdgeGravity
Warning: android.support.v4.widget.DrawerLayout: can't find referenced class android.support.v4.widget.DrawerLayout$LockMode
Warning: android.support.v4.widget.DrawerLayout: can't find referenced class android.support.v4.widget.DrawerLayout$State
Warning: there were 11 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)

只需添加-dontwarn android.support.v4.**即可解决问题,但我希望有一个更具体/优雅的解决方案,而不是忽略support.v4包中的所有问题。

有人能告诉我应该添加什么规则,以便Proguard正确处理这些类/@接口吗?


1
我遇到了同样的问题。 - sanath01
1
尽管我也遇到过很多次这个问题,但我唯一的解决办法就是使用“-dontwarn”。 - Amrut Bidri
2个回答

16

唯一的解决方法就是你提到的,即使用-dontwarn android.support.v4.**。这实际上来自于 <path-to-android-sdk>/tools/proguard/proguard-android.txt,其中写道:

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn android.support.**

4
根据Android团队的说法,设置“不警告”支持库类是安全的。您可以通过以下方式完成:

## Support library
-dontwarn android.support.**

不是,但构建过程是的,这让我感到担忧。 - Marek Sebera
是的,但警告也不是没有原因的,这对我来说就像忽略 Lint 警告一样。 - Marek Sebera
2
@MarekSebera,答案由Google自己在<path-to-android-sdk>/tools/proguard/中的proguard-android.txt中给出。它说:#支持库包含对较新平台版本的引用。 #如果此应用程序链接到旧版平台,请勿警告这些内容。我们知道它们,并且它们是安全的。 - Sufian
@Sufian,好的,我检查了一下,你是对的,我不知道这个文件。谢谢! - Marek Sebera
1
@Sufian 把你的评论变成答案,我会接受它作为正确答案,这个答案并不完全相同于 proguard-android.txt 的内容,所以这是你的机会。 - Marek Sebera
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接