Android(安卓)Studio 高版本无法执行Java main方法的问题
16lz
2021-01-24
最近发现Android Studio 升级之后,新创建的项目执行Java类的main方法报错。然后查找各方面的资料,试了很多方法比如 在项目根目录 gradle.properties中添加 android.enableAapt2=false
、切换gradle离线模式运行等,我还试了一下clean项目、重启android studio 、删除项目重新创建、重新下载gradle等方式,就是死活没用。
android studio环境
android studio版本:4.0gradle版本: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.orgBUILD 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>
经过新老项目的两个文件对比发现,在新项目
标签下少了 这一行配置,然后在新创建的项目添加这一行配置,运行代码成功。
这一行配置的字面意思大概为:不委托gradle进行构建。实际效果加上这一行配置,jvm执行Java类的main方法了,而不是gradle当做task来执行。
注意:
1、虽然完成了这个配置,但是还要删除之前编译的文件才可以运行
在C盘找到你编译的那个文件并且删除掉,这时候在运行main方法就没问题了。
2、还需要在项目根目录的gradle.properties文件里增加android.enableAapt2=false
这一行代码才可生效。
通过本人实验得出结论,方案二注意事项二者缺一不可。
本人能力有限,如有错误解释和修改,还望指正后去修改该问题。
更多相关文章
- Android中解析xml的几种方式
- Android学习杂记(二):异步任务AsyncTask详解
- Android基础篇——创建一个Android工程
- Android文件存储读写
- android R 文件 丢失的处理 如何重新生成
- Android基本数据存储方法
- Android安装常见的一些解决方法
- android 关机闹钟
- android几种定时器机制及区别