错误提示
使用Gradle
构建安卓项目,第一次构建时报错:
1 | Task :app:buildCMakeDebug FAILED |
查看项目依赖
app
模块和inject
模块都位于父项目下,在文件夹上属于平行关系。
在Project Structure
中查看,app
依赖于inject
(在build.gradle
中设置为依赖)。
理应先执行inject:buildCMakeDebug
再执行app:buildCMakeDebug
查看构建顺序
点击下方Build
-Build Output
查看顺序,发现app
模块先于inject
模块构建。
解决方案
重命名项目
将app
模块重命名为victim_app
后,构建顺序正常。
具体操作:Clean Project
后,删除模块内的.cxx
文件夹(方便重命名)。
重命名app
模块为victim_app
,并修改setting.gradle
及依赖,使其保持一致。
最后Sync with Gradle Files
,Rebuild Project
。
手动按顺序构建
1 | gradlew inject:build |
推论
在Gradle
执行Tasks
时,app
模块比inject
模块具有更高优先级,导致不按照依赖顺序构建。
推测Gradle
会对setting.gradle
中的模块按字典序排序,然后构建。
测试
将inject
模块名改为abc
,修改依赖项目名,Rebuild Project
,发现构建顺序正常。
将inject
改为bcd
,出现同样错误,说明确实是按字典序构建。
参考
However, ./gradlew run will run applications in lexicographical order. Instead, explicitly specify which subproject to run