1

我正在尝试创建一个具有不同风格(例如免费、付费)的应用程序,方法是将尽可能多的通用代码放入库中,并为每种风格制作项目。目前,主要活动的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 文件“/data/app/freeapppackagename-2.apk” ],nativeLibraryDirectories=[/data/app-lib/freeapppackagename-2, /vendor/lib, /system/lib]]"

不能将图书馆的活动用作主要活动吗?我也尝试过在我的免费应用程序项目中扩展 Foo 并将其用作主要活动,但我仍然遇到相同的异常。

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

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

在依赖列表中找到了 android-support-v4.jar 的 2 个版本,但并非所有版本都相同(此时检查仅基于 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 Jar 不匹配!修复你的依赖

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

4

2 回答 2

0

有几件事需要注意。

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

如果您对这些要点有任何疑问,请告诉我。如果您提供有关项目当前结构的更多信息,将会很有帮助。

于 2013-08-06T04:17:20.683 回答
0

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

于 2013-08-06T23:41:21.557 回答