【问题标题】:Create an Android Jar library for distribution创建一个用于分发的 Android Jar 库
【发布时间】:2011-06-28 04:47:41
【问题描述】:

我知道 Android 库项目,它允许您创建一个可以根据需要拉入 Android 应用程序的共享源项目。但是,这要求该来源可用。

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

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

最新的 Android 工具集是否允许创建/使用 JAR 二进制文件?你能指出一些关于我如何做到这一点的文档吗?

【问题讨论】:

  • 您的问题得到答案了吗?我也有类似的要求。你是如何创建 jar 文件的?
  • 要为 Android 分发 .jar,您不需要 Android dx 编译器,常规的 Java 编译器可以工作。如果您分发一个 jar,它会在构建应用程序时转换为 dx 字节码。

标签: java android jar


【解决方案1】:

如果您在没有任何资源的情况下创建 Android 库项目,ADT(在 r16 中首次注意到)将在“bin”文件夹中创建一个与项目同名的 .jar。

【讨论】:

  • 这让我得到了 jar,但我还需要分发资源文件夹吗?尝试 jar 动作条 sherlock 并且我的项目将无法编译,因为它们找不到动作条资源。
  • @schwiz 这仅适用于非资源项目(就像我在答案中所说的那样)。否则,您需要将其作为标准 Android 库项目导入。
  • 这仍然是真的吗?我在/bin 文件夹中看不到myapp.jar。有classes.jar,但不是这样,对吧?
  • 我正在运行最新的 ADT,但我的 /bin 文件夹中仍然有一个 .jar。但是,如果您的项目依赖于资源,那就不好了,并且该项目需要作为库项目包含在内(尽管您仍然会得到一个 .jar。
【解决方案2】:

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 个字节)。知道缺少哪些标志吗?
  • 您可以使用存档程序检查 JAR 的内容(JAR 是 ZIP),查看缺少的内容并添加它们。您可以在这里找到更多信息:ant.apache.org/manual/Tasks/jar.html
  • 使用最新的Android SDK,Java文件编译为bin/classes,所以&lt;jar destfile="MyAndroidLib.jar" basedir="bin/"&gt;应该是&lt;jar destfile="MyAndroidLib.jar" basedir="bin/classes/"&gt;
【解决方案3】:

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

【讨论】:

  • 在这种情况下如何声明库的组件,如服务、活动、广播接收器、意图过滤器。客户端应用程序是否需要在清单中保存所有这些声明?
  • @ferostar 如何将 android.jar 导入 java 项目?
  • 如果库有资源,如何生成R.java并将其添加到JAR
【解决方案4】:

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

【讨论】:

  • 如果 LibraryProject 没有资源,这似乎可行。知道如何让它与资源一起工作吗?
  • 如果您的库项目依赖于其他项目,那么这是一个糟糕的答案。这些引用将不会被拾取。
【解决方案5】:

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

不幸的是,我认为在库项目中包含打包的 JAR 也是不可能的,以此作为绕过源代码要求的一种手段。

【讨论】:

  • "您可以按常规方式创建 JAR,但不能在其中包含或引用资源。"
  • 我只是在Eclipse中创建一个普通的Java项目,将android.jar添加到构建路径中,然后选择Export - Java - Jar File。
  • @JeffGilfelt,如果您在示例中包含 android-13 sdk 目录的 android.jar,您是否仍可以在项目中使用您的 jar 库以获得更高的 API 级别?
【解决方案6】:

在最新版本的 Android Studio 1.2 中,JAR 库的创建变得像点击一样简单。

要遵循的步骤:

  • 转到文件 -> 新建 -> 新模块
  • 选择选项列表末尾的“Java 库”
  • 在其中输入 jar 库的名称和类的名称,然后点击完成按钮
  • 就是这样!

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

  • 转到文件->项目结构->选择“应用程序”->选择“依赖项”
  • 选择底部的“+” -> 选择“模块依赖”
  • 选择你刚刚在上面创建的 jar lib 模块
  • 选择 Ok 就可以了!

....或者您可以将以下行添加到您的 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
 }

Google 正在推广 Android Archive(AAR),尽管支持的 JAR 已带回 android studio。要了解 AAR 和 JAR 之间的区别,请参阅 this link

【讨论】:

  • 我不明白这是如何创建一个新的 jar 文件的。看起来您正在创建一个新模块,该模块将用作您的 Android 项目中的库
  • 什么?!你从无到有创造新的罐子?
  • @Ewoks :创建模块后,您必须向其中添加类。完成后,将其添加为依赖项
  • 问题是:有一个带有源代码的实施库。如何制作它的 jar,以便在另一个项目中使用 jar 而不是整个库源代码。或者我错过了什么?
  • @Nishant。为我工作!谢谢!
【解决方案7】:

试试这个:这行得通

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

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

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

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

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

这适用于所有资源。祝你好运。

【讨论】:

  • 我必须更正这篇文章:JAR 文件只能包含代码,不能包含 android 资源。如果包含/需要任何资源,我们必须保持库项目打开,不能只使用简单的 JAR 文件。
  • @cody :我们如何生成jar文件和资源并在另一个项目中使用?
【解决方案8】:

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

【讨论】:

    【解决方案9】:

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

    注意:图书馆中没有任何资源。

    【讨论】:

      【解决方案10】:

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

      【讨论】:

      【解决方案11】:

      步骤:

      1) 打开文件project.properties

      2) 增值android.library=true

      3) 保存文件

      4) 从项目的 eclipse 菜单中,选择 build automatically 然后选择 clean

      结果: bin下创建了全新的jar

      【讨论】:

        猜你喜欢
        • 2013-07-30
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        • 2014-08-28
        • 2010-10-06
        • 2015-11-17
        • 2018-05-23
        相关资源
        最近更新 更多