如何设置一个可以生成可用于android的jar库文件的项目? 我想在所有项目中创建一个自定义库。
其他几个问题:
答案 0 :(得分:29)
您需要对项目设置进行特殊设置,以创建可在Android应用中运行的jar文件。只需在Eclipse中创建一个普通的Java项目。
根本不需要针对Android进行编译。您可以包含任何jar文件,只要它不引用Android中未包含的类。只需将您的jar文件包含在Eclipse中Android项目的构建路径中,它将自动包含在您的APK文件中。
不确定,但我认为jar文件中的所有类都包含在APK中。
我不认为只是在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项,所以你也应该能够创建一个。我只是不确定你是如何做到的,以及你如何在另一个项目中引用它们。