Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio Can';使用ProGuard缩小时,不要使用Android Studio构建APK_Android Studio_Apk_Proguard - Fatal编程技术网

Android studio Can';使用ProGuard缩小时,不要使用Android Studio构建APK

Android studio Can';使用ProGuard缩小时,不要使用Android Studio构建APK,android-studio,apk,proguard,Android Studio,Apk,Proguard,我在生成应用程序的APK时遇到问题 如果我调试/运行应用程序,它会正常工作。但是当我尝试生成相应的APK时,Android Studio给了我很多警告和一个错误: Note: there were 159 duplicate class definitions. (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass) Warning:com.thoughtworks.xstream.conver

我在生成应用程序的APK时遇到问题

如果我调试/运行应用程序,它会正常工作。但是当我尝试生成相应的APK时,Android Studio给了我很多警告和一个错误:

Note: there were 159 duplicate class definitions.
  (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)
Warning:com.thoughtworks.xstream.converters.reflection.CGLIBEnhancedConverter$ReverseEngineeredCallbackFilter: can't find superclass or interface net.sf.cglib.proxy.CallbackFilter
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:library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser
Warning:library class org.apache.http.auth.AuthenticationException extends or implements program class org.apache.http.ProtocolException
[...]
Warning:library class org.apache.http.impl.conn.LoggingSessionOutputBuffer extends or implements program class org.apache.http.io.SessionOutputBuffer
Warning:com.itextpdf.testutils.ITextTest: can't find referenced class javax.management.OperationsException
Warning:com.itextpdf.text.pdf.BarcodeCodabar: can't find referenced class java.awt.Color
[...]
Warning:com.itextpdf.text.pdf.security.MakeXmlSignature: can't find referenced class javax.xml.crypto.dsig.spec.C14NMethodParameterSpec
[...]
Warning:com.sun.mail.handlers.image_gif: can't find referenced class java.awt.datatransfer.DataFlavor
[...]
Warning:com.sun.mail.imap.protocol.IMAPSaslAuthenticator: can't find referenced class javax.security.sasl.Sasl
[...]
Warning:com.thoughtworks.xstream.converters.extended.ColorConverter: can't find referenced class java.awt.Color
[...]
Warning:org.apache.harmony.awt.ContextStorage: can't find referenced class java.awt.Toolkit
[...]
Warning:org.spongycastle.jce.provider.X509LDAPCertStoreSpi: can't find referenced class javax.naming.directory.InitialDirContext
[...]
Warning:library class android.content.Intent depends on program class org.xmlpull.v1.XmlPullParser
[...]
Warning:library class org.apache.http.client.HttpClient depends on program class org.apache.http.HttpResponse
[...]
Warning:library class org.xmlpull.v1.XmlPullParserFactory depends on program class org.xmlpull.v1.XmlPullParser
Warning:there were 1077 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)
Warning:there were 141 instances of library classes depending on program classes.
         You must avoid such dependencies, since the program classes will
         be processed, while the library classes will remain unchanged.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#dependency)
Warning:there were 5 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)
:vet:proguardInternalRelease FAILED
Error:Execution failed for task ':PROJECTNAME:proguardInternalRelease'.
> java.io.IOException: Please correct the above warnings first.
Information:BUILD FAILED
Information:Total time: 13.878 secs
Information:1 error
Information:679 warnings
Information:See complete output in console
该项目由库项目构成,在
设置中作为外部项目导入。gradle

include ':library'
project(':library').projectDir = new File(settingsDir, '../Library/library')
与所有的依赖关系

库的
build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
        multiDexEnabled true
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

}

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:support-v13:21.0.+'
    compile 'com.android.support:multidex:1.0.0'
    compile('ch.acra:acra:4.5.0') {
        exclude group: 'org.json'
    }
    compile 'org.apache.httpcomponents:httpcore:4.3'
    compile('org.apache.httpcomponents:httpmime:4.3.1') {
        exclude group: 'org.apache.httpcomponents', module: 'httpcore'
        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
    }
    compile('javax.mail:mail:1.4.7') {
        exclude module: 'activation'
    }
    compile 'com.madgag.spongycastle:pkix:1.50.0.0'
    compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1'
    compile ('com.itextpdf.tool:xmlworker:5.5.1'){
        exclude module: 'itextpdf'
    }
    compile('com.thoughtworks.xstream:xstream:1.4.4') {
        exclude group: 'xmlpull', module: 'xmlpull'
    }
    compile 'com.google.zxing:core:3.0.1'
    compile files('libs/activation.jar')
    compile files('libs/additionnal.jar')
    compile files('libs/miniTemplator.jar')
    compile files('libs/itextg-5.5.1.jar')
}
项目
build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "my.package.name"
        minSdkVersion 15
        targetSdkVersion 21
        multiDexEnabled true
    }

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

    productFlavors {
        def BOOLEAN = "boolean"
        def TRUE = "true"
        def FALSE = "false"
        def A_FIELD= "A_FIELD"

        internal {
            buildConfigField BOOLEAN, A_FIELD, FALSE
        }

        official {
            buildConfigField BOOLEAN, A_FIELD, TRUE
        }
    }


    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

dependencies {
    compile project(':library')
}

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex'
    }
}
如何修复它,以便可以编译APK

编辑:在我的proguard-rules.pro中添加了很多-dontwarn选项后,我还是得到了错误,我无法解决这些警告(有一些提示,但不是针对这些警告…):


这些都是令人讨厌的清理。更好的库现在在库包中包含了它们的设置,但更老(或更懒)的库仍然没有。以下是我遵循的过程:

