Error running app:Default Activity not found

问题描述

最近在使用Android Studio编译的时候,遇到一个这样的错误:

Error running app:Default Activity not found

表现形式如下:

《Error running app:Default Activity not found》 app显示红叉

导致了在运行代码时无法正常启动。

解决方法

  1. 在AndroidManifest.xml文件中,增加如下代码:

    《Error running app:Default Activity not found》 AndroidManifest.xml

  2. 重新启动,问题解决

原因分析

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>放开。

    原文作者:Sealwk
    原文地址: https://www.jianshu.com/p/07f6363f080d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