首页 文章

Proguard导致100“无法找到引用类”警告,忽略了springframework和jackson的规则

提问于
浏览
1

我的代码在调试模式下编译并运行良好,但是一旦我使用minifyEnabled的构建配置为true,我会收到这些警告,这会阻止编译:

警告:有100个未解析的类或接口引用 . 警告:程序类成员有2个未解析的引用 .

为了便于阅读,我将在底部包含完整输出 . 导致这些警告的有两个库,springframework和jackson . 这些库通过gradle包含在我的项目中,如下所示:

compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-core:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.5'

apt "org.androidannotations:rest-spring:$AAVersion"
compile "org.androidannotations:rest-spring-api:$AAVersion"     
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M3'

如果我对这两个库使用-dontwarn,就像许多人建议的那些类型的问题一样,应用程序编译但在启动期间崩溃与崩溃的崩溃日志 - 我尝试用映射文件回溯它,但这也没有用 - 我m合理地确定应用程序在初始化jackson映射类时由于自动生成(通过android注释)类RestClient_而崩溃,例外情况如下:

java.lang.NoSuchFieldError:没有类型为Lcom / myapp / app / mv $ a的静态字段PUBLIC_ONLY;在课堂Lcom / myapp / app / mv $ a;或其超类('com.myapp.app.mv $ a'的声明出现在/data/app/com.myapp.app-1/base.apk中)

虽然在不同的手机上,例外没有消息 . 很明显,这是proguard的结果 .

我的完整proguard文件可以在这里找到https://gist.github.com/Syzygy2048/02a44032611d40720bad36b5e3b37db6


以下是我已经尝试过的一些事情(我尝试了更多,但我只是在一段时间后开始写下来) . 尝试的重点是首先修复 spring 框架 . (不得不把它放在一个要点,因为stackoverflow不会让我发布否则)

https://gist.github.com/Syzygy2048/f1bdabc9f2ea091aa8faec67c62dd8bb


完整错误日志:

