最近发现Android Studio 升级之后,新创建的项目执行Java类的main方法报错。然后查找各方面的资料,试了很多方法比如 在项目根目录 gradle.properties中添加 android.enableAapt2=false
、切换gradle离线模式运行等,我还试了一下clean项目、重启android studio 、删除项目重新创建、重新下载gradle等方式,就是死活没用。
android studio环境
android studio版本:4.0
gradle版本:5.6.4
android studio 错误信息
FAILURE: Build failed with an exception.
* Where:
Initialization script 'C:\Users\xxx\AppData\Local\Temp\CeShi_main__.gradle' line: 21
* What went wrong:
A problem occurred configuring project ':app'.
> Could not create task ':app:CeShi.main()'.
> SourceSet with name 'main' not found.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 126ms
解决方案有两种
方案一:治标不治本(临时解决方案)
Run 'xxx.main()' with Coverage
这种方法的使用反正我看着不爽,接下来介绍指标治本的一种方法
方案二:治标治本,用着舒服(修改.idea/gradle.xml文件)
由于android studio 使用的是gradle作为构建工具,所以最终的问题还是gradle配置的问题,这样说以前的老项目就会没有任何问题,这样的话我们就先找到一个老的项目,然后找一个新项目,打开gradle配置查找区别,就能找到问题,通过对比发现.idea/gradle.xml文件内部果然不同,于是参照老的项目去修改,果然发现问题解决。
新项目的.idea/gradle.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
老项目的.idea/gradle.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="delegatedBuild" value="false" />
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
经过新老项目的两个文件对比发现,在新项目 <GradleProjectSettings>
标签下少了
<option name="delegatedBuild" value="false" />
这一行配置,然后在新创建的项目添加这一行配置,运行代码成功。
这一行配置的字面意思大概为:不委托gradle进行构建。实际效果加上这一行配置,jvm执行Java类的main方法了,而不是gradle当做task来执行。
注意:
1、虽然完成了这个配置,但是还要删除之前编译的文件才可以运行
在C盘找到你编译的那个文件并且删除掉,这时候在运行main方法就没问题了。
2、还需要在项目根目录的gradle.properties文件里增加android.enableAapt2=false
这一行代码才可生效。
通过本人实验得出结论,方案二注意事项二者缺一不可。
本人能力有限,如有错误解释和修改,还望指正后去修改该问题。