创建一个Android Library

作者: bingyuderizi | 来源:发表于2016-06-02 09:47 被阅读5160次

    原文地址: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模块.

    相关文章

      网友评论

        本文标题:创建一个Android Library

        本文链接:https://www.haomeiwen.com/subject/nlzsqttx.html