最近发现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这一行代码才可生效。

通过本人实验得出结论,方案二注意事项二者缺一不可。

本人能力有限,如有错误解释和修改,还望指正后去修改该问题。

更多相关文章

  1. Android中解析xml的几种方式
  2. Android学习杂记(二):异步任务AsyncTask详解
  3. Android基础篇——创建一个Android工程
  4. Android文件存储读写
  5. android R 文件 丢失的处理 如何重新生成
  6. Android基本数据存储方法
  7. Android安装常见的一些解决方法
  8. android 关机闹钟
  9. android几种定时器机制及区别

随机推荐

  1. android studio 使用cmake支持C++出现无
  2. 在Android(安卓)10.0中Activity的启动流
  3. Android 之 ImageView(图片组件)
  4. Android 深入研究adb
  5. Android中JNI的使用方法
  6. Android从1.0到11版本特性
  7. [android警告]AndroidManifest.xml警告 N
  8. ListView设置分割线Divider样式
  9. android之多线程工作(一)AsyncTask .
  10. Android(cacerts.bks)添加根证书