【问题标题】:How do you reference classes in an Android library project如何在 Android 库项目中引用类
【发布时间】:2011-11-15 17:52:15
【问题描述】:

我正在尝试 fork 我的 android 应用程序,并且由于我的 other question here 使用库项目而找到了一种方法。它对于可绘制对象和字符串资产来说已经足够好了。但是现在我遇到了一个问题。

我有一个扩展Application 的课程(不是一个活动)。我将这个类移到我的库项目中,并希望将它用于我的两个派生应用程序中的主应用程序类(直接在主应用程序中工作正常)。

假设我的库是 my.project.library,而我使用该库的应用程序是 my.projectmy.project 的清单中,我指定了以下内容:

<application android:name="my.project.library.AppClass">

它可以很好地编译和部署,但是当我尝试运行它时,它会强制关闭,但出现以下异常:

11-15 03:14:25.707: E/AndroidRuntime(16800): java.lang.RuntimeException: Unable to instantiate application my.project.library.AppClass: java.lang.ClassNotFoundException: my.project.library.AppClass in loader dalvik.system.PathClassLoader[/data/app/my.project.apk]

从我也从库中导入的绘图中,似乎库内容已内嵌到主应用程序中。所以我尝试将我的清单更改为:

<application android:name="my.project.AppClass">

但我仍然遇到同样的错误。

如何在主应用程序中引用库中的类作为我的应用程序类?

【问题讨论】:

  • 所以你有两个模块用于同一个应用程序或者我不明白你的问题:)?
  • 不,更多的是我有两个应用程序,我想在其中使用库中的同一个类,以避免重复代码。我们的努力是制作应用程序的免费和付费版本,同时尽可能保留一个代码库。

标签: android android-manifest classnotfoundexception


【解决方案1】:

您的原始参考是正确的。

即:

<application android:name="my.project.library.AppClass">

听起来您没有正确引用库项目,请参阅 http://developer.android.com/guide/developing/projects/projects-eclipse.html 引用库项目部分。

【讨论】:

  • 我回家后一定要试试这个。昨晚我在清单 GUI 编辑器中查看了那个,......但很困惑,因为我将库项目添加到 Project(right-click) &gt; Properties 下的项目引用属性中。会期望 Eclipse 完全添加参考。但我今晚会检查一下。
  • 我试过这个,但现在我根本无法部署我的应用程序。我收到错误INSTALL_FAILED_MISSING_SHARED_LIBRARY。我很困惑,因为根据我的其他链接问题,我认为该库在部署时已打包到主应用 APK 中,那么为什么我会收到缺少引用的错误?
  • 好吧,……奇怪。但我想我修好了。我已将 required 设置为 true... 认为该库是我的应用程序运行所必需的。这导致了INSTALL_FAILED_MISSING_SHARED_LIBRARY,当我设置 required = false 时,它​​不再抛出该错误,部署良好,并按预期运行。有趣的。谢谢指点!
【解决方案2】:

我认为您没有描述您在清单中使用的库,因此您需要在清单中添加类似的内容。

<uses-library android:name="my.project.library" />

【讨论】:

  • 我试过这个,但现在我根本无法部署我的应用程序。我收到错误INSTALL_FAILED_MISSING_SHARED_LIBRARY。我很困惑,因为根据我的其他链接问题,我认为该库在部署时已打包到主应用 APK 中,那么为什么我会收到缺少引用的错误?
  • 您是否已将库正确添加到您的项目中?好像你的项目设置有问题。
  • 是的,该库也已添加到项目属性中。当我添加 using 指令时,我将 required 属性设置为 true,因为该应用程序需要该库。这导致了有关缺少库的错误。我设置了required=false,然后一切都很顺利。奇怪的。我猜 required 属性并没有听起来像。但是,现在一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
相关资源
最近更新 更多