Gluon Mobile打包Android APK时applyRetrobuffer任务执行失败求助
:ChatAppGluonApp:applyRetrobuffer任务失败的问题 我的问题情况
最近在给Gluon的ChatApp项目构建Android APK时,一直碰到这个报错:
Execution failed for task ':ChatAppGluonApp:applyRetrobuffer'
折腾了好几个环境都没解决:
- 试过Windows 7 + Eclipse Oxygen (4.7.3RC2),也试过macOS 10.13.1 + Eclipse Oxygen (4.7.2)
- Android用的是API 26,Build Tools 26.0.2,两个系统配置完全一致
- Java版本先后换了8和9,结果完全一样
- 奇怪的是,桌面端运行完全正常,就是Android构建死活过不去
堆栈信息截取了一段:
buildscript { repositories { jcenter() google() maven{ url 'http://nexus.gluonhq.com/nexus/content/repositories/releases' } } // 剩余堆栈内容省略 }
试了这些方案,你可以参考下
结合Gluon项目的特性和Android构建的常见坑,我整理了几个可能解决问题的步骤:
手动指定Retrobuffer版本,避免依赖冲突
Retrobuffer是处理Android字节码兼容的工具,Gluon插件会自动引入,但版本不匹配很容易出问题。你可以在项目的build.gradle里手动锁定Retrobuffer的版本,比如:buildscript { repositories { jcenter() google() maven { url 'http://nexus.gluonhq.com/nexus/content/repositories/releases' } } dependencies { classpath 'com.gluonhq:gradle-plugin:2.5.5' // 用Gluon官方推荐的插件版本 classpath 'net.sf.retrobuffer:retrobuffer:1.4.1' // 配套的Retrobuffer版本 } }建议去Gluon官方文档确认插件和Retrobuffer的兼容版本,别乱搭配。
清理构建缓存,从头再来
有时候Gradle的缓存会搞出莫名其妙的问题,先清干净再构建试试:- Windows系统:打开命令行,进入项目根目录,执行
gradlew.bat clean,然后gradlew.bat androidInstall - macOS/Linux:执行
./gradlew clean,再./gradlew androidInstall
- Windows系统:打开命令行,进入项目根目录,执行
检查Android SDK组件是否完整
虽然你指定了Build Tools 26.0.2,但说不定有些组件没装全。打开Android SDK Manager,确认:- Android 8.0 (API 26)的所有必要组件都打勾安装了
- Build Tools 26.0.2完整无损坏(可以卸载重装试试)
Android Support Repository和Google Repository也必须装,很多依赖都靠它们
老老实实换回Java 8
虽然Java 9当时已经出来,但Android对它的支持还很不完善,Gluon项目构建Android更推荐用Java 8。一定要确保:- 你的
JAVA_HOME环境变量指向正确的Java 8路径 - Eclipse里的默认JRE设为Java 8(
Window > Preferences > Java > Installed JREs) - Gradle运行时也用Java 8(
Window > Preferences > Gradle里配置)
- 你的
核对Gluon的Android配置
打开项目的build.gradle,检查Gluon的Android配置是否和你安装的SDK版本一致:gluon { target = 'android' android { compileSdkVersion = 26 buildToolsVersion = '26.0.2' minSdkVersion = 21 // 这个可以根据需求调整,但不能高于compileSdkVersion targetSdkVersion = 26 } }版本号一定要对应上,差一点都可能出问题。
如果这些方法都试过还是不行,建议把完整的堆栈错误信息贴出来,这样更容易定位到具体是哪一步出了问题。
内容的提问来源于stack exchange,提问作者Viktor Stojanov

