如何为Android库项目创建jar


74

我必须创建一个库,然后以jar文件将其导出到客户端。有什么方法可以创建一个带有资源的jar?

Google adMob有一个jar,其中包含资源文件,例如R $ layout.class。 本页描述了执行此操作的方法,但是我无法确切了解如何使用上述方法将库项目导入应用程序。

Answers:


81

这是您可以获得的最接近的:

步骤#1:创建一个常规的Android库项目,并使其正常运行。

步骤2:将Android库项目复制到另一个目录。

步骤3:根据原始Android库项目中的已编译Java类创建JAR,然后将该JAR放入libs/您在步骤2中创建的副本的目录中。您应该可以在此JAR上手动运行ProGuard,尽管我没有尝试过。

步骤#4:删除src/复制的库项目的目录内的所有内容,并留空src/目录。

步骤5:压缩或分发复制的Android库项目。

这将为您提供一个像Play Services这样的Android库项目,其中有可用的资源,但没有源代码。

更新:如今,一种更好的方法是将您的库项目打包为AAR,这是Android的本机方式,可从您的已编译代码和所需资源中创建可重用的工件。目前(2014年7月),适用于Android的Gradle,Android Studio和android-maven-plugin可以创建和使用AAR。


5
库项目与标准Android应用程序项目的不同之处在于,您不能将其直接编译为自己的.apk并在Android设备上运行。同样,您不能像真正的库那样将库项目导出到独立的JAR文件中。相反,必须通过在从属应用程序中引用该库并构建该应用程序来间接编译该库。我认为doc的这句话支持您的答案
Raghunandan

@CommonsWare如果ProGuard在JAR上运行,则您的大纲效果很好。如果您确实(手动)将ProGuard应用于JAR,则所有从属项目将抱怨所有引用的符号“无法解析”。我刚刚尝试过,这就是我收到的。我想念什么吗?
2013年

1
@stumpped:您需要设置ProGuard配置文件,以免混淆从属项目所需的公共内容的名称。
CommonsWare 2013年

@CommonsWare引用官方指南:注意:您需要SDK工具r14或更高版本才能使用新的库项目功能,该功能将每个库项目生成到自己的JAR文件中。 developer.android.com/tools/projects/index.html#LibraryProjects
Mahmoud Abou-Eita 2013年

却在同一页面上:您不能将库项目导出到JAR文件。库不能作为二进制文件(例如JAR文件)分发。它将在以后版本的SDK工具中添加。
Mahmoud Abou-Eita

22

这可行!

  1. 通过取消选择IsLibrary标志,使您的库项目成为普通项目。
  2. 将项目作为Android应用程序执行。(它不会显示任何错误)
  3. 您会在bin文件夹中找到一个.jar文件以及.apk文件。
  4. 给您想要使用您的库的.jar。
  5. 告诉他们将外部jar导入构建路径。

这将与所有资源一起正常工作。谢谢大家 为您的回应


当我这样做时,我的bin /目录中没有生成.jar文件吗?
大卫·多里亚

仅当我确实选中“是库”时,才获得.jar。但是,当我将其添加到我的依赖项目中时,资源将无法使用。
David Doria 2013年

2
如果您想使用资源,请检查以下内容:stackoverflow.com/a/17064024/1779907。如果您的图书馆没有任何资源,我在答案中解释的方法将起作用。如果您也想保护资源,请用Java对其进行硬编码(例如我使用base64编码将图像直接保存在Java界面中),然后您可以使用答案中说明的方法(如果资源较少,则效果更好) 。
Aayush Rana

在这里查看我的答案,以获取更简单的方法-顺便说一句,您的回答使我进入了正确的轨道;)
Mr_and_Mrs_D 2013年

5
这将无法使用资源!该jar,甚至没有res库,您可能已经忽略了使用该库的项目属性!
TacB0sS 2013年

14

