创建一个用于分发的Android Jar库


160

我知道Android库项目,这些项目使您可以创建一个共享源项目,该项目可以根据需要插入到Android应用程序中。但是,这需要该来源可用。

我正在寻找一种构建和分发可以在其他Android项目(如传统JAR)中使用的闭源库的方法。这将需要使用Android编译器,因此它不是普通的Java JAR文件。FWIW,我不需要在JAR中嵌入资源/布局。

我看过http://andparcel.com/,但感觉像是一种解决方法,我宁愿使用Google“官方支持”的方法。另外,我需要确保我构建的JAR与Android SDK的旧/新版本兼容(即,我需要一种设置目标平台版本的方法,等等)。

最新的Android工具集是否允许创建/使用JAR二进制文件?您能否指出一些有关如何执行此操作的文档?


你有问题的答案了吗?我有类似的要求。.您如何创建jar文件?
Krishnabhadra

要为Android分发.jar,您不需要Android dx编译器,常规Java编译器就可以使用。如果分发jar,则在构建应用程序时它将转换为dx字节码。
ThomasW

Answers:


49

如果您在没有资源的情况下创建Android Library项目,则ADT(首先在r16中引起注意)将在.bin文件夹中创建一个与该项目同名的.jar。



1
这使我受挫,但是我仍然需要分发资源文件夹吗?试图破坏动作栏Sherlock,我的项目将无法编译,因为它们找不到动作栏资源。
内森·史威文2013年

1
@schwiz这仅适用于非资源项目(如我在回答中所述)。否则,您需要将其导入为标准的Android库项目。
Freddroid

1
这仍然是真的吗?我myapp.jar/bin文件夹中看不到。有classes.jar,但不是吗?
垃圾收集器

我正在运行最新的ADT,但仍在/ bin文件夹中得到一个<项目名称> .jar。但是,如果您的项目依赖于资源,那就不好了,并且该项目需要作为图书馆项目包括在内(尽管您仍然会得到一个
.jar。– Freddroid

23

Android没有提供特殊的Android-JAR。但是您可以做的是向您的项目中添加一个build.xml并使用ant来构建JAR。

我的build.xml看起来像这样:

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

通过ant jar在项目主文件夹中运行来构建JAR 。


对此进行了尝试,并能够构建一个JAR文件,但是与将库导出到JAR相比,它的大小为奇数(只有343个字节)。关于缺少哪些标志的任何想法?
Shane Oliver

您可以使用存档程序(JAR是ZIP)检查JAR的内容,并查看缺少的内容并添加它们。您可以在此处找到更多信息:ant.apache.org/manual/Tasks/jar.html
white_gecko 2011年

5
随着最新的Android软件开发工具包,Java文件被编译成bin/classes,所以<jar destfile="MyAndroidLib.jar" basedir="bin/">应该是<jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
西奥

17

您可以创建一个“常规” Java项目并从那里导入Android.jar。然后,您将可以访问SDK中的每个组件。然后,您可以将项目导出为jar ...,然后从Android应用程序加载它。这很好用,而且似乎是一种简单易行的方法。


1
在那种情况下,如何声明库的组件,例如服务,活动,广播接收器,意图过滤器。客户端应用程序是否需要将所有这些声明保留在清单中?
罗恩

@ferostar如何将android.jar导入Java项目?
Krishnabhadra

如果该库具有资源,如何生成R.java并将其添加到JAR

15

只需转到要创建jar的项目的属性。单击Android选项卡。并在Is库中打勾。现在您可以在bin文件夹中看到.jar文件。可以在想要使用的位置使用它。


2
如果LibraryProject没有资源,这似乎可行。知道如何使它与资源一起使用吗?
内森·史威文2013年

但是,如果您的图书馆项目依赖于其他项目,那么这是一个错误的答案。这些参考将不被接受。
stevebot

10

Google唯一“官方支持”的解决方案是图书馆项目,它需要分发源代码。您可以按常规方式创建JAR,但不能在其中包含或引用资源。

不幸的是,我认为不可能在图书馆项目中包含打包的JAR,以此来解决源代码需求。


“您可以按常规方式创建JAR,但不能在其中包含或引用资源。” 如果我引用Android类或使用Android编译器,则<-在Eclipse中似乎无法正常工作。对如何使它起作用的线索?
psychotik

5
我只是在Eclipse中创建一个普通的Java项目,将android.jar添加到构建路径,然后选择Export-Java-Jar File。
杰夫·吉尔费特

@JeffGilfelt,如果在示例中将android.jar包含在android-13 sdk目录中,您是否仍可以在更高API级的项目中使用jar库?
弗朗·马佐亚

10

在最新版本的Android Studio 1.2中,只需单击即可简单地创建JAR库。

遵循的步骤:

  • 转到文件->新建->新建模块 在此处输入图片说明
  • 在选项列表末尾选择“ Java库” 在此处输入图片说明
  • 输入jar库的名称和其中的类的名称,然后单击完成按钮 在此处输入图片说明
  • 而已 !

下一步是在您的应用程序中添加Jar库作为依赖项。就这么简单

  • 转到文件->项目结构->选择“应用”->选择“依赖项”
  • 选择底部的“ +”->选择“模块依赖性” 在此处输入图片说明
  • 选择上面刚刚创建的jar lib模块 在此处输入图片说明 在此处输入图片说明
  • 选择确定,就这样!

....或者您可以将以下行添加到您的App gradle文件中

dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar']) // Default Gradle Task, should be already present
      compile 'com.android.support:appcompat-v7:21.0.3' // Default Gradle Task, should be already present

      compile project(':nameOfYourJarLibraryModule') // This is your jar library module
 }

