Android:活动未在清单中注册

时间:2012-03-24 15:22:22

标签: android android-activity runtimeexception

<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>

Lint工具告诉我,我的活动没有在清单中注册,如果我尝试运行它,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中完美注册。

提前致谢。

6 个答案:

答案 0 :(得分:4)

您的包名称包含大写字母(“Main”),这可能是个问题。在code.google.com上查看此问题:

http://code.google.com/p/android/issues/detail?id=27529

答案 1 :(得分:3)

我有解决方案。今天我觉得有足够的动力让我再次参与这个项目,并尝试将项目移植到Linux发行版(这让我得出结论,Linux对于Android开发人员来说是一个痛苦的问题)以及将它整合到“行”按行“到一个新的Android项目。

我曾经实施String-&amp;具有某些常量和值的整数接口(例如,“可见”为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 :(得分:2)

如果发生这种情况,请更正“包”名称(正如其他人所说),然后务必重新运行“Android Lint”。

警告将保持不变,直到纠正错误后再次运行Lint。

答案 3 :(得分:1)

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

然后我将包名改为只有一个小字母和小点的包名。

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

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

因此,只有在您喜欢麻烦的情况下才能在包名中使用大写字母和数字。

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

答案 4 :(得分: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>

一旦你看到它就很明显了 - 我放了&lt; activity&gt; &lt; application&gt;之外的规范规范而不是内部。

答案 5 :(得分:0)

要启动未在 Android Manifest 中注册的 Activity,您还可以使用以下代码段:

Gist