【问题标题】:Is it possible to create jar that includes android functions?是否可以创建包含 android 功能的 jar?
【发布时间】:2012-07-10 21:05:33
【问题描述】:

正如主题所示,我想创建一个 jar 库,它使用一些 android 函数(无布局)并将包含在一个 Android 项目中。 这可能吗?怎么做? 根据我所做的研究,我设法包含了一个使用纯 Java(JAVA SE 1.6)的简单 jar 文件,但是 当我尝试创建一个 jar 文件时,我在尝试运行 Andoid 应用程序时遇到了以下异常:
FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: mylib.pleasework.amen

我尝试在我的库中包含 android.jar 并删除 java 库,以便针对 android sdk 构建 jar 文件,但它不起作用。
我尝试将 jar 文件包含在 /libs 文件夹下,因为据说这是从 ADT v17 及更高版本在 android 项目中导入 jar 的正确方法,但这也不起作用。
我要创建的 jar 不会使用任何资源(xml 布局、strings.xml),只使用 Log.d 和 WifiManager。
我知道 Android 库项目,但我的库源很敏感,我担心它不会如果暴露在 Android 库项目中是不安全的。我正在考虑创建一个 jar 并使用 ProGuard(http://developer.android.com/tools/help/proguard.html)对其进行混淆。 我想我提到了一切。任何帮助将不胜感激。

谢谢,
托马斯

【问题讨论】:

    标签: android jar obfuscation android-library


    【解决方案1】:

    正如主题所示,我想创建一个 jar 库,它使用一些 android 函数(无布局)并将包含在一个 Android 项目中。这可能吗?如何实现?

    使用jar 命令或<jar> Ant 任务。我确信有一些方法可以从 Eclipse 中导出 JAR,但我个人从未使用过它们。

    例如,在this GitHub repo 中,我有一个可重用的组件和一个作为示例应用程序的子项目。我的 build.xml 的 repo 包含以下自定义任务:

    <target name="jar" depends="debug">
        <jar
            destfile="bin/CWAC-WakefulIntentService.jar"
            basedir="bin/classes"
        />
    </target> 
    

    这会生成一个 JAR 文件,其他 Android 应用程序可以通过添加到它们的 libs/ 目录来使用该文件。

    我知道 Android 库项目,但我的库源是敏感的,我担心如果暴露在 Android 库项目中会不安全。

    那么,将其作为 JAR 公开也不安全。您可以创建一个供公众使用的 Android 库项目,用库中 libs/ 中的已编译 JAR 替换 src/ 树的内容。

    【讨论】:

    • 首先感谢您的回答。我已经从 Eclipse 导出了 jar,当我将它导入我的 Android 项目时,在构建时一切正常。在运行时,我得到了我上面提到的异常。我不知道直接使用蚂蚁是否会有所作为我想我必须尝试...在我的 jar 中我是否也应该包含 - 导出 android.jar?关于安全性,如果我理解正确的话,创建一个库项目并导入 jar 将创建一层“封装”,这样会更安全吗?
    • @ThomasKa:如果您使用的是 R17 或更高版本的工具,那么您只需将 JAR 放在 libs/ 中即可。如果找不到类,请确保它们在 JAR 中,标记为 public 等。“在我的 jar 中,我是否也应该包含 - 导出 android.jar?” - 绝对不。 “创建一个库项目并导入 jar 将创建一层“封装”,因此它会更安全?” -- 一旦代码离开你的开发机器,它本质上是不安全的。我猜你的问题是你不想发布源代码,并且有办法解决这个问题。
    【解决方案2】:

    我最后的做法是:创建一个Android Library项目(勾选项目属性中的isLibrary复选框)通过Eclipse导出(右键项目->导出->jar文件,注意取消选择所有资源- res 文件夹、androidmanifest.xml、*.png 等)并通过将其导入 /libs 文件夹将其放入所需的项目中。
    我不知道这是否是最好的解决方案,但它对我有用。
    使用 ADT r20、Eclipse 3.7.1、Android api level 7

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多