I have a problem creating the APK of my apps.
If I debug / run the application, it works fine. But when I try to generate the corresponding APK, Android Studio gives me a lot of warnings and one error:
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
A project is formed from a library project imported as an external project, similar to this in settings.gradle :
include ':library' project(':library').projectDir = new File(settingsDir, '../Library/library')
with all the dependencies.
build.gradle library
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') }
and the build.gradle project is
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' } }
How to do this so that the APK can be compiled?
EDIT: after adding a lot of -dontwarn options to proguard-rules.pro, I still got an error, and I cannot resolve these warnings ( There are some tips here, but not for these warnings ...):
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.