我最近开始学习如何通过Android Studio对Android设备进行编程。我的第一个应用运行良好,直到今天早上升级到Android Studio 3.4。
我遇到以下编译错误:
原因:com.android.builder.dexing.DexArchiveBuilderException:无法处理C:\ Users \ Technical.gradle \ caches \ transforms-2 \ files-2.1 \ 4f3f8638c6a9f961dae488a0387efb6b \ jars \ classes.jar
起因:com.android.builder.dexing.DexArchiveBuilderException:解密时出错。
原因:com.android.tools.r8.CompilationFailedException:编译无法完成
原因:com.android.tools.r8.utils.AbortException:错误:仅从Android O(--min-api 26)开始支持调用自定义
是否可以恢复到以前的Android Studio版本?
如果新版本中没有发生什么更改而导致创建dex文件失败?
我尝试按照建议的here在android.enableD8=true
中添加gradle.properties
,但是没有运气。
编辑#1:
还已经将multiDexEnabled true
添加到应用build.gradle
文件的默认配置中,但是仍然存在相同的编译错误。
该构建文件已满...
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "qdivision.org.qrtracker"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.github.felHR85:UsbSerial:6.0.5'
}
答案 0 :(得分:4)
尝试将以下内容添加到您的app/build.gradle
中,以使您的Android项目编译与 Java 8 兼容。
android {
....
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
....
}
答案 1 :(得分:2)
我必须从useProguard true
配置中删除buildTypes
。
根据the documentation minifyEnabled true
足以用R8混淆代码。
示例:
android {
buildTypes {
debug {
versionNameSuffix "-dev"
minifyEnabled true // <- remove this line when using instant run
useProguard true // <- remove this line
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"
}
release {
shrinkResources true
minifyEnabled true
useProguard true // <- remove this line
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"
}
}
}
答案 2 :(得分:1)
在您的Android Studio中转到build.gradle
(模块:应用)
然后将此compileOptions{}
块添加到android{}
块
android{
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
答案 3 :(得分:1)
此堆栈跟踪中与之相关的是此行:
Caused by: com.android.tools.r8.utils.AbortException: Error: Invoke-customs are only supported starting with Android O (--min-api 26)
由于您的依赖项中没有kotlin库,因此我假设您正在使用Java。我会尝试answers in this issue
答案 4 :(得分:0)
如果您尝试直接从android studio运行apk,请避免启用
minifyEnabled为真
注释以下行。
// minifyEnabled true
// shrinkResources true
但是您可以在构建APK时使用上述代码。
答案 5 :(得分:0)
如果您使用的是Google Cloud库,请尝试将版本降低到1.90
答案 6 :(得分:0)
添加以下内容,以使您的应用可以由java8
编译器进行编译。
android {
.....
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
并禁用
处的即时运行Preferences
-> Build,Execution,Deployment
-> Debugger
-> Instant Run
答案 7 :(得分:0)
我已将以下代码添加到所有模块:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
但是错误仍然存在。 在我的情况下,我的一些模块使用了类路径“ me.tatarka:gradle-retrolambda”,它与此产生了冲突:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
因此,我必须通过以下链接从Retrolambda进行迁移: https://developer.android.com/studio/write/java8-support#migrate_from_retrolambda
答案 8 :(得分:0)
请将此行添加到a
文件中。
'string'
答案 9 :(得分:0)
我有同样的问题。地雷是由... org.apache.commons:commons-lang ...
造成的。我目前没有完整的错误消息。此错误仅在重建或清理生成期间发生。
我决心通过将我的 build.gradle 中的org.apache.commons:commons-text:1.8
更改为org.apache.commons:commons-text:1.6
。
注意-有人建议here在Android Studio中禁用“即时运行”。我的Android Studio中不提供此功能。版本-
Android Studio 3.5.1
Build #AI-191.8026.42.35.5900203, built on September 26, 2019
Windows 10 10.0
答案 10 :(得分:0)
对于kotlin
,您还应该添加kotlinOptions:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
答案 11 :(得分:0)
使用Java 8的解决方案只有在我删除了所有与Retrolambda相关的内容之后,才能开始工作。
答案 12 :(得分:0)
对于其他任何遇到此问题的人,我在对此Jackson库添加依赖项后遇到了这个问题:
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.1")
上面的“ compileOptions”解决方案为我解决了该问题
答案 13 :(得分:0)
对我来说,在 BUILD.GRADLE 中执行以下命令即可删除该错误。
defaultConfig {
applicationId "com.example.myapptestheader"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
我刚刚添加
multiDexEnabled true
答案 14 :(得分:0)
这在 2021 年仍然有效,请尝试。
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.example.android.bakingapp"
minSdkVersion 15
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
答案 15 :(得分:0)
就我而言,添加以下几行后也显示了 -
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
所以我解决了我的问题,只需将我的 minSdkVersion
从 19 更新到 21,然后终于成功了!!!
答案 16 :(得分:0)
在将 build.gradle 中的核心库升级到最新版本后,我遇到了这个错误,幸运地接受了对我有用的答案。
接受答案的工作原因是针对 api 级别 30 的最新版本的核心库的更改,它是用 java8 编写的,因此添加对 java8 的依赖解决了它。
答案 17 :(得分:-1)
尝试一下:
defaultConfig {
...
multiDexEnabled true
}