问题描述
最近在使用Android Studio编译的时候,遇到一个这样的错误:
Error running app:Default Activity not found
表现形式如下:
导致了在运行代码时无法正常启动。
解决方法
-
在AndroidManifest.xml文件中,增加如下代码:
重新启动,问题解决
原因分析
Error running app:Default Activity not found
通过提示我们可以看到,是没有发现默认的Activity
由于是在启动时报的错,所以这个默认的Activity指的肯定是app启动的第1个活动。而启动活动的顺序又是在AndroidManifest.xml中定义的,所以查看AndroidManifest.xml文件对第1个活动的配置
通过AndroidManifest.xml文件,在第1个活动中没有配置<category>,所以在启动的时候,就找不到启动的app,造成Default Activity not found
那么category属性到底是什么意思,它对于activity来说是必须的吗?继续往下看...
知识点扩展
根据Android开发者中文网站的描述,AndroidManifest.xml的文件结构示例如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<provider>
<grant-uri-permission />
<meta-data />
<path-permission />
</provider>
<uses-library />
</application>
</manifest>
其中只有 <manifest> 和 <application> 元素是必需的,它们都必须存在并且只能出现一次。其他大部分元素可以出现多次或者根本不出现。但清单文件中必须至少存在其中某些元素才有用。
而我们关注的<category>,它是包含在<intent-filter>中的。<intent-filter>中<action>是必须存在的,<category>和<data>可根据需要进行添加。
<category>中android:name属性的值,一般为android.intent.category.LAUNCHER,表示:决定应用程序是否显示在程序列表里。
因为在生产环境上这个应用是连接到华为平台的,所以代码中将<category>注释了,通过华为平台来启动MainActivity。而测试环境中没有华为平台的环境,所以需要将<category>放开。