创建一个Android Library

原文地址:https://developer.android.com/studio/projects/android-library.html

一个Android Library 与一个Android App模块的结构相同.它可以包含创建一个App所需要的一切,包括源代码,资源文件,和一个Android manifest.然而不同的是,一个app编译成一个运行在设备上的APK, 一个Android Library编译成一个Android Archive (AAR),作为Android App模块依赖.

一个Library模块在下面情况下有用:

1. 当你创建多个APP时,用到一些相同的组件,如activities, sevices或者UI layouts.

2. 当你创建的一个APP存在多个APK版本,例如一个免费的和付费的版本,都需要相同的核心组件.

在这些情况下,简单地移动你想再利用的文件到一个Library模块,然后添加这个library作为App模块的依赖.这篇文章教你怎样做:

创建一个Library模块

1. 点击File > New > New Module.

2.在Create New Module窗口中,点击Android Library,然后点击Next.

创建一个Java Library, 它构建了一个传统的JAR文件. 一个JAR文件对许多工程有用,特别当你想在不同的平台分享代码,它不让你刽子手Android资源和manifest文件,这个对Android工程中的代码复用非常有用.所以这个引导注重创建Android Libraries.

3. 给你的Library命名并选择一个最小的SDK版本, 然后点击Finish.

一旦Gradle 工程同步完成, library模块将出现在左边的工程面板中.如果你不想看到新的模块文件,确保它在显示Android view.

将App模块转换成Library模块

1.打开一个存在的App模块的build.gradle文件,在文件的上面,你可以看到:

apply plugin:'com.android.application'

2. 改变如下:

apply plugin:'com.android.library'

3. 点击Sync Project with Gradle Files.

这样就好了.这个模块的整个结构保持相同, 但它现在作为一个Android library, 编译将会创建一个AAR文件而不是一个APK文件.

添加你的Library作为一个依赖

将你的Android Library代码用到另外一个App模块,过程如下:

1. 将Library添加到工程有2种方法(如果Library模块在同一个工程中,你可以跳过这步)

方法1: 添加编译的AAR(或者JAR)文件:

点击File > New Module.

点击Import .JAR/.AAR Package, 然后点击Next.

写入AAR或者JAR文件的位置,然后点击Finish.

方法2: 工程中导入Library模块

点击File > New > Import Module.

写入Library模块文件的位置,然后点击Finish.

Library模块已经挎入到你的工程, 你能够编辑Library的代码.如果你相保持Library代码一个版本,那么这个可能不是你想要的,你应该导入编译好的AAR文件.

2. 确保你的Library列在settings.gradle文件的上面.如这儿如示,一个Library名字为 "my-library-module":

include':app',':my-library-module'

3. 打开app模块的build.gradle文件, 在dependencies中添加:

dependencies{

compile project(":my-library-module")

}

4. 点击Sync Project with Gradle Files.

在上面的这个例子中,Android library模块命名为my-library-module,成为了build.gradle文件所在模块的依赖.

现在可以在你的App模块中获得任何Android library的代码和资源, 在编译的时候AAR文件绑定到你的APK.

然而,如果你想单独地分享你的AAR文件,你能在project-name/module-name/build/outputs/aar/找到它, 你可以重新产生它通过点击Build > Make Project.

开发考虑

当你开发你的library模块和依赖的App,你应该意识到下面这些行为和限制:

一旦你将library模块引用到你的Android app模块,你能设置它们相关的优先权.在创建的时候,library同时与App的内容合并,开始从最低优先级到最高.

1. 资源合并冲突

构建工具从一个library模块和这些依赖的app模块中合并资源.如果给定的资源ID在这两个模块中定义, app的资源将会被利用.

如果冲突发生在多个AAR library中,则使用从依赖列表中先列出的library的资源.

为了避免相同ID资源的冲突,考虑用一个前缀或者其它一致的命名方案,该方案是唯一的模块(或者在所有项目中是唯一的)

2.一个library模块可以包含一个JAR library

你可以开发一个library模块它自身包含一个JAR library; 然而,你需要手动编辑相关的应用模块的构建路径,并添加到JAR文件的路径。

3. 一个library模块可以依赖一个外部的JAR library

你可以开发一个library模块依赖一个外部library.(例如, Maps外部library).这种情况下,依赖应用程序必须建立针对外部library的目标(例如,Google APIs Add-On). library模块和依赖的app必须在它们的manifest文件中声明外部library, 在<uses-library>元素中.

4. library模块不能包括原始的assets

这些工具在library模块中不支持原始的asset文件的用法(保存在assets/文件夹中).任何asset资源都被一个app存储在自己模块的assets/文件夹中.

5. app模块的最小sdk版本必须等于或者大于library中定义的版本.

一个library作为依赖的app模块的一部分被编译, 所以library模块所用的APIs必须和app模块所支持的平台版本相匹配.

6.每个library模块创建它自己的R类

当你创建一个依赖的app模块, library模块被编译成一个AAR文件然后添加到app模块.因此,每个library有它自己的R类,通过library的包名来命名.从主模块生成R类和需要包括主模块包和libraries包的所有包所创建的library模块.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容