Android Jar库

时间:2009-12-31 02:17:51

标签: android jar

如何设置一个可以生成可用于android的jar库文件的项目? 我想在所有项目中创建一个自定义库。

其他几个问题:

  1. 是否需要针对特定​​版本的android sdk进行编译?
  2. 当针对jar库编译android包时,处理代码所需的类是用主代码编译到apk中还是包含整个jar?
  3. 使用jar而不是直接集成代码,我需要了解任何值得注意的优化或陷阱吗?
  4. jar是否必须按照apk需要进行签名?

7 个答案:

答案 0 :(得分:29)

您需要对项目设置进行特殊设置,以创建可在Android应用中运行的jar文件。只需在Eclipse中创建一个普通的Java项目。

  1. 根本不需要针对Android进行编译。您可以包含任何jar文件,只要它不引用Android中未包含的类。只需将您的jar文件包含在Eclipse中Android项目的构建路径中,它将自动包含在您的APK文件中。

  2. 不确定,但我认为jar文件中的所有类都包含在APK中。

  3. 我不认为只是在jar中包含一些类而不是直接包含在生成的APK中。

答案 1 :(得分:29)

Google刚刚发布了处理共享库的新版SDK!

https://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject

ADT 0。9。7(2010年5月)

  

图书馆项目:
现在是ADT插件   支持使用库项目   在开发过程中,这是一种能力   让您存储共享的Android   应用程序代码和资源   单独的开发项目。您可以   然后参考图书馆项目   来自其他Android项目,以及   构建时间,工具编译   共享代码和资源作为一部分   依赖的应用程序。更多   有关此功能的信息是   可在Eclipse中开发   与ADT文件。如果你不是   在Eclipse中开发SDK Tools r6   提供等效的库   通过Ant构建项目支持   系统

答案 2 :(得分:5)

我向myselft询问了同样的问题:我可以在Android中导出和重复使用布局吗?我尝试了以下操作:将具有XML资源的项目导出到JAR文件,然后尝试通过它的R.layout访问布局。当然它没有用,因为R.layout.main是一个整数,与主机项目的R.layout中定义的单个布局(relative.xml)相关的整数相同。

Android SDK将布局xml文件编译到View资源中,并且由于包含的JAR文件中的XML文件不是布局xml文件,因此它们不会被编译,并且在R.layout中没有ID与它们相关联。

如果要从项目中导出布局,则应将其导出为XML,并将其作为布局资源导入新项目,而不是作为外部库的一部分。

如果要重用JAR中的布局,则必须创建View的子查询,并从代码构建布局。您可以实例化它并将创建的实例设置为活动视图,或将实例添加到您的活动视图中。

答案 3 :(得分:5)

这项工作对我来说!!!如果你想从一个库项目中将.jar文件用到你的应用程序中,该库项目使用生成R.java的attrs.xml等资源(并假设其他类似布局,字符串等)。您应该在eclipse中转到export->Java/Jar file->并选中导出所有输出文件夹以查看已检查的projects -> Finish ...这将确保在运行时使用此jar的应用程序不会为缺少的clases和资源生成异常

当然,要将jar包含到您的新项目中去。 project properties-> Java build path -> Libraries -> Add external jar ->你完成了。

希望这有帮助!

答案 4 :(得分:3)

要创建一个jar文件,您应该使用Eclipse的Export选项。 在导出对话框中,选择java和子选项JAR。 然后会显示一个向导,您需要进行一些选择。您需要指定jar文件的存储位置。

我第一次创建jar文件时遇到的错误是包含Android Manifest。添加创建的jar文件时,我遇到了双重android清单的冲突。

答案 5 :(得分:1)

您可以使用自定义方法动态访问R文件,示例链接如下。

Packaging Android resource files within a distributable Jar file

public static int getResourseIdByName(String packageName, String className, String name) {
   Class r = null;
   int id = 0;
try {
    r = Class.forName(packageName + ".R");

    Class[] classes = r.getClasses();
    Class desireClass = null;

    for (int i = 0; i < classes.length; i++) {
        if(classes[i].getName().split("\\$")[1].equals(className)) {
            desireClass = classes[i];

            break;
        }
    }

    if(desireClass != null)
        id = desireClass.getField(name).getInt(desireClass);
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (SecurityException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (NoSuchFieldException e) {
    e.printStackTrace();
}

return id;
}

答案 6 :(得分:0)

如果你查看在platforms / android-X.X / android.jar文件下的android.jar文件,它确实包含了布局XML项,所以你也应该能够创建一个。我只是不确定你是如何做到的,以及你如何在另一个项目中引用它们。