【问题标题】:Unable to instantiate activity from library无法从库中实例化活动
【发布时间】:2013-08-06 04:04:39
【问题描述】:

我正在尝试创建一个具有不同风格(例如免费、付费)的应用程序,方法是将尽可能多的通用代码放入库中,并为每种风格制作项目。目前,主要活动的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:在路径:DexPathList[[zip file”/data/app/freeapppackagename-2 上找不到类“librarypackagename.Foo” .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”中。

【问题讨论】:

  • 请检查您的包裹。
  • 我使用了图书馆活动作为主要活动,所以这当然是可能的。也许如果您发布免费项目和库项目的整个清单,我们可以看到一些东西。
  • 我已经用两个清单文件更新了问题。

标签: android


【解决方案1】:

有几件事需要注意。

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

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

【讨论】:

  • &lt;library&gt; 文件中没有 &lt;library&gt; 元素。有一个&lt;uses-library&gt;,但这是针对使用系统上单独安装的另一个包中的代码的应用程序。
  • 奇怪的是,在 Android Studio 中编写清单时,我将 library 作为自动完成候选者,但是是的,这可能不会用于任何事情。随意编辑我的答案。
  • 尝试在库的清单中将“应用程序”更改为“库”,但没有效果。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2012-04-15
    • 2011-11-19
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多