安卓:Activity未在清单文件中注册

5
<uses-sdk android:minSdkVersion="7" />

<application
    android:description="@string/app_description"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Light" >
    <activity
        android:name="com.xyz.Main.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

代码检查工具告诉我我的活动未在清单中注册,如果我尝试运行它,LogCat会友好地告诉我:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.name/com.xyz.Main.MainActivity}: java.lang.ClassNotFoundException: com.xyz.Main.MainActivity

这让我感到非常疯狂,我已经重新安装了Eclipse,并将SDK更新到API级别17,现在似乎无法执行自己的应用程序。我完全不知道出了什么问题,显然该活动已在manifest.xml中完美注册。

提前致谢。


也没有起作用。软件包名称是100%正确的,仅通过使用相对路径来引用类(通过使用点)无法完成任务。重新安装SDK也没有解决问题。 - chollinger
我向你保证,导致这个错误的原因非常愚蠢 :P。尝试彻底更改包名,com.[你的姓氏].[你的应用名称].MainActivity。然后确保在你的MainActivity类顶部,你有package com.[你的姓氏].[你的应用名称]; - Alex Lockwood
通过“更改软件包名称”,我不是指仅在清单中更改该行。如果您真的已经因为这个问题而苦恼了过去两周,那么从新建一个全新的项目开始,并将最少量的文件从旧项目复制粘贴到新项目中,直到您确信它可以编译为止,这可能是个好主意。逐步执行此操作,以便您知道哪些文件会引起问题(如果有问题出现)。 - Alex Lockwood
你也可以尝试执行 Project --> Clean,然后重新启动 Eclipse(当你重新安装 Eclipse 时不会执行此操作...你的项目完全独立于 IDE)。 - Alex Lockwood
你尝试过创建一个新项目并从那里开始吗? - Alex Lockwood
显示剩余7条评论
6个回答

4

这也是我的猜测。我遇到了同样的问题。你可以快速修复并在项目中禁用检查,直到他们解决它。这就是我们正在做的。 - Kevin Westwood
对我来说没有起作用。将包名更改为仅小写字母,但并未注意到任何变化。 - chollinger

3
我有解决方案。今天我感到足够的动力再次着手处理这个项目,并尝试将该项目移植到Linux发行版(这让我得出结论,Linux对Android开发来说是一个麻烦事情),同时逐行将其集成到一个新的Android项目中。
我曾经使用String-和Integer-接口实现某些常量和值(例如,“可见”为0x00)。不幸的是,Android似乎在接口和活动类方面存在问题。删除接口并对常量进行静态引用使模拟器摆脱了这个问题。
public class MyActivity extends Activity implements Options // [...]
Btn.setVisibility(VISIBLE); // bad idea

public class MyActivity extends Activity // [...]
Btn.setVisibility(Options.VISIBLE); // good idea

希望这能帮助至少有人解决此问题。

2
如果出现这种情况,请更正“package”名称(正如其他人所述),然后确保重新运行“Android Lint”。
在纠正错误后,警告将一直存在,直到再次运行Lint。

1

我曾经遇到过同样的问题:Lint无法识别AndroidManifest.xml中明显正确的描述。

然后我将包名更改为只有小写字母和点的名称。

Eclipse中的重构方案没有自动重命名所有地方的包名,因此我不得不手动修复一些情况,例如在清单文件中重新输入包名。

当应用程序的所有部分最终都引用了新的包名时,Lint也终于满意了。

因此,如果您想要麻烦,请在包名中使用大写字母和数字。

我想称这为Lint中的一个错误,或者至少是一个恼人的问题,因为包名应该允许遵循Java规则。


1

我也曾经遇到同样的错误信息,原因是我自己犯了一个愚蠢的错误。花了我一些时间才找到它,所以以防其他人犯同样的错误并且看到这个帖子,这里是我做错的事情:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.DogsDropDown">

    <uses-sdk android:minSdkVersion="7"
              android:targetSdkVersion="14"/>

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">
    </application>

    <activity
        android:name="com.example.DogsDropDown.MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

</manifest>

一旦你看到它,就很明显了 - 我将规范放在<application>规范之外,而不是里面。

0

如果要启动一个在Android清单文件中未注册的活动,您也可以使用以下代码片段:

Gist


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接