即使将支持JAR的版本重新带回android studio,Google仍在推广Android Archive(AAR)。要了解AAR和JAR之间的区别,请访问此链接


我不明白这是如何创建一个新的jar文件的。您似乎正好在创建一个新模块,该模块将在您的Android项目中用作库
Jejefcgb,2015年

什么?!您从零开始创建新的jar?
Ewoks 2015年

@Ewoks:创建模块后,必须向其中添加类。完成后,将其添加为依赖项
Nishant。

2
问题是:有一个功能强大的库,带有源代码。如何制作jar,以便仅在其他项目中使用jar,而不是整个库源代码。.还是我错过了什么?
Ewoks 2015年

2
@Nishant。为我工作!谢谢!
ramires.cabral

6

试试这个:这有效

1)通过取消选择IsLibrary标志,使您的库项目成为普通项目。

2)以Android应用程序执行您的项目。(它不会显示任何错误)

3)您会在bin文件夹中找到一个.jar文件以及.apk文件。

4)给您想要使用您的库的.jar。

5)告诉他们将外部jar导入构建路径。

这将与所有资源一起正常工作。祝你好运。


1
我必须更正此帖子:JAR文件只能包含代码,不能包含android资源。如果包含/需要任何资源,我们必须保持库项目打开,而不能仅使用简单的JAR文件。
科迪

@cody:我们如何与资源一起生成jar文件,并在另一个项目中使用它?
Mahantesh M Ambi 2015年

1

ADT将创建一个bin文件夹,其中包含项目中所有匹配的源文件和目录的所有类文件,您可以使用jar命令,创建一个包含这些类文件和目录以及可能是您的库的jar归档文件,但是当然类文件平台级别仅针对项目构建的当前级别-每个平台级别您将需要一个不同的jar文件;但是,这样做的好处是R.class文件包含在项目目录树中,因此您可以访问其资源。我不知道这是否是在android中做事的正式方式,但是对我有用。


0

在我们的项目中,我们正在创建apk(使用apkbuilder),该apk安装在/ system / framework中,并将此apk添加到默认类路径中。为了使用jar编译应用程序,我们正在创建一个jar文件(使用jar c)。

注意:库中没有任何资源。


0

.jar只是一个包含.class文件的.zip文件(您可以尝试将任何.jar文件的扩展名更改为.zip,然后查看结果)。 您可以轻松地通过压缩.class文件来创建用于任何目的的任何.jar库。


并非完全正确,请参见en.wikipedia.org/wiki/JAR_(file_format)以了解细微差异(主要是ZIP中条目的顺序)
iddo

0

脚步 :

1)打开文件project.properties

2)增加价值 android.library=true

3)保存文件

4)从项目的Eclipse菜单中,选择自动构建,然后选择清理

结果:bin下创建了一个 新的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.