繁体   English   中英

在尝试一些ProGuard规则后,使用ProGuard导致构建失败或用空UI强制关闭

[英]Using ProGuard causing unsuccessful build or force close with empty UI after trying some ProGuard rules

我在应用中使用ProGuard并缩小资源功能,如下所示:

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

当我构建应用程序时,它会显示一些警告,但构建失败,如下所示:

Information:Gradle tasks [:app:assembleRelease]
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find superclass or interface java.awt.datatransfer.Transferable
Warning:org.apache.harmony.awt.datatransfer.NativeClipboard: can't find superclass or interface java.awt.datatransfer.Clipboard
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.Sasl
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.SaslClient
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.SaslException
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.SaslClient
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.SaslException
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator$1: can't find referenced class javax.security.auth.callback.NameCallback
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator$1: can't find referenced class javax.security.sasl.RealmCallback
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator$1: can't find referenced class javax.security.sasl.RealmChoiceCallback
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator$1: can't find referenced class javax.security.auth.callback.NameCallback
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator$1: can't find referenced class javax.security.sasl.RealmCallback
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator$1: can't find referenced class javax.security.sasl.RealmChoiceCallback
Warning:javax.activation.CommandInfo: can't find referenced class java.beans.Beans
Warning:okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning:okio.Okio: can't find referenced class java.nio.file.Files
Warning:okio.Okio: can't find referenced class java.nio.file.Path
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning:okio.Okio: can't find referenced class java.nio.file.Path
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning:okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning:okio.Okio: can't find referenced class java.nio.file.Path
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning:okio.Okio: can't find referenced class java.nio.file.Path
Warning:okio.Okio: can't find referenced class java.nio.file.OpenOption
Warning:okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning:org.apache.harmony.awt.ContextStorage: can't find referenced class java.awt.Toolkit
Warning:org.apache.harmony.awt.ContextStorage: can't find referenced class java.awt.GraphicsEnvironment
Warning:org.apache.harmony.awt.ContextStorage: can't find referenced class java.awt.Toolkit
Warning:org.apache.harmony.awt.ContextStorage: can't find referenced class java.awt.GraphicsEnvironment
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.dnd.DropTargetContext
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.dnd.peer.DropTargetContextPeer
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.dnd.DragGestureEvent
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.dnd.peer.DragSourceContextPeer
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DTK: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataProvider: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.Transferable
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.UnsupportedFlavorException
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.Image
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.UnsupportedFlavorException
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.DirectColorModel
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.DataBufferInt
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.Raster
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.ComponentColorModel
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.color.ColorSpace
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.ComponentColorModel
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.DataBufferByte
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.Raster
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.DataBufferUShort
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.Image
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.ColorModel
Warning:org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class java.awt.image.WritableRaster
Warning:org.apache.harmony.awt.datatransfer.DataSnapshot: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataSnapshot: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.Transferable
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.Transferable
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.Image
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.Image
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.Graphics
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.WritableRaster
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.DataBufferInt
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.Transferable
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.Image
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.Graphics
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.BufferedImage
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.image.DataBufferInt
Warning:org.apache.harmony.awt.datatransfer.DataSource: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.Point
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceEvent
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceDropEvent
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceDragEvent
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.Point
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.Point
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.Point
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceContext
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.Point
Warning:org.apache.harmony.awt.datatransfer.DragSourceEventProxy: can't find referenced class java.awt.dnd.DragSourceDragEvent
Warning:org.apache.harmony.awt.datatransfer.FlavorsComparator: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.NativeClipboard: can't find referenced class java.awt.datatransfer.Clipboard
Warning:org.apache.harmony.awt.datatransfer.TextFlavor: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.TextFlavor: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.TextFlavor: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:org.apache.harmony.awt.datatransfer.TextFlavor: can't find referenced class java.awt.datatransfer.SystemFlavorMap
Warning:org.apache.harmony.awt.datatransfer.TextFlavor: can't find referenced class java.awt.datatransfer.DataFlavor
Warning:there were 261 unresolved references to classes or interfaces.
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first.
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> Job failed, see logs for details
Information:BUILD FAILED
Information:Total time: 3.68 secs
Information:1 error
Information:122 warnings
Information:See complete output in console

我尝试了一些ProGuard规则来避免该问题,它成功地构建了该应用程序。 但是,当我在设备上安装该应用程序并打开它时,它没有显示UI,然后设备冻结,然后被迫从系统关闭。

在我所遇到的情况下,谁能为我提供有关ProGuard的正确规则的帮助。

引用的类实际上不在您的项目或依赖项中,因此您无法保留它们。

有些库是依赖于新平台代码或其他库而构建的,但也可以在没有该库的情况下工作。 如果您的项目中未包含这些依赖项,则会收到警告。 所有这些都是完全可以预期的,您只需要告诉Proguard您对此有所了解。

例如,您使用依赖于java.nio的Okio,但仅在纯Java和Android O中可用。Okio设计为在没有java.nio的情况下工作,但是您必须告诉proguard您对此表示满意。 因此,您将此添加到您的proguard规则中:

# Okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**

您可以在这里找到其他库的更多规则: https : //github.com/krschultz/android-proguard-snippets/tree/master/libraries

如果您没有找到图书馆的规则,但是有信心图书馆可以正常工作并且只需要关闭保护器,则-dontwarn是您的朋友。 例如

-dontwarn org.apache.harmony.awt.datatransfer.DataProxy
-dontwarn org.apache.harmony.awt.datatransfer.NativeClipboard

或者如果您想关闭软件包中的所有内容

-dontwarn org.apache.harmony.awt.**

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM