编译失败报错及Android Gradle构建错误修复求助
解决Android编译失败及JNI相关构建错误的方案
首先得说,你看到的Compilation failed; see the compiler error output for details.只是个通用提示,没说具体问题,咱们得先拿到详细错误日志才能精准解决。
第一步:获取详细的编译错误信息
这是定位问题的核心,有两种简单方法:
- Android Studio图形界面:点击底部的Build面板,然后点面板右上角那个“Toggle View”(就是两个小方块的图标),切换到详细模式,里面会列出具体的错误原因——比如JNI编译报错、依赖缺失、SDK版本不兼容之类的。
- 命令行方式:在项目根目录执行下面的命令,能拿到完整的错误堆栈和详细日志,比图形界面更全面:
./gradlew assembleDebug --stacktrace --info
第二步:针对你JNI配置的问题(从给出的build.gradle代码来看)
你的配置里sourceSets.main { jni.srcDirs = [] }是用来禁用Gradle自动编译JNI代码的,但如果你的项目里实际存在JNI源码(比如src/main/jni下的.c/.cpp文件),或者依赖了需要编译JNI的模块,就会直接炸锅。分两种情况调整:
- 如果项目不需要JNI编译:
先确认src/main/jni目录下没有任何源码文件,要是有就直接删掉,然后保持jni.srcDirs = []的配置,这样Gradle就不会去碰JNI相关的编译了。 - 如果项目需要编译JNI:
- 删掉
jni.srcDirs = []这一行,让Gradle自动识别src/main/jni目录下的JNI源码; - 检查NDK配置:打开Android Studio的
File > Project Structure > SDK Location,确认NDK路径已经正确设置,而且NDK版本要和你的compileSdkVersion兼容(比如compileSdkVersion 27建议用NDK r16b版本); - 完善NDK的配置块,比如指定需要支持的CPU架构,示例如下:
ndk { moduleName "player_shared" abiFilters 'armeabi-v7a', 'arm64-v8a' // 根据你的需求添加架构,比如x86、x86_64 }
- 删掉
第三步:其他通用排查点
如果上面的方法没解决,试试这些通用方案:
- 检查SDK组件:打开SDK Manager,确认
compileSdkVersion 27、buildToolsVersion "27.0.3"对应的SDK平台、Build Tools都已经安装; - 排查依赖冲突:执行
./gradlew dependencies查看项目的依赖树,找出版本冲突的依赖,然后用exclude语句排除冲突的部分; - 清理重建项目:有时候缓存会搞事情,执行
Build > Clean Project,然后Build > Rebuild Project,或者命令行执行./gradlew clean assembleDebug。
内容的提问来源于stack exchange,提问作者Donald P. Benford




