无法从库中实例化活动

时间:2013-08-06 04:04:39

标签: android

我正在尝试创建一个具有不同风格(例如免费,付费)的应用程序,通过将尽可能多的通用代码放入库中,并为每种风格制作项目。目前,主要活动的Java类在所有版本中都是相同的,它只是布局和“values”资源目录中定义的一些常量,需要更改以控制行为。

我在“免费”项目的清单文件中定义了活动,如下所示:

<activity
        android:name="librarypackagename.Foo"
        android:label="@string/bar" 
        android:launchMode="singleTask"
        android:uiOptions="splitActionBarWhenNarrow"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

但是在测试应用程序时,我收到以下错误:

“无法实例化Activity ComponentInfo {freeapppackagename / librarypackagename.Foo}:java.lang.ClassNotFoundException:路径上没有找到类”librarypackagename.Foo“:DexPathList [[zip file”/ data / app / freeapppackagename-2 .apk“],nativeLibraryDirectories = [/ data / app-lib / freeapppackagename-2,/ vendor / lib,/ system / lib]]”

是否无法将库中的活动用作主要活动?我也尝试过在我的免费应用程序项目中扩展Foo,并将其作为主要活动,但我仍然得到相同的例外。

编辑(删除了清单文件,因为事实证明它们与问题无关):

此外,在Eclipse中,我刚刚注意到我收到以下错误消息(尽管项目仍在构建中):

  

在依赖项列表中找到2个版本的android-support-v4.jar,    但并非所有版本都相同(仅在此时检查基于SHA-1)。    目前,所有版本的库必须相同。    发现的版本是:    路径:D:\ Work \ Eclipse \ LiteApplicationName \ libs \ android-support-v4.jar       长度:556198       SHA-1:4a6be13368bb64c5a0b0460632d228a1a915f58f    路径:D:\ Work \ Eclipse \ LibraryName \ libs \ android-support-v4.jar       长度:385685       SHA-1:48c94ae70fa65718b382098237806a5909bb096e    罐子不匹配!修复您的依赖项

奇怪的是,android-support-v4.jar文件出现在应用程序项目的“Referenced Libraries”中,但出现在库中的“Android Private Libraries”中。

2 个答案:

答案 0 :(得分:0)

有几件事需要注意。

  • 在您定义活动的课程时,请确保您在文件顶部有package com.librarypackagename;的效果。
  • 您应该有两个AndroidManifest.xml文件,一个用于您的库,另一个用于您的主项目。
  • 在您的库AndroidManifest.xml中,确保定义您的活动的元素具有<library>而非<application>
  • 的父XML标记
  • 在您的库AndroidManifest.xml中,确保将package属性设置为com.librarypackagename
  • 之类的内容

如果您对这些问题有任何疑问,请与我们联系。如果您提供了有关项目当前结构的更多信息,将会很有帮助。

答案 1 :(得分:0)

原来它与库不匹配问题有关。我右键单击了应用程序项目,并选择了Android Tools&gt;添加支持库。这安装了一个包,然后“android-support-v4.jar”也出现在应用程序项目的“Android Private Libraries”目录中。现在我不再得到例外。