Proguard 问题“警告:忽略匿名内部类的 InnerClasses 属性”

Posted

技术标签:

【中文标题】Proguard 问题“警告:忽略匿名内部类的 InnerClasses 属性”【英文标题】:Proguard issue “Warning:Ignoring InnerClasses attribute for an anonymous inner class” 【发布时间】:2018-06-25 03:51:11 【问题描述】:

我在构建 APK 时收到此错误日志。请帮我解决一下这个。提前致谢。

我的 Gradle 文件

     minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.2"
        multiDexEnabled true
    
    dexOptions 
        javaMaxHeapSize "4g"
    

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


dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile files('libs/glide-3.7.0.jar')
    compile files('libs/android-async-http-1.4.4.jar')
    compile('com.github.ozodrukh:CircularReveal:2.0.1@aar') 
        transitive = true;
    

    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.google.code.gson:gson:2.7'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'de.hdodenhof:circleimageview:2.1.0'
    compile 'com.google.android.gms:play-services:10.0.1'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.googlecode.ez-vcard:ez-vcard:0.10.2'
    compile 'com.applozic.communication.uiwidget:audiovideo:1.2'
    compile 'com.itextpdf:itextg:5.5.9'
    compile 'lib.kashif:folderpicker:2.2'
    compile 'com.yovenny.VideoCompress:videocompress:1.0.0'

apply plugin: 'com.google.gms.google-services'

我的 Proguard 文件是

-keep class com.itextpdf.**  *; 
-dontwarn com.itextpdf.**
-dontwarn com.squareup.picasso.**
-keep class org.apache.http.**  *; 
-dontwarn org.apache.http.**
-keep class android.net.http.**  *; 
-dontwarn android.net.http.**
-keepattributes InnerClasses
-optimizations optimization_filter 

最后是错误日志

信息:Gradle 任务 [:app:assembleDebug] 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.FileTemplateLoader$1) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.FileTemplateLoader$2) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.FileTemplateLoader$4) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.FileTemplateLoader$3) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.TemplateCache$1) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.TemplateLookupResult$1) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.TemplateLookupStrategy$1) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.cache.TemplateNameFormat$1) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名内部类的 InnerClasses 属性 错误:(freemarker.core.BlockAssignment$CaptureOutput$1) 不附带 错误:关联的 EnclosureMethod 属性。这个类可能是由一个 错误:没有针对现代 .class 文件格式的编译器。推荐的 错误:解决方案是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。忽视的后果 错误:此警告是对此类的反射操作将错误 错误:表明它不是一个内部类。 错误:警告:忽略匿名的 InnerClasses 属性

【问题讨论】:

【参考方案1】:

将此添加到proguard

  -dontwarn freemarker.**

或者另一种解决方案是-这是因为一些依赖关系,所以在 build.gradle (app) 中添加它

    dependencies 
        compile ('com.mylib.lib') 
            exclude group: 'org.freemarker'
        
     

【讨论】:

以上是关于Proguard 问题“警告:忽略匿名内部类的 InnerClasses 属性”的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 3.0.0 的 Proguard 问题

Proguard 启用 NoSuchMethodException

proguard.cfg 文件丢失

proguard.ParseException:proguard.cfg 中的未知选项“-encryptstrings”

从 proguard 中排除包

Proguard 查询,正在使用哪一个