将库/ JAR添加到Eclipse Android项目


130

这是有关将第三方库(JAR)添加到Eclipse中的Android项目的两部分问题。

问题的第一部分是,当我尝试向我的Android项目中添加第三方JAR(库)时,我首先遇到以下问题:

解析XML时出错:未绑定前缀

因为我正在尝试使用该JAR中的类(并且需要以某种方式定义前缀)。这是怎么回事?

其次,(在解决该问题后-给出下面的答案),我的应用程序无法在Android上运行,并且通过调试器(LogCat)发现我尝试使用的类不存在。

引起原因:java.lang.ClassNotFoundException:com.github.droidfu.widgets.WebImageView ...

为什么当我在Eclipse中没有编译或链接器错误时,在模拟器上是否有此问题?

这两个问题是修辞性的,我将在下面亲自回答。该论坛上的其他帖子都讨论了该问题,在其他地方也进行了讨论,但是我觉得我可以为下一个新手提供更明确的帮助。

Answers:


316

现在是缺少类的问题。

我是Eclipse Java EE开发人员,多年来一直习惯通过“构建路径”中的“用户库”机制添加第三方库。当然,至少有3种添加第三方库的方法,以我的拙见,我使用的是最优雅的方法。

但是,这对于Android不起作用,对于Android,其Dalvik“ JVM”无法处理普通的Java编译类,但必须将其转换为特殊格式。当您以我不会做的方式添加库时,不会发生这种情况。

相反,请遵循(广泛使用的)导入第三方库的说明,然后使用构建路径添加它(这使Eclipse出于编译目的而知道它)。这是逐步的:

  1. 将库下载到您的主机开发系统。
  2. 在Eclipse / Android项目中创建一个新文件夹libs
  3. 右键单击库,然后选择导入->常规->文件系统,然后单击下一步,在文件系统中浏览以找到库的父目录(即:将其下载到的目录)。
  4. 单击“确定”,然后在左窗格中单击目录名称(而不是复选框),然后在右窗格中检查相关的JAR。这会将库(实际)放入您的项目中。
  5. 右键单击您的项目,选择Build Path-> Configure Build Path,然后单击Libraries选项卡,然后单击Add JARs ...,导航到libs目录中的新JAR 并将其添加。(顺便说一下,这是新的JAR转换为可在Android上使用的时刻。)

注意

如果lib已包含在您的构建路径中,则可能不需要步骤5。只需在添加之前先确保其存在。

您在这里所做的事情完成了两件事:

  1. 在您的Android项目中包含Dalvik转换的JAR。
  2. 使Java定义可用于Eclipse,以便在开发(即编译)项目的源代码时找到第三方类。

拉斯,您可能应该再提出一个单独的问题。坐在这里,这个“答案”看起来有点奇怪。
Paul Gregoire

3
因此,我稍微重写了部分问题。我抵制了做简单事情的诱惑(您在这里提出的建议),因为我真的认为,这两个问题都源于试图添加第三方库,并且我敢打赌,遇到第二个问题的任何人都可能会遇到这种麻烦。也是第一个。谢谢。
Russ Bateman 2010年

我希望在正式的Android文档中对此有更明确的描述(尚未偶然发现),并且在其他论坛中可以找到其他答案,但永远不要盲目地指出问题所在。请注意,在BlackBerry上,同样的问题也是一个巨大的噩梦,没有人提供可靠的解决方法信息-不确定我该怎么做。
Russ Bateman'9

2
@RussBateman大家好,我尝试了上面提到的步骤,并成功地将库jar包含在我的android项目中,因此在编译时我的项目可以访问这些库类。但是当我运行该项目时,出现了一个错误在我的控制台中:“转换为Dalvik格式失败,出现错误1” ..并且我的项目无法启动!
Zeba 2012年

在某些情况下,这是行不通的……我不记得我到底做了什么,删除了libs文件夹,读了它……现在做了你说的一切,添加了libs,导入了jar,添加了构建路径。 。编译器错误消失了,但是仍然会得到运行时异常,即找不到该类:(
Ixx 2012年

20

确保您的第3方jars在项目的“ libs”文件夹中,并且在打包应用程序时将它们放在.apk中。如果不支持jar中的某些内容,则可能会在设备上看到运行时错误,但除此之外,我在此方面取得了很大的成功。


1
关于经验,我之前也遇到过同样的问题:)
Paul Gregoire 2010年

主席先生,谢谢您,但是很高兴看到libs文件夹需要我们在Maven存储库中或某个地方已经拥有的外部Jar文件的副本。
asg 2013年

1
遗憾的是,这不再自动起作用,您还必须告诉eclipse将库包含在软件包文件中。
尼尔·汤森

什么时候改变了?这是对我们所有人习惯的巨大改变。
Paul Gregoire

5

设置图书馆项目

库项目是一个标准的Android项目,因此您可以像创建新应用程序项目一样创建一个新项目。

创建库项目时,可以选择任何应用程序名称,程序包,并根据需要设置其他字段,如图1所示。

接下来,设置项目的属性以表明它是一个库项目:

在包资源管理器中,右键单击库项目,然后选择“属性”。在“属性”窗口中,选择左侧的“ Android”属性组,然后在右侧找到“库”属性。选中“是库”复选框,然后单击“应用”。单击“确定”关闭“属性”窗口。现在,新项目被标记为库项目。您可以开始将源代码和资源移入其中,如以下各节所述。


4

如果您使用的是ADT版本22,则需要在项目构建路径的order&Export选项卡中检查android依赖项和android私有库


2

首先,缺少前缀的问题。

如果您在布局文件中使用了来自第三方的内容,则可能还需要使用其前缀,例如“ droidfu:”,它出现在以下XML构造的多个位置:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

它来自JAR,但您还需要添加新的“ xmlns:droidfu”

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

否则会收到未绑定前缀错误。对我而言,这是从第三方库页面复制并粘贴所有提供的示例的失败。


1

解析XML时出错:未绑定前缀

资源“ / playteddy / res”不存在。

我遇到了以上两个错误,最后我解决了。

右键单击您的项目->属性-> Java构建路径-> googleadmobadsdk(选择并放在顶部),然后运行并解决问题。解决了我的运行时错误。


0

将源放在工作空间外部的文件夹中。右键单击项目浏览器,然后选择“导入...”

将工作空间中的项目作为Android项目导入。尝试构建它,并确保将其标记为库项目。还要确保它是使用Google API支持构建的,否则,您将得到编译错误。

然后,在项目浏览器中右键单击您的主项目。选择属性,然后在左侧选择Android。在下面的库部分中,单击“添加”。

现在应该可以使用mapview-balloons库将其添加到您的项目中。


0

转到Eclipse中的构建路径,然后单击“排序并导出”,然后检查库/ jar,然后单击“向上”按钮将其移至列表顶部以首先对其进行编译。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.