Android Jar库

你如何设置一个项目,可以导致可用于Android的jar库文件? 我想在所有项目中创build一个自定义库。

其他几个问题:

  1. 是否需要针对特定​​版本的android sdk进行编译?
  2. 当一个Android软件包被编译为一个jar库时,是否需要使用代码编译的主类代码到apk中,或者是否包含了整个jar?
  3. 我需要了解使用jar而不是直接集成代码的任何明显的优化或陷阱?
  4. jar子是否必须像apk需要签名?

Google只是发布处理共享库的新版SDK!

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

ADT 0.9.7(2010年5月)

图书馆项目:
ADT插件现在支持在开发过程中使用库项目,这种function允许您将共享的Android应用程序代码和资源存储在单独的开发项目中。 然后,您可以从其他Android项目中引用该库项目,并在构build时将这些共享代码和资源作为依赖应用程序的一部分进行编译。 有关此function的更多信息,请参阅“使用ADT进行Eclipse开发”文档。 如果您没有在Eclipse中开发,则SDK Tools r6通过Ant构build系统提供等效的库项目支持。

没有什么特别的,你需要做你的项目设置创build一个jar文件,将在Android应用程序的工作。 只需在Eclipse中创build一个普通的Java项目。

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

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

  3. 我不认为只是在项目中直接包含一些类,会直接影响APK。

我问自己同样的问题:我可以导出和重用Android中的布局。 我尝试了以下操作:将带有XML资源的项目导出到JAR文件,然后尝试通过R.layout访问布局。 当然,它不起作用,因为R.layout.main是一个整数,与主机项目的R.layout中定义的单个布局(relative.xml)关联的整数。

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

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

如果要从JAR重用布局,则必须创buildView的子视图,然后从代码构build布局。 您可以实例化它并将创build的实例设置为“活动视图”,或者将该实例添加到“活动视图”中。

这为我工作!!! 如果你想使用一个.jar文件进入你的应用程序,使用像attrs.xml这样的资源(假设其他类似布局,string等)生成R.java。 你应该在日食去export->Java/Jar file->和检查导出所有输出文件夹检查projects -> Finish …这将确保在运行时使用这个jar的应用程序不会生成一个失踪分类和资源。

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

希望这个帮助!

要创build一个jar文件,你应该使用Eclipse的Export选项。 在导出对话框中,selectjava和子选项JAR。 显示一个向导,你需要做一些select。 您需要指定jar文件的存储位置。

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

您可以使用自定义方法dynamic地到达R文件,示例链接如下。

在可分发的Jar文件中打包Android资源文件

 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; } 

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