我在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
分支上工作。stripe
相关的任何内容。我认为这可能与我为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'
}
答案 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)