Gradle依赖性导致错误"无效的幻数"

时间:2015-10-23 17:24:59

标签: android git gradle proguard magic-numbers

我在GitHub上有一个项目,我在家里的办公室工作。大约2个月,它在两台机器上运行良好。两个星期前,它停止在家用电脑上运行,但在我的工作电脑上仍能正常运行

这是我得到的错误:

  

:app:shrinkDebugMultiDexComponents FAILED

     

失败:构建因异常而失败。

     
      
  • 出了什么问题:   任务':app:shrinkDebugMultiDexComponents'执行失败。   java.io.IOException:无法读取[D:\ dev \ gitRepo \ app \ android \ app \ build \ intermediates \ multi-dex \ debug \ allclasses.jar](无法处理类[__MACOSX] /com/stripe/android/._BuildConfig.class](课堂上无效的幻数[51607]))
  •   
  • 尝试:   使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。
  •   

给我错误的stripe包是第三方库that you can find here。我将它作为我的build.gradle文件中的依赖项完全按照他们的说法列出。

compile 'com.stripe:stripe-android:+'

我已经注释掉了所有与stripe相关的代码,并且应用程序运行完全正常,所以我知道它与我如何处理该包有关。

不幸的是,我不记得我做了什么让这个停止工作。我确实认为在发生这一周的前一周我升级了Android Studio,并花了相当多的时间搞乱ProGuard配置。

我尝试了什么:

  • 在没有master更改的ProGuard分支上工作。
  • 卸载并重新安装Android Studio
  • 重新克隆git repo
  • 安装API 17(eclipse的条纹需要这个。不是Studio,但是我试了一下)。
  • 联系条形客户支持,但他们没有任何线索。
  • This stack overflow post。但是,没有Mac计算机触及过该项目,也没有亲自压缩与stripe相关的任何内容。
  • From here,将幻数从十六进制转换为ASCII。结果是 Q` ,我不承认。

我认为这可能与我为ProGuard所做的事情有关,但我不明白如何做。我在一个与Proguard工作完全不同的分支上,使用干净的AndroidStudio安装,使用干净的存储库克隆,当我在办公室时,该项目仍能正常工作。

修改

我在debug BuildType上运行它。这些是我的3个gradle文件。第一个是整个Project,第二个是Application Module,第三个是本地android库模块。

项目build.gradle :     buildscript {         存储库{             jcenter()             maven {url' http://download.crashlytics.com/maven' }         }         依赖{             classpath' com.android.tools.build:gradle:1.2.3'             classpath' com.crashlytics.tools.gradle:crashlytics-gradle:1。+'         }     }

allprojects {
    repositories {
        jcenter()
        maven{ url 'http://download.crashlytics.com/maven' }
    }
}

Android应用模块build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.app.android"
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
        minSdkVersion 16
        targetSdkVersion 22
        multiDexEnabled = true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            buildConfigField 'Boolean', 'enableCrashlytics', 'true'
        }
        debug {
            buildConfigField 'Boolean', 'enableCrashlytics', 'false'
        }
        adhoc {
            debuggable true
            signingConfig signingConfigs.debug
            buildConfigField 'Boolean', 'enableCrashlytics', 'true'
        }
    }
    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 project(':localLibrary')
    compile 'com.facebook.android:facebook-android-sdk:3.21.1'
    compile 'commons-io:commons-io:2.4'
    compile 'com.github.bumptech.glide:glide:3.6.1'
    compile 'com.android.support:support-v4:22.0.1'
    compile 'com.google.android.gms:play-services-identity:8.1.0'
    compile 'com.google.android.gms:play-services-plus:8.1.0'
    compile 'com.google.android.gms:play-services-maps:8.1.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'io.card:android-sdk:5.0.1'
    compile 'com.stripe:stripe-android:+'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
        transitive = true;
    }
}

本地Android资源库模块build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 22
        multiDexEnabled = true
    }

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

dependencies {
    compile 'com.android.support:support-v4:22.1.0'
    compile 'com.google.code.gson:gson:2.2.2'
    compile 'com.android.support:multidex:1.0.0'
    compile group: 'org.apache.httpcomponents' , name: 'httpmime' , version: '4.3.5'
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5'

}

2 个答案:

答案 0 :(得分:3)

是的,确认两台机器都具有相同的Java版本,并且确实是相同版本的Android Studio。我能想到的另一件事是,Stripe可能正在使用与AS捆绑在一起的构建工具来构建你的apk,而你默认安装的那些稍有不同而且缺少一些东西 - see this post I made on a similar problem I had

答案 1 :(得分:3)

此问题可能与您运行的Java版本有关。我遇到了类似的问题,发现Java 8用于构建。当我更改为Java 7时,此构建问题已得到修复。

在Android Studio中转到

File -> Project Structure -> SDK Location

JDK Location应该是Java 1.7.x(Java 7)