(转)Library Module详解
来源:互联网 发布:淘宝一元抢手机 编辑:程序博客网 时间:2024/06/08 06:33
原地址:http://blog.csdn.net/p892848153/article/details/52124413
Create an Android Library
原文:https://developer.android.com/studio/projects/android-library.html
Android library的结构跟Android app module一样。它里面可以包含:源码,资源文件和Android manifest文件。不同的是Android Library会编译成Android Archive(AAR),也就是aar文件,而Android app会编译成APK文件。
以下情况Android Library很有用:
- 你要开发多个app, 这些app需要共用一些组件,比如Actiivty, Services或者UI.
- 你开发的app有多个版本,比如免费版和付费版,这两个版本之间的核心组件是一样。
这种情况下,你只要把需要共用的文件移到一个library module中,然后app module依赖这个library module就可以了。
Create a Library Module
创建一个Library module的流程如下:
- 点击 File > New > New Module
- 在Create New Module窗口,点击Android Library, 然后点击Next.
这里也有创建Java Library的选项,Java Library会编译成一个JAR文件。当你想在不同的平台之间共享代码的时候,Java Library非常有用。Java Library不能共享Android资源文件和manifest文件,只能共享代码。 - 给Library输入名字,选择一个最小支持的SDK版本,然后点击Finish.
Convert an app module to a library module
如果你有一个app module, 里面都是你想在不同module之间共享的代码,你可以将其转换成一个library module, 步骤如下:
打开app module的build.gradle文件,在顶部,你可以看到:
- 1
- 1
更改plugin的值为:
- 1
- 1
删除掉 applicationId这个配置,library module是没有applicationId,只有在manifest文件中有个package值表明包目录.
点击 Sync Project with Gradle Files.
注意library的manifest文件中,不能有android:icon,这会和引用它的app module中的manifest文件中的android:icon冲突。如果一定要在library的manifest中定义android:icon,那么就必须在app module的manifest文件的标签中添加 tools:replace=”android:icon”,这样app moduel定义的icon将会覆盖library定义的icon,从而解决冲突。
理论上,我们不应该在library中声明的activity中添加:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
但是,就算我们添加了,也没事,功能一切正常,只不过在launcher上面会有两个icon。一个启动app module,一个启动library module。
Add Your Library as a Dependency
app module想要引用library module,流程如下:
有两种方法在项目增加library(如果app module和library module在同一个project中,可以忽略下面的步骤) :
- 增加编译生成的AAR或者JAR文件:
- 点击 File > New Module
- 点击Import .JAR/.AAR Package然后点击Next.
- 输入AAR或者JAR文件的路径,然后点击Finish.
导入library module到你的project:
- 点击File > New > Import Module.
- 输入library module文件夹的路径,然后点击Finish.
library module会被拷贝一份到你的project,你可以修改library的代码。如果你想让library的代码只有一个版本,那么这个方法就不适合你,你应该导入library module生成的AAR文件来引用library module。
- 增加编译生成的AAR或者JAR文件:
确保library module在settings.gradle文件的顶部有声明,比如有一个library名字是”my-library-module”:
- 1
- 1
打开app module的build.gradle文件,在dependencies块中增加下面的行:
- 1
- 2
- 3
- 1
- 2
- 3
点击Sync Project with Gradle Files.
app module现在可以使用library中的任何代码和资源,在编译的时候,有一个AAR文件会被打包进APK中。
你可以在project-name/module-name/build/outputs/aar/文件下找到AAR文件,可以通过点击Build > Make Project来重新生成AAR文件。
Development Considerarions
关于引用library module的app module和被引用的library module,有几点需要注意.
如果你的app module引用了多个library module, 你可以给这些library module排优先级。在编译的时候,这些library会按从优先级低到高来和app一次性合并。
资源合并冲突
编译工具会把library module的资源和app module的资源合并起来。如果library module和app module中有相同的资源id,则app module中的会保留。如果是多个AAR library之间发生了这样的冲突,依赖library module的列表(dependencies块关于library module的声明)中最上面的library module的资源会被保留.
为了避免资源冲突,可以考虑使用前缀或者其他的相对各个module都独一无二的命名体系。
library module可以引用JAR library
library module可以引用JAR library。不过,你需要手动的编辑引用library module的app module的build path,在其中增加一个指向JAR文件的路径。
library module可以依赖一个external JAR library
library module可以引用external library.(比如, Maps external library).依赖者app module也必须构建引用相同的external library.注意:library module和依赖者app module都必须在它们的manifest文件中使用uses- library来声明引用external library.
library module不能包含assets资源
编译工具不支持在library modules中使用asset资源(存放在assets/ 文件下)。所有使用到的asset资源都必须存放在app module的assets/ 文件夹下。
app module的minSdkVersion必须大于等于library module的
library module最后被编译成app module的一部分,所以app module使用的SDK版本必须包含library module使用的SDK版本中的所有API。
每个library module都会创建它们自己的R类
当你编译app module时,library module都会被编译进一个AAR文件,然后将这个文件加入app module.因此,每个library都有它们自己的R类,按各自的包名命名。
- (转)Library Module详解
- Library Module详解
- Gradle library module
- $MODULE详解
- Package Module Library 的定义
- android studio 添加Library module
- AndroidStudio将module变为library
- AndroidStudio将module变为library
- AndroidStudio将module变为library
- AndroidStudio将module变为library
- 转 Library cache内部机制详解
- 转 Library cache内部机制详解
- module不仅可以依赖library,还能依赖module
- nginx安转时报错处理:the HTTP rewrite module requires the PCRE library
- err:module:import_dll Library MSVCP90.dll
- Python中module、library、package辨析
- Android Library Module:可拓展TextView
- Gradle Library Module的复用机制
- struts2的contextmap和valueStack
- Linux中常用命令
- 20170519@方法的可变参数
- 关于移动应用自动化测试的那些事
- SVN下载安装使用
- (转)Library Module详解
- python通过域名获取IP简单的GUI界面
- HDU
- 系统移植:1. 交叉工具链的安装
- 预制件(prefab)资源的应用
- iOS scrollView 左右滑动 内容错位
- Ubuntu 16.04 安装Matlab R2015b
- ES6 Promise
- c语言中有关字符串函数strcpy,strcmp,strcat,strstr的模拟实现