Android - 如何消除这些 gradle/proguard 警告?

Posted

技术标签:

【中文标题】Android - 如何消除这些 gradle/proguard 警告?【英文标题】:Android - How to eliminate these gradle/proguard warnings? 【发布时间】:2017-05-14 03:39:41 【问题描述】:

已经试过了 -keepattributes 封闭方法 和 -dontwarn InnerClasses 在 proguard-rules.pro 上并没有成功 :( 你们有什么建议吗?

信息:Gradle 任务 [:app:assembleMobilePFDebug] 错误:警告: 忽略匿名内部类的 InnerClasses 属性 错误:(net.lingala.zip4j.util.ArchiveMaintainer$2) 没有出现 带有错误:关联的 EnclosureMethod 属性。这堂课是 可能由不针对现代的错误:编译器产生 .class 文件格式。推荐的错误:解决方法是重新编译 源代码类,使用最新的编译器错误:并且没有 指定任何“-target”类型选项。忽视的后果 错误:此警告是此类上的反射操作将 错误地错误:表明它不是一个内部类。 错误:警告:忽略匿名内部的 InnerClasses 属性 类错误:(net.lingala.zip4j.util.ArchiveMaintainer$1) 没有 带有一个错误:关联的 EnclosureMethod 属性。这节课 可能是由没有针对 现代 .class 文件格式。推荐的错误:解决方案是 使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(net.lingala.zip4j.unzip.Unzip$2) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(net.lingala.zip4j.unzip.Unzip$1) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(net.lingala.zip4j.zip.ZipEngine$1) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(com.samsung.android.sdk.pass.c) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(com.samsung.android.sdk.pass.d) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(com.samsung.android.sdk.pass.a) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(com.samsung.android.sdk.pass.b) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。错误:警告:忽略匿名内部类的 InnerClasses 属性错误:(com.samsung.android.sdk.pass.e) 不带有错误:关联的 EnclosureMethod 属性。 这个类可能是由一个错误产生的:编译器没有 以现代 .class 文件格式为目标。推荐的错误:解决方案 是使用最新的编译器从源代码重新编译类 错误:并且没有指定任何“-target”类型选项。这 忽略错误的后果:这个警告是反光的 对这个类的操作会出错 Error:indicate that it is 不是内部类。信息:BUILD SUCCESSFUL 信息:总时间:1 分钟 43.541 秒 信息:80 个错误 信息:0 个警告 信息:在控制台中查看完整的输出

Gradle 文件(主要部分):

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android 
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    dexOptions
        maxProcessCount 3
        javaMaxHeapSize "2g"
    

    defaultConfig 
        applicationId "com.xyz"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
        multiDexEnabled true
    

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

    testOptions 
        unitTests.returnDefaultValues = true
    

    task jacocoTestReport(type: JacocoReport, dependsOn: "test")

        group = "Reporting"
        description = "Generate Jacoco coverage reports after running tests."

        reports 
            xml.enabled = true
            html.enabled = true
        

        classDirectories = fileTree(
                dir: "./build/intermediates/classes/debug",
                excludes: [ '**/R*.class',
                            '**/*$InjectAdapter.class',
                            '**/*$ModuleAdapter.class',
                            '**/*$ViewInjector.class']
        )

        def coverageSourceDirs = [
                "src/main/java"
        ]

        sourceDirectories = files(coverageSourceDirs)
        executionData = files("$project.buildDir/jacoco/$jacocoTestReport.exec")
    

    productFlavors 
        xyz 
            applicationId "com.xyz"
            versionName "1.2"
            resValue "string", "app_name", "xyz"
            versionCode "1"
        
    
    packagingOptions 
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    


dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    testCompile fileTree(include: ['*.jar'], dir: 'libs/testLibs')
    testCompile 'junit:junit:4.12'
    androidTestCompile fileTree(include: ['*.jar'], dir: 'libs/androidTestLibs')
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'org.mockito:mockito-core:1.10.19'
    compile 'me.dm7.barcodescanner:zxing:1.8.4'
    compile 'com.google.code.gson:gson:2.4'
    compile files('libs/zip4j_1.3.2.jar')



android.applicationVariants.all  variant ->
    variant.javaCompile.options.compilerArgs += [
            '-AresourcePackageName=com.xyz'
    ]

java -version && javac -version java版本“1.7.0_71” Java(TM) SE 运行时环境(内部版本 1.7.0_71-b14) Java HotSpot(TM) 64 位服务器 VM(内部版本 24.71-b01,混合模式) javac 1.7.0_71

【问题讨论】:

你的 java (JDK) 版本是多少? 尝试清理并重建您的项目。 已经尝试过清理和重建, 用java版本编辑 【参考方案1】:

更新

试试这一行:

-keepattributes InnerClasses,EnclosingMethod,Signature

此问题与post 类似。基本上,你只需要将这一行添加到你的 proguard-rules.pro 文件中:

-keepattributes EnclosingMethod

【讨论】:

嗨...我试过了,不幸的是由于某种原因对我的情况没有任何影响

以上是关于Android - 如何消除这些 gradle/proguard 警告?的主要内容,如果未能解决你的问题,请参考以下文章

如何消除间接呼叫 Method 在 Android Studio 中的编译警告

噪音消除如何在 android 中工作?

如何消除android应用程序中的休眠错误?

Android - 如何在使用带有权重的 LinearLayout 时消除不需要的间隙

Android中如何消除Toolbar左边的空白

FlexBox布局Android。如何消除视图之间的垂直间隙?