在开发过程中:
  • 每当包含一个新库时,请确保检查其文档以了解其建议的ProGuard设置。(如果您对此很认真,那么可以避免以后的大量混乱和挖掘。)
  • 如果库作者提供了一个AAR包(例如,在gradle依赖项行的末尾添加“@AAR”以获得完整的AAR,而不是更简单的JAR),那么他们甚至可能会在其中为您包含必要的ProGuard异常,这些异常将自动获取。(但根据我的经验,大多数作者还没有迈出这一步。)
  • 每当在需要动态内省的自定义代码中添加新的名称空间/类时,例如在使用依赖项注入容器或JSON解析器时,请确保ProGuard设置为根据它们的包名拾取它们,或者自己一次添加一个类
生成并获取错误后:
  • 从以前缀
    error:
    开头的所有行开始,然后是
    warning:
    注意:
    行不会停止生成)
  • 检查每行提到的名称空间。查找关联的库(例如
    com.newrelic.SomeClass
    可能是用于newrelic库的)。如果您找不到它,请尝试谷歌搜索,看看名称空间是否可以帮助您跟踪github
    自述文件
    ,或者其他可能识别名称空间包含哪个库的内容。或者,检查Android Studio>Project>Packages>Libraries列表(第一次显示需要一段时间),并在那里跟踪名称空间。希望源代码可用,并在文件头注释中包含库的详细信息
  • 查找该库的文档。希望它提到了必要的ProGuard更改
  • 重建
图书馆文档中所说的所有更改都已存在,但仍会收到警告:
  • 开始添加
    -dontwarn
    行。例如:
    -dontwarn com.newrelic.*
    (不要忘记双星号,这样它会忽略该名称空间下的整个树;否则一个星号只会忽略名称空间的直接子级。)
  • 如果您开始使用blind
    dontwarn
    语句,您必须测试已编译的应用程序(APK)因为它现在很可能会在您身上崩溃,即使调试(非ProGuard)版本一直运行良好。确保测试您使用的所有库,检查logcat消息,并确保使用
    dontwarn
    练习您盲目跳过的所有代码路径/类
去他妈的,我老板说我已经发布了这个东西:
  • 禁用ProGuard:-(
使用Android Studio中的“项目属性”对话框,或者编辑模块
build.gradle
文件并更改
Android{buildTypes{release{minifyEnabled true}}
并将其设置为false

你不会得到ProGuard的优化,APK会更大,代码也不会变得模糊。但是如果你的老板现在需要它,而你没有时间调试,那么禁用它也不会是世界末日


虽然你真的应该使用ProGuard。也许是时候和老板谈谈,让开发人员有更多的时间做我们需要做的无聊的技术工作了。

检查你收到的每一条警告/错误消息,我在ProGuard-rules.pro中添加了很多-dontwarn选项,跟随你的链接,但即使我没有警告,我也得到了e不管怎样,我更新了问题。。。
Warning:com.itextpdf.text.pdf.security.PdfPKCS7: can't find referenced method 'ASN1Integer(int)' in program class org.spongycastle.asn1.ASN1Integer
Warning:com.sun.activation.viewers.ImageViewer: can't find referenced method 'java.awt.Component add(java.awt.Component)' in program class com.sun.activation.viewers.ImageViewer
Warning:com.sun.activation.viewers.ImageViewer: can't find referenced method 'java.awt.Toolkit getToolkit()' in program class com.sun.activation.viewers.ImageViewer
Warning:com.sun.activation.viewers.ImageViewer: can't find referenced method 'void invalidate()' in program class com.sun.activation.viewers.ImageViewer
Warning:com.sun.activation.viewers.ImageViewer: can't find referenced method 'void validate()' in program class com.sun.activation.viewers.ImageViewer
Warning:com.sun.activation.viewers.ImageViewer: can't find referenced method 'void doLayout()' in program class com.sun.activation.viewers.ImageViewer
Warning:com.sun.activation.viewers.ImageViewerCanvas: can't find referenced method 'void invalidate()' in program class com.sun.activation.viewers.ImageViewerCanvas
Warning:com.sun.activation.viewers.ImageViewerCanvas: can't find referenced method 'void repaint()' in program class com.sun.activation.viewers.ImageViewerCanvas
Warning:com.sun.activation.viewers.TextEditor: can't find referenced method 'void setLayout(java.awt.LayoutManager)' in program class com.sun.activation.viewers.TextEditor
Warning:com.sun.activation.viewers.TextEditor: can't find referenced method 'void invalidate()' in program class com.sun.activation.viewers.TextEditor
Warning:com.sun.activation.viewers.TextViewer: can't find referenced method 'void setLayout(java.awt.LayoutManager)' in program class com.sun.activation.viewers.TextViewer
Warning:com.sun.activation.viewers.TextViewer: can't find referenced method 'java.awt.Component add(java.awt.Component)' in program class com.sun.activation.viewers.TextViewer
Warning:com.sun.activation.viewers.TextViewer: can't find referenced method 'void invalidate()' in program class com.sun.activation.viewers.TextViewer
Warning:javax.activation.ActivationDataFlavor: can't find referenced method 'boolean isMimeTypeEqual(java.awt.datatransfer.DataFlavor)' in program class javax.activation.ActivationDataFlavor
Warning:there were 14 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)
:vet:proguardInternalRelease FAILED
Error:Execution failed for task ':vet:proguardInternalRelease'.
> java.io.IOException: Please correct the above warnings first.