请按照以下步骤获取您的库的可分发jar(已针对没有外部依赖项的库项目进行了验证):

  1. 创建您的库项目。打扫。您将在bin文件夹中获得一个libraryProjectName.jar文件。(确保“是图书馆”选择在库项目。
  2. 将.jar文件复制到目标应用程序libs文件夹中
  3. 刷新工作区,然后按Ctr+Shift+O(在Windwows / Linux上)或Cmd+Shift+O(在Mac上)按来从添加的库中解析所有导入依赖项。

如果遇到任何问题,请发表评论。


6
到目前为止,这是从“图书馆项目”创建JAR的最简单方法,但是...它不包含resassets文件夹。我想念什么吗?
ripopenid 2013年

@ripopenid那些不能在JAR中。那就是您需要参考的库项目。
caw

@MarcoW。,仅res可能,甚至引用也不允许我们使用assets,请参阅developer.android.com/tools/projects/index.html#LibraryProjects:“应用程序使用的任何资产资源都必须存储在资产/应用程序项目本身的目录”。
Pacerier,2014年

那就对了。JAR会为您提供src目录。图书馆项目还可以帮助您res。更多是不可能的。
2014年

3

您不能将资源文件打包到jar中。您可以将项目导出为库项目。

您将不引用android中资源的实用程序类(即纯Java类)导出为jar文件。

检查下面的链接

http://developer.android.com/tools/projects/index.html

使您的项目成为图书馆项目

右键单击您的项目。转到属性。选择Android。确保选中了库。

在您的android项目中引用库项目

右键单击您的项目。转到属性。选择Android。单击添加。浏览和图书馆项目。

引用文档

库项目与标准Android应用程序项目的不同之处在于,您无法将其直接编译为自己的.apk并在Android设备上运行。同样,您不能像真正的库那样将库项目导出到独立的JAR文件中。相反,必须通过在从属应用程序中引用该库并构建该应用程序来间接编译该库。


1
库不能作为二进制文件(例如JAR文件)分发。它将在以后版本的SDK工具中添加。引用developer.android.com/tools/projects/index.html
Raghunandan 2013年

8
在新的Gradle构建系统中,您将可以创建所谓的aar文件(Android存档),这正是您想要的。它基本上就像一个APK(包含资源,清单等),仅用于库。因此,如果您需要适当的支持,请切换到Gradle。
蒂姆·罗斯2013年

我没有投票(没有足够的分数),但是我可以猜测这不是可能的,而不是回答如何为Android Library Project创建jar。所有其他答案实际上都显示了创建此类jar的(有效)方法。
ripopenid 2013年

3

经过adt 22.2.1测试

  1. 创建您的图书馆项目
  2. 创建空项目
  3. 将库项目添加到空项目
  4. 建立项目
  5. 在/ gen文件夹中,您将找到您的库项目的类,其中将包含您的lib项目资源。
  6. 导出JAR(仅从/ gen文件夹中选择此类...)
  7. 从您的lib项目中导出JAR
  8. 重命名导出的文件以压缩并合并内容
  9. 将最终文件重命名为JAR并将其添加到项目中。

您是否尝试过将Proguard应用于JAR?如果是这样,它是如何工作的?有困难或并发症吗?
ripopenid 2013年

第6步将使您的方法成为@CommonsWare的方法的更好的替代方法,不同之处在于,如果该库的用户(即应用程序项目)定义了自己的资源,则它实际上不起作用。因此,看起来CommonsWare的方法仍然是最好的。
ripopenid

这将不包括资源,这通常是Android库项目背后的重点。
CommonsWare 2014年

1

在Volley源代码中找到了使用ant的简单方法。将以下代码添加到custom_rules.xml,然后使用ant jar

<?xml version="1.0" encoding="UTF-8"?>
<project name="volley-rules" default="help">

  <!-- A rule to generate the JAR for inclusion in an Android
       application. Output file will be bin/volley.jar -->
  <target name="jar" depends="-compile">
    <jar destfile="bin/volley.jar"
         basedir="bin/classes" />
  </target>
</project>

不错,使用ant的想法,但是如果将.class一个接一个地添加到xml中,将很困难
Subhanshuja

1

根据最新的Android Studio v1.2,它就像吃蛋糕一样容易。已通过此链接的屏幕截图回答了完整的解决方案


0

使用Eclipse ADT v22.6.2,您可以通过单击File-> Export-> Java-> Jar File导出jar,选择目录和保存位置。


3
这将不包括资源,这通常是Android库项目背后的重点。
CommonsWare,2014年

仅使用eclipse创建jar并不完整,我认为直接在android studio中使用更好。
Subhanshuja
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.