使用BeeWare开发Android应用遇DexBuilder空指针编译异常求助
transformClassesWithDexBuilderForDebug失败的问题 针对你遇到的com.android.builder.dexing.DexArchiveBuilderException(根源是java.lang.NullPointerException)且指向desugar处理文件的问题,结合你的配置和场景,我整理了几个针对性的解决方案:
1. 调整Java版本兼容性,暂时绕过Desugar处理
你的build.gradle中配置了Java 8的编译选项,但AGP 3.1.1对Java 8 Desugar的支持存在一些已知的稳定性问题,而BeeWare默认模板生成的代码大概率不需要Java 8特性。可以尝试修改compileOptions:
compileOptions { sourceCompatibility = '1.7' targetCompatibility = '1.7' }
修改后执行./gradlew clean assembleDebug(Windows环境用gradlew.bat)重新编译,看是否能避开Desugar阶段的NPE。
2. 彻底清理构建缓存并重新执行编译任务
缓存损坏是这类奇怪构建错误的常见原因,执行以下命令完全清理后重新构建:
# Windows环境替换为gradlew.bat ./gradlew clean ./gradlew buildPythonDebug ./gradlew assembleDebug
这一步会删除所有旧的构建产物和缓存,确保Voc编译生成的类文件是全新有效的。
3. 升级Gradle和Android Gradle Plugin版本
Gradle 4.7和AGP 3.1.1的组合虽然兼容,但存在一些已知的Desugar相关bug。建议升级到更稳定的版本组合:
- 修改
buildscript中的AGP版本:dependencies { classpath 'com.android.tools.build:gradle:3.2.1' } - 修改
gradle/wrapper/gradle-wrapper.properties中的Gradle版本:distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
升级后重新同步项目并编译,新版本修复了不少Dex构建和Desugar的问题。
4. 检查Voc编译的输出是否正常
手动执行buildPythonDebug中的Voc命令,确认编译过程没有静默错误:
voc -v -p app -o build/intermediates/classes/debug app voc -v -p app_packages -o build/intermediates/classes/debug app_packages
如果Voc编译过程中出现错误(比如生成了损坏的class文件),会导致后续Desugar和Dex构建失败,此时需要确保BeeWare的Voc工具是最新稳定版,或者重新初始化BeeWare项目。
5. 禁用Core Library Desugaring(如果适用)
如果调整Java版本后仍需保留部分Java 8特性,可以尝试禁用核心库Desugaring:
android { compileOptions { coreLibraryDesugaringEnabled false sourceCompatibility = '1.8' targetCompatibility = '1.8' } }
注意:这可能会导致部分Java 8 API在低版本Android上无法使用,但BeeWare默认模板通常不会依赖这些API。
内容的提问来源于stack exchange,提问作者Saibbo

