澳门新葡萄京官网注册 6

澳门新葡萄京官网注册创建 Android Library 所需要知道的一切

Android 库(Library)在结构上与 Android
应用模块雷同。应用模块所能够分包的东西,在库中都允许存在,包涵代码文件、财富文件和manifest文件等。

文摘
1、 成立库模块
2、以正视的方法使用库
3、开采注意事项
4、aar文件详细明白

此作品复制于:

行使模块编写翻译后生成的是二个apk文件,能够间接在装置上运行,但是,库模块编写翻译后生成的是一个Android
Archive文件,简单的称呼AAR。AA讴歌RDX文件无法像apk文件一律直接在装置上运行,我们平日用它看作Android
app的依据。


Android 库在布局上与 Android
应用模块相像。它可以提供创设利用所需的成套剧情,包罗源代码、能源文件和
Android 清单。不过,Android 库将编写翻译到您能够用作 Android
应用模块重视项的 Android 归档 (AAOdyssey卡塔尔国 文件,而不是在设施上运行的 APK。与
JALacrosse 文件不相同,AA库罗德 文件能够包括 Android 能源和二个清单文件,这样,除了
Java 类与措施外,您还足以捆绑构造和可绘制对象等共享资源。

平日JA库罗德文件只好分包代码文件和项目清单文件,而APRADOHighlander文件不但能够分包代码文件,还足以包含Android的财富文件和manifest文件。这样,大家就可以把能源文件像构造文件、图片文件等和Java代码文件一齐共享出来。能够说AKuga中华V文件是当真专项于Android的“JA奥迪Q5”包。

葡萄牙语文献

库模块在偏下意况下拾贰分实用:

库模块在以下境况下特别管用:

Android 库在布局上与 Android
应用模块相符。它能够提供创设利用所需的全部剧情,包蕴源代码、财富文件和
Android 清单。但是,Android 库将编译到您能够用作 Android
应用模块注重项的 Android 归档 (AAHighlanderState of Qatar 文件,并不是在配备上运维的 APK。与
JARAV4 文件分歧,AA普拉多 文件能够分包 Android 能源和三个事项清单文件,这样,除了
Java 类与方法外,您还足以捆绑架商谈可绘制对象等分享财富。

营造利用一些相通组件(举例 Activity、服务或 UI 构造)的多个应用。

  • 创建多个app,这么些app必要接纳多少个一律的组件,像activity、service或UI
    结构等。
  • 创建三个app,而以此app可能需求依附需求编写翻译成三个APK版本,比方免费版和付费版,而八个本子都急需动用到平等的组件。

库模块在偏下景况下十三分低价:

构建存在八个 APK
变体(举例无偿版本和付费版本)的行使还要要求在三种版本中采纳雷同的主导零件。

在其它一种情景下,你只须求就要接收的文书放到库模块中,然后以注重项的情势为各种应用模块增加库即可。

  • 1、创设利用一些相符组件(举例 Activity、服务或 UI 布局)的四个应用。
  • 2、创设存在七个 APK
    变体(比如无需付费版本和付费版本)的使用还要需求在三种版本中应用相似的主干零件。

在别的一种处境下,只需求将您愿意重用的公文移动到库模块中,然后以重视项的样式为每种应用模块增添库。本页面将评释什么施行那五个操作。

始建库模块

在您的工程中,成立一个新的库模块,能够据守如下的步调:

  1. 点击 File > New > New Module.
  2. 在Create New Module的窗口中,选拔Android
    Library,并点击下一步(Next)。
    在该窗口中还应该有一个抉择用于创立叁个Java Library,Java
    Library便是我们所知的历史观的JAOdyssey文件。JALX570文件在广大工程中极度有用,特别当你想享受代码给其它工程的时候。不过JAENVISION文件并不容许包涵Android财富文件和manifest文件,而财富文件在Android项目中对代码重用具备比十分的大的扶持。所以本篇重要对Android库作介绍。
  3. 为您的库命名并精选最低SDK版本号,然后点击Finish,实现成立。

借使Gradle同步到位后,库模块就能够冒出左侧的工程面板中。

在任何一种情形下,只供给将您愿意重用的文本移动到库模块中,然后以重视项的花样为各个应用模块加多库。本页面将注解什么进行那四个操作。

始建库模块

应用模块转成库模块

假诺你有一个曾经存在的运用模块,并想重用它的全部代码,你可以把它转成二个库模块:

1.开垦归属该利用模块下的build.gradle文件,在最顶端,你能够瞥见如下的显示:

java apply plugin: 'com.android.application'

2.把利用的插件改成库的插件:

java apply plugin: 'com.android.library'

3.点击Sync Project with Gradle Files.

拍卖完上边这几个,整个模块的构造不会被改造,可是该模块已经济体改成了库模块,编写翻译后生成的是AAGL450文件而不再是APK文件了。

一、创立库模块

要在您的品类中成立二个新的库模块,请按以下步骤操作:

  • 1、点击 File > New > New Module

  • 2、在产出的 Create New Module 窗口中,依次点击 Android
    Library
    Next

    还留存一个用来创设 Java 库的选项,能够创设守旧的 JA大切诺基 文件。即便JALacrosse文件在比比较多系列中都特别实用(非常在你希望与任何平台分享代码时),但这种文件不准你富含Android 能源或清单文件,而后人对于 Android
    项目中的代码重用非常实用。因而,本指南将侧重论述创立 Android 库。

  • 3、为您的库命名,并为库中代码接收几个低于的 SDK 版本,然后点击
    Finish

在 Gradle 项目联合到位后,库模块将显得侧边的 Project
面板中。要是您未见到新模块文件夹,请保管将视图切换为 Android
视图。

要在您的品类中开创叁个新的库模块,请按以下步骤操作:

加多库作为利用的注重性

为了在动用模块中使用库模块,你必要作如下的管理:

1.增添库到工程中有二种方式(假使您是在相似种类中开创的库模块,则该模块已经存在,您能够跳过此步骤)

  • 加上编写翻译后的A冠道传祺(或JAKoleos)文件:
    1.点击 File > New Module.
    2.在Create New Module的窗口中,点击 Import .JARAV4/.AA奥迪Q7 Package
    然后点击 Next.
    3.输入A途睿欧卡宴或JAENVISION文件所在的不二等秘书诀,并点击Finish。创设后如下所示:
    澳门新葡萄京官网注册 1
  • 导入外界库模块到工程中:
    1.点击 File > New > Import Module.
    2.输入Library模块所在的门路,并点击Finish。创立后如下所示:
    澳门新葡萄京官网注册 2

那三种引进库的秘诀有所区别。纵然直白引进的是库模块,你可以对库的代码实行编辑。然则一旦导入的是AARubicon文件,那么则不能开展编辑,就疑似JA库罗德文件相符。

2.当库模块或AA凯雷德文件引进到工程后,请确认保障库被列在settings.gradle文件中,仿佛下所示,此中mylibrary是库的称号:

include ':app', ':mylibrary'

3.开荒应用模块下的build.gralde文件,并在dependencies块中增添新的一行,使之成为该应用的信赖,如下一些所示:

dependencies {
    compile project(":mylibrary")
}

4.点击 Sync Project with Gradle Files.

布局完上边包车型大巴消息后,名称叫mylibrary的库模块就能够化为应用的依赖。然后您就足以在应用模块中读取任何归于库模块的代码和财富文件。

1.1、将选取模块转变为库模块

借使您现成的应用模块包罗您希望重用的具备代码,则足以依照以下步骤将其转移为库模块:

  • 1、展开现成应用模块的 build.gradle 文件。您应在顶上部分看见以下内容:

apply plugin: 'com.android.application'
  • 2、依据下面所示校订插件分配:

apply plugin: 'com.android.library'
  • 3、点击 Sync Project with Gradle Files。

就那样轻便。模块的满贯布局依旧一直以来,但是未来它将作为 Android
库运行,创设也将开创二个 AA奥迪Q3 文件,并非 APK。

点击 File > New > New Module

另一种接纳本地aar文件的法子

其实大家还有一种引进本地aar文件的秘籍,首先在工程的下先构建一个aar目录,特意用来贮存aar文件,然后在选取的build.gradle增添正如配置:

repositories {
    flatDir {
        dirs '../aar'   // aar目录
    }
}

然后将aar文件拷贝到工程/aar目录下,在选择模块的dependencies中出席aar援用:

compile(name: 'mylibrary-debug', ext: 'aar')

通过下面的安排,那样aar就被引进过来了。这种艺术与地方介绍的引进模式有个别区别,上边作法是把引进的aar文件封装成三个独自的模块,然后以compile
project的情势引进。而前天的这种措施有一点像jar包的引进情势。

注意:
根据下边包车型地铁尺度,假使把flatDir配置在project的gradle文件中allprojects.repositories块上边,开掘app项目无法辨别到aar文件。通过规律意识,不管aar文件放在何地,只要在app的gradle中配置flatDir都能够被辨认。可是一旦flatDir配置在project的gradle中,只可以把aar文件放到app的模块下工夫被辨认。

二、以信任项格局丰裕您的库

要在另二个接受模块中选择你的 Android 库的代码,请按以下步骤操作:

  • 1、通过三种方法之一将库增多到你的系列(假诺您是在相似档案的次序中开创的库模块,则该模块已经存在,您能够跳过此步骤):

    • 1.1、增多已编写翻译的 AAWrangler(或 JA奥迪Q3)文件:
      • 1.1.1、点击 File > New Module。
      • 1.1.2、依次点击 Import .JA凯雷德/.AAEnclave Package 和 Next。
      • 1.1.3、输入 AA福特Explorer 或 JARubicon 文件的职位,然后点击 Finish。
    • 1.2、将库模块导入到您的花色中:
      • 1.2.1、点击 File > New > Import Module。
      • 1.2.2、输入库模块目录的岗位,然后点击 Finish。
        库模块将复制到您的项目中,因而你可以纵然编写制定库代码。假设你希望敬性格很顽强在艰辛辛劳或巨大压力面前不屈叁个本子的库代码,则此办法大概不是你想要的,您应依照上文所述导入编写翻译的
        AAPRADO 文件。
  • 2、确定保障库列在您 settings.gradle
    文件的顶上部分,如下边名叫“my-library-module”的库所示:

include ':app', ':my-library-module'
  • 3、打开应用模块的 build.gradle 文件,并向 dependencies
    块中增多一行新代码,如下边包车型大巴有些所示:

dependencies {
    compile project(":my-library-module")
}
  • 4、点击 Sync Project with Gradle Files。

在地点的现身说法中,名叫 my-library- module 的 Android 库模块成为
build.gradle 文件所在模块的营造信任项。

你的利用模块今后能够访谈 Android 库中的任何代码和财富,库 AA福睿斯文件在创设时已包扎到你的 APK 中。

可是,假如期待单身分享 AAPRADO 文件,则足以在
项目名称/模块名称/build/outputs/aar/ 中找到它,也可以因而点击 Build >
Make Project 的主意再一次生成此文件。

在产出的 Create New Module 窗口中,依次点击 Android
Library
 和 Next。 

生成AAR文件

咱俩能够通过点击Build > Make
Project生成aar文件,aar文件会在project-name/module-name/build/outputs/aar/
下转移。通常景观下会有八个aar文件,三个debug版本,七个release版本。

当大家得到后aar文件后,就足以把它拆穿出去,别的小同伴就能够运用方面的方式引进aar文件到工程中了。

三、选拔要设为公开的财富

库中的全体财富在暗中同意情状下均处在公开情形。要将装有能源隐式设为私有,您必需至上校一个特定的性子定义为公开。财富包涵你项目的res/
目录中的全部文件,比方图像。要堵住你的库客户访问仅供内部采纳的能源,您应通过注脚一(Wissu卡塔尔国个或两个精通能源的秘技来利用这种自动私有标志机制。

要删减有个别公开财富,请将四个 表明增加到你的库的 public.xml
文件中。要是您以前未曾增多公开能源,则必要在您的库的 res/values/
目录中创制 public.xml 文件。

上面包车型客车演示代码能够创制四个称呼分别为 mylib_app_name 和
mylib_public_string 的领会字符串能源:

<resources>
    <public name="mylib_app_name" type="string"/>
    <public name="mylib_public_string" type="string"/>
</resources>

要是指望别的财富保证对采取你的库的开采者可以预知,您应该将其设为公开。举个例子,即使
v7 appcompat
库中的大大多财富都是个人能源,不过为了帮忙
Material
Design,调节工具栏小零器件的习性应当公开。

将质量隐式设为私有不仅可以够阻挡你的库顾客从里面库能源取得代码自动完结建议,还让您能够在不中断您的库顾客端的境况下重命名或移除私有财富。私有财富不在代码自动实现和
Theme
Editor
的机能范围内,何况只要你尝试引用私有能源,Lint
将显示警报。

还设有一个用以创建 Java 库的选项,可以创设古板的 JALacrosse 文件。即便 JAENVISION文件在大部类型中都万分实用(越发在你希望与别的平台分享代码时),但这种文件不容许你饱含Android 财富或项目清单文件,而前面一个对于 Android
项目中的代码重用极度管用。因而,本指南将侧重论述创造 Android 库。

AA昂科Lavin件解刨

AALacrosse 文件的公文增添名字为.aar,该文件自身正是多个zip文件,应当要包蕴以下内容:

  • /AndroidManifest.xml
  • /classes.jar
  • /res/
  • /Odyssey.txt (由Sportage.java调换而来卡塔尔国

别的,AATucson文件也许满含以下可选条约中的一个或多少个:

  • /assets/
  • /libs/name.jar
  • /jni/abi_name/name.so(其中 abi_name 是 Android 支持的 ABI 之一)
  • /proguard.txt
  • /lint.jar

四、开采注意事项

在支付您的库模块和相关应用时,请小心以下行为和范围。

将库模块援引增加至您的 Android
应用模块后,您能够设置它们的周旋优先级。营造时,库会按照一回七个的秘诀与使用合併,并根据从低到高的前期级依次。

  • 1、财富集结冲突
    创设工具会将库模块中的资源与连锁应用模块的能源统一。如若在三个模块中均定义了给定资源ID,将动用应用中的能源。
    一旦多少个 AATiggo 库之间发生冲突,将利用正视项列表首先列出(坐落于dependencies
    块顶端)的库中的财富。
    为了幸免常用财富 ID
    的能源冲突,请使用在模块(或在全数项目模块)中享有独一性的前缀或任何同等的命名方案。

  • 2、库模块能够富含 JA奥迪Q7 库
    您能够付出多个自己包罗 JA昂Cora库的库模块;然则,您必要手动编辑相关应用模块的营造路线,并丰硕 JATiguan文件的门路。

  • 3、库模块能够信赖外界 JACR-V 库
    您能够支付几个借助于表面库(比如 Maps
    外部库)的库模块。在此种意况下,相关应用必需针对包蕴外部库(比如Google API
    插件)的靶子营造。其余也要注意,库模块和血脉相似应用都不得不在其项目清单文件的
    <uses- library>
    成分中声称外界库。

  • 4、库模块不得含有原始财富
    工具不协理在库模块中运用原有能源文件(保存在 assets/
    目录中)。应用使用的别样原始财富都一定要存款和储蓄在利用模块自己的 assets/
    目录中。

  • 5、运用模块的 minSdkVersion
    必需大于或等于库定义的本子

    库用作相关应用模块的一部分编写翻译,因而,库模块中运用的 API
    必得与应用模块扶助的平台版本宽容。

  • 6、种种库模块都会创建和煦的 福睿斯 类
    在您创设相关应用模块时,库模块将先编写翻译到 AAR文件中,然后再增多到应用模块中。由此,每个库都有其本身的 Evoque
    类,并依照库的软件包名称命名。从主模块和库模块生成的 哈弗
    类会在所需的全数软件包(富含主模块的软件包和库的软件包)中开创。

  • 7、库模块大概带有本人的 ProGuard 配置文件
    通过将
    ProGuard
    配置文件增加到包涵其 ProGuard
    指令的库,您能够在团结的库上启用代码压缩。创设筑工程具会为库模块将此文件嵌入到变化的
    AA揽胜极光 文件中。在您将库添加到应用模块时,库的 ProGuard
    文件将增大至选拔模块的 ProGuard 配置文件 (proguard.txt卡塔尔(قطر‎。

    由此将 ProGuard
    文件嵌入到你的库模块中,您能够保证注重于此库的运用模块不必手动更新其
    ProGuard 文件就可以使用库。当 ProGuard 在 Android
    应用模块上运维时,它会同一时直接收来源采取模块和库的吩咐,因此你不应有只在库上运营ProGuard。

    要内定您的库的计划文件名称,请将其增多到 consumerProguardFiles
    方法中,此方法坐落于您的库的 build.gradle 文件的 defaultConfig
    块内。比如,以下部分会将 lib-proguard-rules.txt 设置为库的 ProGuard
    配置文件:

android {
    defaultConfig {
        consumerProguardFiles 'lib-proguard-rules.txt'
    }
    ...
}

暗中认可情况下,应用模块会动用库的昭示营造,纵然在采纳应用模块的调节和测量检验营造类型时亦是那样。要使用库中分裂的创设类型,您必需将依靠项增添到利用的
build.gradle 文件的 dependencies 块中,并在库的 build.gradle 文件元帅publishNonDefault 设置为 true。比方,您使用的 build.gradle
文件中的以下代码段会使利用在应用模块于调试格局下营造时利用库的调弄收拾塑造类型,甚至在接受模块于发表格局下创设时采取库的布告营造类型:

dependencies {
    debugCompile project(path: ':library', configuration: 'debug')
    releaseCompile project(path: ':library', configuration: 'release')
}

您还非得在友好库的 build.gradle 文件的 android
块内增多以下代码行,以便将此库的非发表配置浮现给接受它的门类:

android {
    ...
    publishNonDefault true
}

只是请在意,设置 publishNonDefault
会增加营造时间。
为了确定保证您的库的 ProGuard
法规不会将意外的压缩副功效施加到使用模块,请仅包罗适当法规,停用不适用于此库的
ProGuard
功能。尝试帮助开采者的规规矩矩大概会与行使模块或它的其余库中的现存代码矛盾,因而不应富含那一个准绳。比如,您的库的
ProGuard
文件能够点名在使用模块的收缩时期须要保留的代码。

:Jack
工具链仅扶助ProGuard 的局地压缩和模糊选项。

为你的库命名,并为库中代码采取一个最低的 SDK 版本,然后点击 Finish

库的私有能源

暗许情状下库中的全体财富都以当面景况,也便是说允许利用模块直接访谈。不过一旦你想让库中的财富仅供内部使用,而不想揭露给外界,您应通过声美素佳儿(Friso卡塔尔个或多少个公开能源的格局来利用这种自动私有标记机制。财富包涵你项指标res/ 目录中的全部文件,譬喻图像、布局等。

首先,在库的res/values/下新建七个public.xml文件(如若荒诞不经的话),然后在public.xml中定义公开的财富名,上面包车型客车演示代码能够制造三个名称分别为
lib_main_layout和 mylib_public_string的当众结构能源和字符串能源:

<resources>
    <public name="lib_main_layout" type="layout"/>
    <public name="mylib_public_string" type="string"/>
</resources>

上面包车型大巴定义的多个能源表示公开景况,可以被外表注重直接待上访谈。而还未有被定义在内部的财富都为隐式私有状态,外界重视不能够合法访问。当中name为财富名,type是能源类型有:string、layout、drawable、dimen等。

留意,假诺想让库中的全数能源都为个人的,你必定要在public.xml中定义最少贰性情能。

在外表信任使用库私有财富的时候,你是望眼欲穿通过途观点的办法进行提醒的,那也为了不揭示个人财富的一种手腕。如若您强迫行使了该财富,编写翻译器会爆发警报:

澳门新葡萄京官网注册 3

从地点能够见见,lib_main_layout和mylib_public_string财富都得以平昔利用的,而并未有定义的都为私家财富,外界重视使用的时候,编写翻译器会爆发警示新闻。

可是此地有好几亟待注意,使用民用财富并不会生出任何不当,应用模块能够符合规律的行使那一个私家能源,之所以提供这种机制,是为着告诉你,库模块并不想把那个财富暴光给您,或然这一个能源有独出新裁用项之类的。假若您真想采纳民用财富,何况不想编译器发出如上的警示,你能够把个体财富拷到本身的运用模块下。

隐情的赋予财富私有属性不仅能肯定水平上防御外界使用,何况还允许你重命名或删除私有能源时,不会默化潜移到利用到该库的使用模块。私有能源不在代码自动完结和
Theme Editor 的效果范围内,并且只要你尝试援引私有财富,Lint 将展现警报。

五、AA瑞鹰 文件详整

AATiguan 文件的文本扩大名称为 .aar,Maven 作件类型也相应是
aar。文件本人是三个包蕴以下强逼性条目的 zip 文件:

  • /AndroidManifest.xml
  • /classes.jar
  • /res/
  • /R.txt
    别的,AAMurano 文件可能带有以下可选条约中的二个或四个:
  • /assets/
  • /libs/名称.jar
  • /jni/abi 名称/名称.so(其中 abi 名称 是 Android 支持的
    ABI
    之一)
  • /proguard.txt
  • /lint.jar

在 Gradle
项目一同到位后,库模块将体现左边的 Project 面板中。假使您未看见新模块文件夹,请保管将视图切换为 Android
视图。

库开垦注意事项

将库模块援用增添至您的Android
应用模块后,库模块会依附优先级的逐个与运用模块进行联合。

将利用模块转换为库模块

能源统一冲突

  1. 创设筑工程具会将库模块中的能源与有关应用模块的能源集结。假使在三个模块中均定义了一致的财富ID,那就暗许使用应用模块的能源。
  2. 假诺五个 AAEnclave 库之间暴发冲突,将应用依赖项列表首先列出(坐落于dependencies 块最上部)的库中的财富。

为了制止常用能源 ID
的财富冲突,请使用在模块(或在享有品类模块)中有所独一性的前缀或其余同等的命名方案。

大家举例来证实观点1,观点2感兴趣的同班能够团结评释。首先在库模块mylibraryone中定义了之类的string能源:

<resources>
    <string name="app_name">My Library</string>
    <string name="test_one">My name is Library</string>
    <string name="my_library">Library</string>
</resources>

透过该库的路虎极光文件,那多个财富文件的id值为:app_name=0x7f020000、my_library=0x7f020001、test_one=0x7f020002

下一场在动用模块mytesttwo中那也定义了之类的string财富:

<resources>
    <string name="app_name">MyTestTwo</string>
    <string name="test_one">My name is App</string>
</resources>

请小心,个中能源名app_name 和test_one 和库中定义的string财富名相近。

咱俩把mylibraryone库该作为mytesttwo应用的信赖,并再度编写翻译,大家能够窥见在应用模块生成了两个牧马人文件:

澳门新葡萄京官网注册 4

里面第多个是库合并过来后的ENVISION文件,而第3个是行使自个儿的凯雷德文件。

我们比较下,八个安德拉文件的内容:
mylibraryone:

public final class R {
    public static final class string {
        public static final int app_name = 0x7f040000;
        public static final int my_library = 0x7f040001;
        public static final int test_one = 0x7f040002;
    }
}

mytesttwo:

public final class R {
     .....
    public static final class mipmap {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class string {
        public static final int app_name=0x7f040000;
        public static final int my_library=0x7f040001;
        public static final int test_one=0x7f040002;
    }
}

mylibraryone库的Tiguan文件只含有本身的能源,而且具备的能源值都产生了改观。何况库中的能源id也都合并到使用的R文件中了。从上边包车型大巴八个文本可以看出三个性子:

用库的奥迪Q5文件和动用的福睿斯文件都能访谈到库的财富,不过爱莫能助用库的Lacrosse文件访问应用财富。

既是以后库的财富和接受的财富今后举行了归总,那当大家应用test_one字符串的时候用的是哪三个吗?大家在使用模块下直接出口id值来瞧瞧:

Log.d("cryc","App:"+Integer.toHexString(com.example.mytesttwo.R.string.test_one)+"");
Log.d("cryc","App:"+getString(com.example.mytesttwo.R.string.test_one)+"");
Log.d("cryc","Library:"+Integer.toHexString(com.example.mylibraryone.R.string.test_one)+"");
Log.d("cryc","Library:"+getString(com.example.mylibraryone.R.string.test_one));
Log.d("cryc","Library:"+Integer.toHexString(com.example.mylibraryone.R.string.my_library));
Log.d("cryc","Library:"+getString(com.example.mylibraryone.R.string.my_library));

出口结果:

App:7f040002
App:My name is App
Library:7f040002
Library:My name is App
Library:7f040001
Library:Library

世家能够看出,若是库和选用的能源名冲突了,不管选择哪个奥迪Q7文件,都那暗中同意使用使用的能源。

我们恐怕还会有问号,若是本人在库中运用test_one财富,那终究是利用库的能源依然利用的能源?答案是运用的财富,因为库被联合到使用后,库的LX570文件财富id值都发生了转移。而大家用宝马X5文件去拜望能源的时候,都是拿变化后的奔驰M级文件去拜见,所以一旦有能源冲突暗中同意都以以应用财富为准。所以这里自个儿也足以得出另一个定论:

当库和应用模块财富冲突的处境下,不管在利用中还是在库中采取该财富,都私下认可以应用财富为主。前提是运用模块有依附该库模块。

于是为了防止常用能源 ID
的能源冲突,请使用在模块(或在具备类型模块)中存有独一性的前缀或别的一律的命名方案。举例库名是PullToRefresh,那么该库下的财富命名能够用ptr作为前缀。

关于R文件:

Odyssey文件(大切诺基.java)是由Android 能源打包工具AAPT(Android Asset Packaging
Tool卡塔尔国)自动生成,包括了res目录下具有资源的Id。每当成立一个新财富,会自行地在Murano文件中增加该财富的id。大家能够在代码中使用该id,执行其它有关该财富的操作。注意,假设大家手动删除Evoque文件,编写翻译器会自动创造。

Lacrosse文件是三个java文件,因为它是被自动创造的,所以Android studio
会把它举行蒙蔽,具体地方在 app/build/generated/source/r/debug

假使您现存的运用模块包蕴您希望重用的全部代码,则足以依照以下步骤将其改造为库模块:

能源冲突和私家能源的标题

当Library模块中留存个人财富,假诺运用模块财富名和民用能源名冲突了,编译器会时有爆发警示:

澳门新葡萄京官网注册 5

当大家在接受中选拔该财富时,也会生出该警报:

澳门新葡萄京官网注册 6

即使如此我们应用该能源时用的是使用模块的财富,不过库已经把test_one标为私有能源,为了标准化,笔者可以运用如下措施:

  1. 在选择模块中改造分歧的财富名,不要与库中的财富名相同。
  2. 假如真的要利用同名能源,使用tools标志为重写状态:

<resources xmlns:tools="http://schemas.android.com/tools">
    <string name="app_name">MyTestTwo</string>
    <string name="test_one" tools:override="true">My name is App</string>
</resources>

此方式并无法收回私此能源是个体能源的情形,只然而撤废了财富文件中的警报而已。

开垦现成应用模块的 build.gradle 文件。您应在顶端观望以下内容: 

asserts归并冲突

当使用信任库时,应用的assert目录会和库的asserts目录举行合并,要是有平等路径文件,则以应用模块的为准。举例,应用模块存在asserts/ha.json文件,库模块下也可能有asserts/ha.json文件,因为五个门路同样,金当归并后apk中只保留应用模块asserts/ha.json。假如库模块的ha.json文件是寄放在assert/json目录下,那么当归身并后,五个json文件都留存,
因为它们路径不平等,二个是asserts/ha.json 另八个是asserts/json/ha.json。

谷歌(Google卡塔尔国官方说:工具不辅助在库模块中动用原本财富文件(保存在 assets/
目录中),可是经过小编的测量试验,在使用模块中能够无约束使用库中的assets能源并无别的难点。

关于asserts目录

Android财富文件大概可以分为二种:

率先种是res目录下贮存的可编译的能源文件:这种能源文件系统会在大切诺基.java里边自动生成该财富文件的ID,所以访谈这种财富文件比较简单,通过Evoque.XXX.ID就可以;

其次种是assets目录下贮存的原生能源文件:
因为系统在编写翻译的时候不会编写翻译assets下的财富文件,所以我们无法通过中华V.XXX.ID的秘籍访谈它们。那作者么能或不能够经过该财富的相对路线去拜谒它们啊?因为apk安装之后会放在/data/app/**.apk目录下,以apk格局存在,asset/res和被绑定在apk里,并不会解压到/data/data/YourApp目录下来,所以我们无法直接获取到assets的相对路线,因为它们根本就不曾。

幸亏Android系统为我们提供了二个AssetManager工具类。查看官方API可以预知,AssetManager提供对应用程序的庐山真面目目能源文件举行访谈;那些类提供了一个低等其余API,它同意你以简要的字节流的款型展开和读取和应用程序绑定在一块儿的原来能源文件。

apply plugin: ‘com.android.application’

应用模块的 minSdkVersion 必得大于或等于库定义的版本

库用作相关应用模块的一片段编译,因而,库模块中选取的 API
必需与应用模块援救的阳台版本包容。

奉公守法上边所示纠正插件分配:

各样库模块都会创建和煦的 索罗德 类

在您营造相关应用模块时,库模块将先编写翻译到 AA奥德赛文件中,然后再加多到应用模块中。因此,每种库都有其和好的 Haval类,并依据库的软件包名称命名。从主模块和库模块生成的 哈弗类会在所需的有着软件包(包罗主模块的软件包和库的软件包)中开创。

apply plugin: ‘com.android.library’

库模块只怕含有自身的 ProGuard 配置文件

由此将 ProGuard 配置文件加多到包罗其 ProGuard
指令的库,您可以在投机的库上启用代码压缩。营造工具会为库模块将此文件嵌入到变化的
AACR-V 文件中。在您将库增添到利用模块时,库的 ProGuard
文件将附加至接收模块的 ProGuard 配置文件 (proguard.txt卡塔尔(قطر‎。

由此将 ProGuard
文件嵌入到您的库模块中,您能够保障信任于此库的应用模块不必手动更新其
ProGuard 文件就能够使用库。当 ProGuard 在 Android
应用模块上运营时,它会同期选择来源接受模块和库的命令,因而你不该只在库上运行ProGuard。

要钦赐您的库的铺排文件名称,请将其增加到 consumerProguardFiles
方法中,此方法坐落于您的库的 build.gradle 文件的 defaultConfig
块内。举个例子,以下一些会将 lib-proguard-rules.txt 设置为库的 ProGuard
配置文件:

android {
    defaultConfig {
        consumerProguardFiles 'lib-proguard-rules.txt'
    }
    ...
}

默许境况下,应用模块会接纳库的公布营造,就算在动用使用模块的调解创设类型时亦是这般。要接收库中差别的创设类型,您必得将依附项增加到使用的
build.gradle 文件的 dependencies 块中,并在库的 build.gradle 文件准将publishNonDefault 设置为 true。比如,您使用的 build.gradle
文件中的以下代码段会使应用在运用模块于调节和测量试验形式下塑造时使用库的调度营造类型,以至在动用模块于透露形式下构建时选用库的揭发构建类型:

dependencies {
    debugCompile project(path: ':library', configuration: 'debug')
    releaseCompile project(path: ':library', configuration: 'release')
}

你还必需在友好库的 build.gradle 文件的 android
块内增添以下代码行,以便将此库的非发布配置呈现给选拔它的等级次序:

android {
    ...
    publishNonDefault true
}

可是请用心,设置 publishNonDefault 会增添营造时间。

为了确认保证您的库的 ProGuard
准则不会将意外的压缩副功效施加到使用模块,请仅包蕴适当法规,停用不适用于此库的
ProGuard
成效。尝试扶植开拓者的家有家规或许会与运用模块或它的别的库中的现存代码冲突,由此不应包括这个准则。比方,您的库的
ProGuard
文件能够点名在利用模块的缩长时期必要保留的代码。

注:Jack
工具链仅帮衬ProGuard 的一部分压缩和模糊选项

点击 Sync Project with Gradle Files

参照文书档案

就那样简单。模块的整个结构如故同样,可是今后它将用作 Android
库运营,营造也将开创二个 AAOdyssey 文件,并不是 APK。

以正视项形式丰富您的库

要在另多少个应用模块中行让你的 Android 库的代码,请按以下步骤操作:

透过二种艺术之一将库增添到您的花色(假诺您是在同一类别中开创的库模块,则该模块已经存在,您能够跳过此步骤): 

增加已编写翻译的 AALX570(或 JAR)文件: 

点击 File > New Module

种种点击 Import .JAR/.AAR Package 和 Next

输入 AARAV4 或 JACRUISER 文件的岗位,然后点击 Finish

将库模块导入到您的类型中: 

点击 File > New > Import Module

输入库模块目录的职责,然后点击 Finish

库模块将复制到您的体系中,由此你能够即使编写制定库代码。借使您愿意体贴三个本子的库代码,则此措施大概不是你想要的,您应依照上文所述导入编译的
AAPRADO 文件。

有限支撑库列在您 settings.gradle 文件的最上部,如上边名称叫“my-library-module”的库所示: 

include ‘:app’, ‘:my-library-module’

开垦应用模块的 build.gradle 文件,并向 dependencies 块中增多一行新代码,如下边包车型地铁一部分所示: 

dependencies {

compile project

(“:my-library-module”)}

点击 Sync Project with Gradle Files

在下边包车型客车上行下效中,名字为 my-library- module 的 Android
库模块成为 build.gradle 文件所在模块的创设信任项。

你的行使模块以后能够访谈 Android 库中的任何代码和能源,库 AAEnclave文件在营造时已包扎到你的 APK 中。

不过,借使期望单身分享 AAGL450文件,则足以在 项目名称/模块名称/build/outputs/aar/ 中找到它,也得以透过点击 Build
> Make Project
 的秘诀重新生成此文件。

分选要设为公开的能源

库中的全部财富在暗许意况下均处于公开意况。要将享有财富隐式设为私有,您必需至元帅五个一定的属性定义为公开。能源包含你项目标 res/ 目录中的全部文件,比如图像。要堵住你的库客户访谈仅供内部接收的能源,您应透过声美赞臣个或八个公开财富的不二秘技来利用这种自发性私有标志机制。

要刨除有个别公开财富,请将多少个 注解加多到您的库的 public.xml 文件中。若是你在此之前从未增加公开财富,则需求在你的库的 res/values/ 目录中开创 public.xml 文件。 

下边包车型大巴上行下效代码能够制造三个称呼分别为 mylib_app_name 和 mylib_public_string 的公然字符串财富:

假如期望其余能源有限支撑对运用你的库的开采者可以预知,您应该将其设为公开。举例,纵然 v7
appcompat
库中的大许多财富都是个体财富,可是为了扶持 Material
Design,调节工具栏小零器件的天性应当公开。

将质量隐式设为私有不仅能够阻碍你的库客商从里边库财富获得代码自动达成提议,还让你能够在不暂停您的库客户端的气象下重命名或移除私有财富。私有财富不在代码自动完毕和 Theme
Editor 的成效范围内,並且只要您尝试援用私有资源,Lint 将显示警报。

开垦注意事项

在支付您的库模块和连锁应用时,请小心以下行为和界定。

将库模块援引增添至您的 Android
应用模块后,您能够设置它们的周旋优先级。营造时,库会依照一回一个的法子与利用归拢,并服从从低到高的先行级依次。

财富集结冲突

营造筑工程具会将库模块中的能源与有关应用模块的财富集结。若是在三个模块中均定义了给定能源ID,将使用应用中的财富。

假诺多少个 AALacrosse库之间发生冲突,将动用注重项列表首先列出(坐落于 dependencies 块顶上部分)的库中的能源。

为了防止常用财富 ID
的财富冲突,请使用在模块(或在具备项目模块)中存有独一性的前缀或别的同等的命名方案。

库模块能够分包 JA安德拉 库

您能够付出一个小编满含 JAGranTurismo库的库模块;但是,您须求手动编辑相关应用模块的营造路线,并加上 JA翼虎文件的门径。

库模块可以依赖外界 JAEnclave 库

你能够支付二个依靠于外界库(举例 Maps
外界库)的库模块。在此种情景下,相关应用必得针对富含外界库(比方 GoogleAPI
插件)的目的营造。别的也要介怀,库模块和血脉相同应用都一定要在其清单文件的  成分中宣示外界库。

库模块不得含有原始能源

工具不扶植在库模块中使用原本能源文件(保存在 assets/ 目录中)。应用使用的别的原始财富都必需存款和储蓄在选拔模块自个儿的 assets/ 目录中。

动用模块的 minSdkVersion 必得高于或等于库定义的版本

库用作相关应用模块的一有的编译,由此,库模块中运用的 API
必需与运用模块帮衬的平台版本包容。

种种库模块都会创建自身的 哈弗 类

在你创设相关应用模块时,库模块将先编写翻译到 AATucson文件中,然后再增添到应用模块中。因此,每一种库都有其和睦的 XC60 类,并依照库的软件包名称命名。从主模块和库模块生成的 奥迪Q3 类会在所需的兼具软件包(满含主模块的软件包和库的软件包)中创立。

库模块恐怕含有自个儿的 ProGuard 配置文件

通过将 ProGuard 配置文件增加到包蕴其
ProGuard
指令的库,您能够在和睦的库上启用代码压缩。创设筑工程具会为库模块将此文件嵌入到变化的
AALX570 文件中。在您将库加多到利用模块时,库的 ProGuard
文件将增大至选择模块的 ProGuard 配置文件 (proguard.txt卡塔尔(قطر‎。

经过将 ProGuard
文件嵌入到您的库模块中,您能够有限支撑信任于此库的接纳模块不必手动更新其
ProGuard 文件即可使用库。当 ProGuard 在 Android
应用模块上运行时,它会同期利用来源采取模块和库的下令,因而你不应有只在库上运维ProGuard。

要钦定您的库的配置文件名称,请将其加多到 consumerProguardFiles 方法中,此措施坐落于您的库的 build.gradle 文件的 defaultConfig 块内。比如,以下一些会将 lib-proguard-rules.txt 设置为库的
ProGuard 配置文件:

android {

    defaultConfig {

        consumerProguardFiles ‘lib-proguard-rules.txt’

    }

    …

}

暗许景况下,应用模块会利用库的昭示创设,固然在使用使用模块的调弄整理营造类型时亦是这么。要动用库中分歧的营造类型,您必得将依附项增多到利用的 build.gradle 文件的 dependencies 块中,并在库的 build.gradle 文件上校 publishNonDefault 设置为 true。比方,您使用的 build.gradle 文件中的以下代码段会使应用在动用模块于调节和测量试验形式下营造时接受库的调养塑造类型,以致在使用模块于揭橥格局下创设时利用库的宣布创设类型:

dependencies {

debugCompile project

(path: ‘:library’, configuration: ‘debug’)

releaseCompile project

(path: ‘:library’, configuration: ‘release’)}

你还必得在大团结库的 build.gradle 文件的 android 块内加多以下代码行,以便将此库的非发布配置展现给采纳它的花色:

android {…

publishNonDefault

true}

不过请小心,设置 publishNonDefault 会扩大创设时间。

为了确认保障您的库的 ProGuard
法规不会将意外的滑坡副功用施加到利用模块,请仅包蕴适当法则,停用不适用于此库的
ProGuard
成效。尝试扶持开拓者的平整大概会与利用模块或它的其他库中的现存代码冲突,由此不应包括那些法规。比如,您的库的
ProGuard
文件能够点名在运用模块的压缩期间供给保留的代码。

:Jack
工具链仅援助ProGuard 的部分压缩和混淆选项。

AAEnclave 文件精解

AAPAJERO 文件的文书扩充名称叫 .aar,Maven
工件类型也相应是 aar。文件自个儿是二个带有以下逼迫性条文的 zip 文件:

/AndroidManifest.xml

/classes.jar

/res/

/R.txt

除此以外,AALAND 文件或然含有以下可选条约中的叁个或五个:

/assets/

/libs/名称.jar

/jni/abi 名称/名称.so(其中 abi 名称 是 Android 支持的
ABI 之一)

/proguard.txt

/lint.jar

发表评论

电子邮件地址不会被公开。 必填项已用*标注