Android Studio中Android库和Java库的区别
Posted
技术标签:
【中文标题】Android Studio中Android库和Java库的区别【英文标题】:Difference between Android library and Java library in Android Studio 【发布时间】:2015-03-11 14:32:46 【问题描述】:在 android Studio 中创建新模块时,我们可以在 Android 库和 Java 库之间进行选择。通过对两者的修补,我的理解是 Android Library
可以访问 Android 资源,而 Java Library
只能访问 Java 资源。
因此,在 Android Studio 中创建 Java 库就像在 Eclipse 等普通 Java IDE 中创建新库一样。 (它甚至似乎让我们可以访问 Android 不支持的 RMI。)
这是否正确,是否还有其他差异需要注意?
【问题讨论】:
【参考方案1】:Android 库过去是“android 库项目”。
它只是 android 模块,可以包含到您的项目中。如您所说,它具有 android 资源,并且您自己的项目也可以访问包含的库资源(如样式或布局)。
此库类型必须用于创建自定义视图或活动或其他 android 元素
【讨论】:
【参考方案2】:就像每个项目类型的小描述所说,Android 库只是另一个 Android 应用程序项目,通常称为模块。Java 库是 java 项目的另一个词。module
和project
是复杂性。
看看来自intellij
的关于模块的精彩描述以及它们之间的区别:
基于模块的项目结构
此功能非常适合具有多个内部依赖项的复杂项目,尤其适用于 J2EE 项目。模块是项目的独立逻辑部分,它包含您的工作源、库、对目标 Java SDK 的引用等。它可以作为独立实体进行编译、运行或调试。
一个项目可能由一个或多个模块组成。模块可能相互依赖。模块和库可以在多个项目之间轻松共享。
source
This 也不错。
【讨论】:
【参考方案3】:android 库是 aar,java 库是 jar。从技术上讲,两者都是罐子,但它们的结构组成彼此略有不同。例如 aar 看起来像这样:
res <android resources dir>
values
AndroidManifest.xml
classes.jar
<classpath structure>
<.class's>
R.txt
java 库如下所示:
<classpath structure>
<.class's>
META-INF
如前所述,java 库不能包含任何 android 资源,例如布局、值、颜色、样式。一个 android 库可以包含 android 资源,但它不能包含任何原始的 android 资产(即您放在 assets 文件夹中的任何东西) 资源名称不会相互冲突也是开发人员的责任。 android 开发人员的建议是为每个 android 库中的资源名称分配唯一的前缀。 Java 库不能引用任何 Android SDK 类,例如 android.content.Context 等。)您可以采取一些技巧来绕过最后一个限制,但这涉及将 aar 转换为 jar。只要您不使用 aar 中的任何 android 资源,就可以做到这一点。人们可能想要进行这种转换的原因是您可以拥有“compileOnly”依赖项。目前,你不能对 aar 库有 compileOnly 依赖,但你可以对 jar 库有依赖。需要引用包含 android SDK 类的接口的 OSGI 应用程序开发人员使用此技术。 android 开发人员团队有一个未解决的请求,要求修改此 compileOnly 限制。
【讨论】:
以上是关于Android Studio中Android库和Java库的区别的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio、NavDrawer 和支持库问题