问题起因
我在项目中引入信鸽Push,然后在 File --> Project Structure 设置依赖后再 Build 就报了这个错误。
“Manifest merger failed with multiple errors”,在 Build 面板中就提示这么一丁点,把右侧的 + 号点开也全是些没用的东西,心想谷歌做的软件果然跟微软没得比,技术贼6,体验贼差。
解决方案:
追本溯源,编译用的是gradle这个打包工具的gradlew命令,那么在命令行直接执行
gradlew processDebugManifest --stracktrace
或
gradlew assembleDebug --s -info
注意:这个 processDebugManifest,是个变化的值,要根据具体出错的任务来定,下面会进行解释。
原理分析:
- gradlew 是包装器脚本,它会自动下载包装里定义好的gradle 版本,保证编译环境统一,下载的Gradle发行版被存放在目录$USER_HOME/.gradle/wrapper/dists中,然后使用gradle命令进行打包。
- processDebugMenifest 是gradlew执行的任务名,从下面的错误打印可以得出。前缀app表示的是当前编译的是名字叫app的这个模块。
- -s,–stracktrace 表示打印出堆栈信息,用以调试错误
找到原因了,是因为我想把信鸽独立成一个module,然后在这个module的build.gradle中配置manifestPlaceholders,结果编译app的时候,不会去xgpush这个module下面去找这个配置,于是就报错了。把它移动到app模块的build.gradle文件中就好了。但是移动到app模块后,app编译是通过了,xgpush模块又同样的提示了该问题。最后我合并成一个module了 。。。