Gradle 依赖导致错误 "Invalid Magic Number"
Gradle dependency causing error "Invalid Magic Number"
我有一个关于 GitHub 的项目,我在家里的办公室都在做这两个项目。在大约 2 个月的时间里,它在两台机器上都运行良好。然后两周前,它在我的家用电脑上停止了 运行,但 在我的工作电脑上仍然可以正常工作 。
这是我得到的错误:
:app:shrinkDebugMultiDexComponents FAILED
FAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':app:shrinkDebugMultiDexComponents'.
java.io.IOException: Can't read [D:\dev\gitRepo\app\android\app\build\intermediates\multi-dex\debug\allclasses.jar] (Can't process class [__MACOSX/com/stripe/android/._BuildConfig.class] (Invalid magic number [51607] in class))
- Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
给我错误的 stripe
包是第 3 方库 that you can find here。我完全按照他们所说的那样将其列为我的 build.gradle 文件中的依赖项。
compile 'com.stripe:stripe-android:+'
我已经注释掉了与 stripe
有关的所有代码,应用程序运行完全正常,所以我知道这与我处理该包的方式有关。
不幸的是,我不记得我究竟做了什么让这个停止工作。我确实认为在发生这种情况的前一周我升级了 Android Studio,并花了相当多的时间搞乱 ProGuard
配置。
我试过的:
- 正在处理未进行
ProGuard
更改的 master
分支。
- 卸载并重新安装 Android Studio
- 重新克隆 git 存储库
- 正在安装 API 17(日食条纹需要这个。不是工作室,但我试了一下)。
- 联系 stripe 客户支持,但他们毫无头绪。
- This stack overflow post。但是,没有 Mac 计算机接触过该项目,我也没有亲自压缩任何与
stripe
. 相关的内容
- From here,将幻数从十六进制转换为 ASCII。结果是 Q` 我不认识。
我认为这可能与我为 ProGuard 所做的事情有关,但我不明白如何。我在一个与任何 Proguard 工作完全不同的分支上,安装了干净的 AndroidStudio,克隆了一个干净的存储库,当我在办公室时,该项目仍然运行良好。
编辑
我是 运行 这个 debug
BuildType。这些是我的 3 gradle 个文件。第一个用于整个项目,第二个用于应用程序模块,第三个用于本地 android 库模块。
项目build.gradle
:
构建脚本{
存储库{
中心()
maven { url 'http://download.crashlytics.com/maven' }
}
依赖关系{
类路径 'com.android.tools.build:gradle:1.2.3'
类路径 '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'
}
是的,确认两台机器具有相同的 Java 版本,并且确实具有相同版本的 Android Studio。我唯一能想到的另一件事是,也许 Stripe 正在使用与 AS 捆绑在一起的构建工具来构建你的 apk,而你默认安装的工具略有不同并且缺少一些东西 - see this post I made on a similar problem I had.
这个问题可能与您运行的Java版本有关。我遇到了类似的问题,发现 Java 8 用于构建。当我更改为 Java 7 时,此构建问题已修复。
在 Android 工作室转到
File -> Project Structure -> SDK Location
JDK Location
应该是 Java 1.7.x (Java 7)
我有一个关于 GitHub 的项目,我在家里的办公室都在做这两个项目。在大约 2 个月的时间里,它在两台机器上都运行良好。然后两周前,它在我的家用电脑上停止了 运行,但 在我的工作电脑上仍然可以正常工作 。
这是我得到的错误:
:app:shrinkDebugMultiDexComponents FAILED
FAILURE: Build failed with an exception.
- What went wrong: Execution failed for task ':app:shrinkDebugMultiDexComponents'. java.io.IOException: Can't read [D:\dev\gitRepo\app\android\app\build\intermediates\multi-dex\debug\allclasses.jar] (Can't process class [__MACOSX/com/stripe/android/._BuildConfig.class] (Invalid magic number [51607] in class))
- Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
给我错误的 stripe
包是第 3 方库 that you can find here。我完全按照他们所说的那样将其列为我的 build.gradle 文件中的依赖项。
compile 'com.stripe:stripe-android:+'
我已经注释掉了与 stripe
有关的所有代码,应用程序运行完全正常,所以我知道这与我处理该包的方式有关。
不幸的是,我不记得我究竟做了什么让这个停止工作。我确实认为在发生这种情况的前一周我升级了 Android Studio,并花了相当多的时间搞乱 ProGuard
配置。
我试过的:
- 正在处理未进行
ProGuard
更改的master
分支。 - 卸载并重新安装 Android Studio
- 重新克隆 git 存储库
- 正在安装 API 17(日食条纹需要这个。不是工作室,但我试了一下)。
- 联系 stripe 客户支持,但他们毫无头绪。
- This stack overflow post。但是,没有 Mac 计算机接触过该项目,我也没有亲自压缩任何与
stripe
. 相关的内容
- From here,将幻数从十六进制转换为 ASCII。结果是 Q` 我不认识。
我认为这可能与我为 ProGuard 所做的事情有关,但我不明白如何。我在一个与任何 Proguard 工作完全不同的分支上,安装了干净的 AndroidStudio,克隆了一个干净的存储库,当我在办公室时,该项目仍然运行良好。
编辑
我是 运行 这个 debug
BuildType。这些是我的 3 gradle 个文件。第一个用于整个项目,第二个用于应用程序模块,第三个用于本地 android 库模块。
项目build.gradle
:
构建脚本{
存储库{
中心()
maven { url 'http://download.crashlytics.com/maven' }
}
依赖关系{
类路径 'com.android.tools.build:gradle:1.2.3'
类路径 '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'
}
是的,确认两台机器具有相同的 Java 版本,并且确实具有相同版本的 Android Studio。我唯一能想到的另一件事是,也许 Stripe 正在使用与 AS 捆绑在一起的构建工具来构建你的 apk,而你默认安装的工具略有不同并且缺少一些东西 - see this post I made on a similar problem I had.
这个问题可能与您运行的Java版本有关。我遇到了类似的问题,发现 Java 8 用于构建。当我更改为 Java 7 时,此构建问题已修复。
在 Android 工作室转到
File -> Project Structure -> SDK Location
JDK Location
应该是 Java 1.7.x (Java 7)