信息:Gradle任务[:myappApp:assembleMyappPublicRelease]警告:org.springframework.core.convert.support.ConvertingPropertyEditorAdapter:找不到超类或接口java.beans.PropertyEditorSupport警告:com.fasterxml.jackson.databind.ext.DOMSerializer :找不到引用的类org.w3c.dom.bootstrap.DOMImplementationRegistry警告:com.fasterxml.jackson.databind.ext.Java7SupportImpl:找不到引用的类java.beans.Transient警告:com.fasterxml.jackson.databind .ext.Java7SupportImpl:找不到引用的类java.beans.ConstructorProperties警告:com.fasterxml.jackson.databind.ext.Java7SupportImpl:找不到引用的类java.nio.file.Path警告:com.fasterxml.jackson .databind.ext.Java7SupportImpl:找不到引用的类java.beans.Transient警告:com.fasterxml.jackson.databind.ext.Java7SupportImpl:找不到引用的类java.beans.ConstructorProperties警告:com.fasterxml.jackson .databind.ext.Java7SupportImpl:无法找到refere nced类java.beans.Transient警告:com.fasterxml.jackson.databind.ext.Java7SupportImpl:找不到引用的类java.beans.ConstructorProperties警告:com.fasterxml.jackson.databind.ext.Java7SupportImpl:找不到引用类java.beans.Transient警告:com.fasterxml.jackson.databind.ext.Java7SupportImpl:找不到引用的类java.beans.ConstructorProperties警告:com.fasterxml.jackson.databind.ext.NioPathDeserializer:找不到引用类java.nio.file.Path警告:com.fasterxml.jackson.databind.ext.NioPathDeserializer:找不到引用的类java.nio.file.Paths警告:com.fasterxml.jackson.databind.ext.NioPathDeserializer:找不到引用类java.nio.file.Path警告:com.fasterxml.jackson.databind.ext.NioPathSerializer:找不到引用类java.nio.file.Path警告:org.springframework.core.convert . support.ConvertingPropertyEditorAdapter:找不到引用的类java.beans.PropertyEditorSupport警告:org.springframework . core.convert.support.ConvertingPropertyEditorAdapter:在程序类org.springframework.core.convert.support.ConvertingPropertyEditorAdapter中找不到引用的方法'void setValue(java.lang.Object)'警告:org.springframework.core.convert.support .ConvertingPropertyEditorAdapter:在程序类org.springframework.core.convert.support.ConvertingPropertyEditorAdapter中找不到引用的方法'java.lang.Object getValue()'警告:org.springframework.core.convert.support.ConvertingPropertyEditorAdapter:不能查找引用类java.beans.PropertyEditorSupport警告:org.springframework.http.client.HttpComponentsClientHttpRequest:找不到引用的类org.apache.http.entity.ByteArrayEntityHC4警告:org.springframework.http.client.HttpComponentsClientHttpRequest:不能查找引用类org.apache.http.impl.client.CloseableHttpClient警告:org.springframework.http.client.HttpComponentsClientHttpRequest:找不到引用的类org.apache.http.client.met hods.CloseableHttpResponse警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.impl.client.HttpClients警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.impl.client.CloseableHttpClient警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache .http.client.protocol.HttpClientContext警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.methods.Configurable警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:can找不到引用类org.apache.http.client.config.RequestConfig警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.config.RequestConfig $ Builder警告:org .springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.config.RequestConfig警告:org.springframework.http.client.HttpComponentsClientHttpReques tFactory:找不到引用的类org.apache.http.client.methods.HttpGetHC4警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.methods.HttpDeleteHC4警告: org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.methods.HttpHeadHC4警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http .client.methods.HttpOptionsHC4警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.methods.HttpPostHC4警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:不能找到引用的类org.apache.http.client.methods.HttpPutHC4警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.methods.HttpTraceHC4警告:o rg.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.methods.HttpPatch警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http .impl.client.CloseableHttpClient警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.config.RequestConfig警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:不能查找引用类org.apache.http.impl.client.HttpClients警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.protocol.HttpClientContext警告:org.springframework.http .client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.config.RequestConfig警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用erenced类org.apache.http.client.config.RequestConfig $ Builder警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.impl.client.CloseableHttpClient警告:org.springframework . http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.client.config.RequestConfig警告:org.springframework.http.client.HttpComponentsClientHttpRequestFactory:找不到引用的类org.apache.http.impl.client .CloseableHttpClient警告:org.springframework.http.client.HttpComponentsClientHttpResponse:找不到引用的类org.apache.http.client.methods.CloseableHttpResponse警告:org.springframework.http.client.HttpComponentsClientHttpResponse:找不到引用的类org .apache.http.util.EntityUtilsHC4警告:org.springframework.http.client.HttpComponentsClientHttpResponse:找不到引用的类org.apache.http.client.methods.CloseableHttpResponse警告:org.springfram ework.http.client.HttpComponentsClientHttpResponse:找不到引用的类org.apache.http.util.EntityUtilsHC4警告:org.springframework.http.client.HttpComponentsClientHttpResponse:找不到引用的类org.apache.http.client.methods .CloseableHttpResponse警告:org.springframework.http.client.HttpComponentsStreamingClientHttpRequest:找不到引用的类org.apache.http.impl.client.CloseableHttpClient警告:org.springframework.http.client.HttpComponentsStreamingClientHttpRequest:找不到引用的类org .apache.http.client.methods.CloseableHttpResponse警告:org.springframework.http.converter.xml.SimpleXmlHttpMessageConverter:找不到引用的类org.simpleframework.xml.core.Persister警告:org.springframework.http.converter.xml .SimpleXmlHttpMessageConverter:找不到引用的类org.simpleframework.xml.Root警告:org.springframework.http.converter.xml.SimpleXmlHttpMessageConverter:找不到引用的类org.simpleframework.xml.Serializer警告:有100个未解析的类或接口引用 . 警告:程序类成员有2个未解析的引用 . 警告:处理任务java.io.IOException时发生异常:请先纠正上述警告 . 错误:任务':myappApp:transformClassesAndResourcesWithProguardForMyappPublicRelease'的执行失败 . 作业失败,详细信息请参见日志信息:BUILD FAILED信息:总时间:23.68秒信息:1错误信息:59警告信息:在控制台中查看完整输出

1 回答

  • 4

    事实证明,将此添加到我的proguard文件修复了我的问题 .

    -keepclassmembers class com.myapp.models . ** {; -keep class com.fasterxml.jackson.annotation . ** {; -dontwarn com.fasterxml.jackson.databind . ** -dontwarn org.springframework . **

    所以最后我可以忽略大部分警告 . 正如我所说的那样,简单地忽略它们会导致崩溃,这些崩溃是通过不混淆 Jackson 注释和不模糊我似乎需要的模型类来解决的,这样就可以发生json < - > pojo转换 .

相关问题