Android库项目作为分发的jar文件,如谷歌分析

时间:2012-05-31 05:41:51

标签: android jar

我已经看到了this的问题,并且对于创建一个我可以分发的jar文件有一些疑问,可以在任何Android应用程序中使用。

我的要求是什么

  1. 正如我所说,我想构建和分发一个封闭的源库。一世 不希望源代码可见。
  2. 在该库中,我不想使用任何资产,布局和资源 但是我想使用一些特定于Android的代码,比如getting android device id.
  3. 上面链接的SO问题中最受欢迎的答案告诉创建一个普通的java项目并在其中导入android.jar。我试图这样做,但我不知道如何将android.jar添加到任何java项目中。我也希望得到一些澄清。

    此外我想知道是否有任何其他方法使用android sdk本身(不使用java项目)创建一个封闭的源库jar文件。

    我认为我想要的是可能的,因为google analytics for android native apps似乎已经做到了。我相信他们分发的.jar文件中他们使用的是特定于Android的代码,因为他们似乎没有办法让设备信息显示在分析查看器中。

    编辑:有人可以澄清这个吗?

    我想我已经取得了一些进展。这就是我所做的

    • 创建了一个常规的android项目(不是库项目,"是 文库"选中标记未选中)

    • 在项目中,我编写了我的逻辑。它使用了一些android 特定类,例如SharedPreferenceUUIDPackageManager。但 与资产无关,布局也没有类扩展 Activity。只是一个扩展java.lang.object

    • 的java类
    • 使用项目 - >右键单击>导出 - > Java-> JAR导出项目 文件。在下一个屏幕中,我取消选中附近的复选框 AndroidManifest.xml。设置要导出的目标目录和 在保持默认设置的情况下单击下一次三次。然后我点击了 完成,并在我的桌面上获得了一个可爱的 libMyLibraryName.jar

    然后我创建了另一个Android项目,使用 project-> rightclick-> properties-> java build path - >将此libMyLibraryName.jar添加到新项目中。 libraries->添加外部jar。

    我试图在我的新项目中使用我的课程

    MyLibraryClass objClass = new MyLibraryClass(this);
    

    我能够成功编译并运行。我甚至将图书馆发送给了我的同事之一,他可以在他的机器上使用该库(只是确保我工作区中的库项目不会影响使用它的项目)。

    现在我有两个问题。

    1)我的第一个问题是,他们用“真正的图书馆”这个术语是什么意思"在下面给出的文档中?是否可以导出到JAR文件的任何非android java项目?

      

    但是,库项目与标准Android不同   应用程序项目,你不能直接将它编译为自己的   .apk并在Android设备上运行它。 同样,您无法导出   正如您所做的那样,将库项目转换为自包含的JAR文件   对于真正的库。相反,您必须间接编译库,   通过引用依赖应用程序中的库并构建   该申请。

    这一部分取自documentation标题"图书馆计划"。

    2)我的第二个问题是,我创建JAR文件的方式有什么问题?任何可能的陷阱都可能会让我以后再次陷入困境?在我的重要项目中使用它之前,我想确保我没有做一些非常错误的事情。

    我可能会补充一点,我没有尝试创建JAVA项目并导入android.jar的方法。如果我目前所做的事情是错误的,我准备尝试那个。

1 个答案:

答案 0 :(得分:4)

android.jar将位于您安装Android SDK的位置。在platforms目录下,应该有许多名为android-<version>的其他目录。 android.jar将在那里。选择特定于您要定位的最小Android版本的版本。

完成后,将其复制到项目中。如果您正在使用eclipse,我认为您可以直接将罐子剪切并粘贴到项目中,右键单击并将其添加到构建路径中。如果你没有使用eclipse或任何其他IDE,你只需要确保在构建jar文件时android.jar在类路径上。

之后,您新建的Android库可以放入任何Android项目中。

回答您的其他问题:

  1. 真正的库是什么意思是jar文件,而不是Android库项目。

  2. 我认为你创建jar文件的方式没有任何问题。我会按照上面提到的android.jar使用它,但你的方式也应该有效。为了验证这一点,我会检查jar内容并确保其中包含.class个文件。