创建Android库的方法及Android .aar文件用法小结

创建 Android 库

Android 库在结构上与 Android 应用模块相同。它可以提供构建应用所需的一切内容,包括源代码、资源文件和 Android 清单。不过,Android 库将编译到您可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,而不是在设备上运行的 APK。与 JAR 文件不同,AAR 文件可以包含 Android 资源和一个清单文件,这样,除了 Java 类与方法外,您还可以捆绑布局和可绘制对象等共享资源。

库模块在以下情况下非常有用:

  • 构建使用某些相同组件(例如 Activity、服务或 UI 布局)的多个应用。
  • 构建存在多个 APK 变体(例如免费版本和付费版本)的应用并且需要在两种版本中使用相同的核心组件。

在任何一种情况下,只需要将您希望重用的文件移动到库模块中,然后以依赖项的形式为每个应用模块添加库。本页面将说明如何执行这两个操作。

创建库模块

要在您的项目中创建一个新的库模块,请按以下步骤操作:

1、点击 File > New > New Module。

2、在出现的 Create New Module 窗口中,依次点击 Android Library 和 Next。还存在一个用于创建 Java 库的选项,可以构建传统的 JAR 文件。尽管 JAR 文件在大多数项目中都非常实用(尤其在您希望与其他平台共享代码时),但这种文件不允许您包含 Android 资源或清单文件,而后者对于 Android 项目中的代码重用非常有用。因此,本指南将侧重论述创建 Android 库。

3、为您的库命名,并为库中代码选择一个最低的 SDK 版本,然后点击 Finish。

在 Gradle 项目同步完成后,库模块将显示左侧的 Project 面板中。如果您未看到新模块文件夹,请确保将视图切换为 Android 视图

将应用模块转换为库模块

如果您现有的应用模块包含您希望重用的所有代码,则可以按照以下步骤将其转换为库模块:

1、打开现有应用模块的 build.gradle 文件。您应在顶部看到以下内容:

apply plugin: 'com.android.application'

2、按照下面所示更改插件分配:

apply plugin: 'com.android.library'

3、点击 Sync Project with Gradle Files。

就这么简单。模块的整个结构仍然相同,但是现在它将作为 Android 库运行,构建也将创建一个 AAR 文件,而不是 APK。

生成aar

在Android Studio1.4中,New project,先默认新建一个Applicaton module,接后File > New > New Module,选择Androd Library > Next,指定Library Name和Module Name。

新建的Library与正常的Application最大区别是module build.gradle中是apply plugin: ‘com.android.library' 而不是 apply plugin: 'com.android.application'

Build > Make project,自动生成aar文件。

以依赖项形式添加您的库

要在另一个应用模块中使用您的 Android 库的代码,请按以下步骤操作:

1、通过两种方式之一将库添加到您的项目(如果您是在相同项目中创建的库模块,则该模块已经存在,您可以跳过此步骤):

添加已编译的 AAR(或 JAR)文件:

1、点击 File > New Module。

2、依次点击 Import .JAR/.AAR Package 和 Next。

3、输入 AAR 或 JAR 文件的位置,然后点击 Finish。

将库模块导入到您的项目中:

1、点击 File > New > Import Module。

2、输入库模块目录的位置,然后点击 Finish。

库模块将复制到您的项目中,因此您可以尽管编辑库代码。如果您希望维护一个版本的库代码,则此方法可能不是您想要的,您应按照上文所述导入编译的 AAR 文件。

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 库中的任何代码和资源,库 AAR 文件在构建时已捆绑到您的 APK 中。

不过,如果希望单独共享 AAR 文件,则可以在 项目名称/模块名称/build/outputs/aar/ 中找到它,也可以通过点击 Build > Make Project 的方式重新生成此文件。

选择要设为公开的资源

库中的所有资源在默认情况下均处于公开状态。要将所有资源隐式设为私有,您必须至少将一个特定的属性定义为公开。资源包括您项目的 res/ 目录中的所有文件,例如图像。要阻止您的库用户访问仅供内部使用的资源,您应通过声明一个或多个公开资源的方式来使用这种自动私有标识机制。

要删除某个公开资源,请将一个声明添加到您的库的 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 将显示警告。

开发注意事项

在开发您的库模块和相关应用时,请注意以下行为和限制。

将库模块引用添加至您的 Android 应用模块后,您可以设置它们的相对优先级。构建时,库会按照一次一个的方式与应用合并,并按照从低到高的优先级顺序。

资源合并冲突

构建工具会将库模块中的资源与相关应用模块的资源合并。如果在两个模块中均定义了给定资源 ID,将使用应用中的资源。

如果多个 AAR 库之间发生冲突,将使用依赖项列表首先列出(位于 dependencies块顶部)的库中的资源。

为了避免常用资源 ID 的资源冲突,请使用在模块(或在所有项目模块)中具有唯一性的前缀或其他一致的命名方案。

库模块可以包含 JAR 库

您可以开发一个自身包含 JAR 库的库模块;不过,您需要手动编辑相关应用模块的构建路径,并添加 JAR 文件的路径。

库模块可以依赖外部 JAR 库

您可以开发一个依赖于外部库(例如 Maps 外部库)的库模块。在这种情况下,相关应用必须针对包含外部库(例如 Google API 插件)的目标构建。另外也要注意,库模块和相关应用都必须在其清单文件的 <uses- library> 元素中声明外部库。

库模块不得包含原始资源

工具不支持在库模块中使用原始资源文件(保存在 assets/目录中)。应用使用的任何原始资源都必须存储在应用模块自身的 assets/目录中。

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

库作为相关应用模块的一部分编译,因此,库模块中使用的 API 必须与应用模块支持的平台版本兼容。

每个库模块都会创建自己的 R 类

在您构建相关应用模块时,库模块将先编译到 AAR 文件中,然后再添加到应用模块中。因此,每个库都有其自己的 R 类,并根据库的软件包名称命名。从主模块和库模块生成的 R 类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。

库模块可能包含自己的 ProGuard 配置文件

通过将 ProGuard 配置文件添加到包含其 ProGuard 指令的库,您可以在自己的库上启用代码压缩。构建工具会为库模块将此文件嵌入到生成的 AAR 文件中。在您将库添加到应用模块时,库的 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 的部分压缩和模糊选项。

AAR 文件详解

AAR 文件的文件扩展名为 .aar,Maven 工件类型也应当是 aar。文件本身是一个包含以下强制性条目的 zip文件:

/AndroidManifest.xml

/classes.jar

/res/

/R.txt

此外,AAR 文件可能包含以下可选条目中的一个或多个:

/assets/

/libs/名称 .jar

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

/proguard.txt

/lint.jar

下面给大家介绍下Android 中.aar文件生成方法与用法

前言

无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Java Archive,即java归档文件。

在用AS的过程中,你会发现有aar这么个东西,经查阅资料了解到,aar是android归档文件,我想全称应该是:Android Archive。

他们两个有什么区别呢?

个人理解:

jar是java文件编译后的class文件压缩包。

aar是android module中所有resource文件和编译后的java文件的总压缩包。

区别在于:aar除了包含class文件,还包含resource文件。

在Android Studio中如何引入aar文件呢?

拿RecyclerView的aar文件为例。

1、找到aar文件:..\Android_SDK_Windows\extras\android\m2repository\com\android\support\recyclerview-v7\24.0.0\recyclerview-v7-24.0.0.aar

copy到Android Studio项目中的libs目录下。

2、然后在Android Studio对应的module的build.gradle文件中输入一下内容:

dependencies {
 ...
 compile(name:'recyclerview-v7-24.0.0',ext:'aar')
}
repositories {
 flatDir {
 dirs 'libs'
 }
}

3、然后重新build下整个项目即可。

在Android Studio中如何把某一个module导出为aar文件呢?

以testlibrary为例:

1、执行对应module的assembleRelease命令:

上图切记,如果是项目的主module,即app,则生成的是apk包。

2、在对应module的build\outputs\aar\目录下即是:

如果想把aar文件导入到Eclipse中呢?

如图:把aar文件用WinRAR等压缩软件打开后,会发现是上面的结构,classes.jar即为class文件的jar包,其他的为android相关的资源文件。

如果你想把导入到Eclipse中,就需要把这里面的所有资源和class文件转换成一个library工程了。

用Eclipse新建一个library工程,导入res资源、清单文件和发编译后的java文件。

总结

以上所述是小编给大家介绍的创建Android库的方法及Android .aar文件生成方法与用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

您可能感兴趣的文章:

  • Android项目中引用本地aar文件的方法
  • Android studio中生成引用.aar和.jar的方法详解
  • android studio生成aar包并在其他工程引用aar包的方法
  • AndroidStudio 如何使用aar详解
  • Android Studio中生成aar文件及本地方式使用aar文件的方法
  • android studio library 模块中正确引用aar的实例讲解
(0)

相关推荐

  • Android studio中生成引用.aar和.jar的方法详解

    在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件. 分别存储位置: *.jar:库 /build/intermediates/bundles/debug(release)/classes.jar *.aar:库 /build/outputs/aar/libraryname.aar .jar 与 .aar的区别 从名称上来讲,一个是java application resource:一个是android application resource: 那

  • android studio生成aar包并在其他工程引用aar包的方法

    1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 2.生成aar包步骤: ①.用android studio打开一个工程,然后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操作 ②.新建Module 类型为android Library 后如下图所示 ③.在新建的Module中编写完代码后,接下来编

  • AndroidStudio 如何使用aar详解

    一. 简介 aar 是一个类似于 jar 的文件格式.但是他们之间是有区别的. jar :仅仅包含class和清单文件,没有资源文件. aar :包含了class文件和资源文件.说白了就是Android的专属"jar" 将代码打包成aar文件,可以在一定程度上加快 AndroidStudio 的速度. 尤其是将 Module 打包成 aar 文件,提升的效果很显著. 二. 如何得到aar 1. Module的aar文件 将一个AndroidStudio项目中的 Module 打包成 a

  • Android Studio中生成aar文件及本地方式使用aar文件的方法

    主要讲解Android Studio中生成aar文件以及本地方式使用aar文件的方法,具体内容详情如下所示: 在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件. 分别存储位置: *.jar:库/build/intermediates/bundles/debug(release)/classes.jar *.aar:库/build/outputs/aar/libraryname.aar 两者区别: *.jar:只包含了class文件与清单文件,不包含

  • Android项目中引用本地aar文件的方法

    随着项目越来越多,代码的复用就变得异常重要,这时候就要进行模块化编程,就是把一些通用的组件或者类库做成单独的模块,其他项目直接进行引用就好.针对Android开发最常见的就是Android Library,在Gradle出现之前引用Android Library的方式也很繁琐,但是有了Gradle一切变得非常简单方便. aar 何为aar?大家都知道jar文件把,如果你有一个Android Library项目,可以很容易的导出jar文件,然后在其他项目中很方便的引用,aar和jar类似,区别就是

  • android studio library 模块中正确引用aar的实例讲解

    今天对接一个海康监控的sdk,其中sdk 是以aar的形式提供的,并且我需要用到此aar的模块是个library.所以按照正常的在application模块中引入aar的方式一致报错,首先提示要关闭offline ,然后关闭了还是会提示错误.想了很久不明白.最终通过公司前辈的指导,正确的引入了aar. 1.除了和正常的aar的引入方式外,我们还需要在application所在模块的build.gradle文件中加入如下一段: repositories { flatDir { dirs 'libs

  • 创建Android库的方法及Android .aar文件用法小结

    创建 Android 库 Android 库在结构上与 Android 应用模块相同.它可以提供构建应用所需的一切内容,包括源代码.资源文件和 Android 清单.不过,Android 库将编译到您可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,而不是在设备上运行的 APK.与 JAR 文件不同,AAR 文件可以包含 Android 资源和一个清单文件,这样,除了 Java 类与方法外,您还可以捆绑布局和可绘

  • Android 创建依赖库的方法(保姆级教程)

    新建工程,新建Module 新建一个工程,之后按下图中的操作方式,创建一个 Module 创建 Android Library 选中 Android Library,之后点击Next! 输入你要创建module名字 输入你要创建module名字,如果有,但请不要删除前面的两个冒号(可能会因AndroidStudio版本原因显示界面不一样)!之后点击Finish! 在Module中新建测试类 如图,找到以下文件目录,在Module中新建测试类 上传github 之后要上传Github,导入JitP

  • 详解在Python的Django框架中创建模板库的方法

    不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用. 我们更推荐使用后者,因为你的filter可能在后来的工程中有用. 无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中. 我们稍后会解释这一点. 第二,在适当的Django应用包里创

  • Android应用UI开发中Fragment的常见用法小结

    1.Fragment概述 在一个Activity中, Fragment代表UI的一个部分或者一个行为.一个Activity可以结合多个Fragment对象,也可以在多个activity中使用相同Fragment字节码对应的不同对象.一个Fragment对象必须被嵌入在一个主Activity对象中,该Fragment的生命周期与主Activity息息相关.比如,当主Activity处于paused状态,其对应的所有Fragment对象均处于paused状态,只有当主Activity处于resume

  • 详解android.mk中引用第三方库的方法

    一.集成第三方jar包: 1.在项目目录下创建目录libs(不创建也行,一会儿指向对应路径就好),将第三方的jar包放进去. 2.在Android.mk文件中进行配置: include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := smartphotolib:../../libs/smartphotolib.jar #前面为自定义的名(umeng_message_push),起什么名都可以,":"后面的为jar包在项目下对应

  • Android 媒体库数据更新方法总结

    Android 媒体库数据更新方法总结 在项目中,我们经常要创建个自己的目录,里面存放一些图片啊文件之类,比如:我在SD卡中刚创建了一个文件夹A,里面放入了照片B,那么,这个时候我立马去Gallery里面查看这个目录里的照片,那么,我是无法看到的. 这是什么原因呢? 因为Android系统在启动的时候会启动MediaScannerService扫描系统上的多媒体文件,然后将这些多媒体文件的信息加入到多媒体数据库中,应用程序要取得这些多媒体信息就是从这个多媒体数据库里面去取的,并不是从SD卡中取.

  • android 网络请求库volley方法详解

    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest("请求方法","请求的网络地址","成功的网

  • Delphi在Android下使用Java库的方法

    本文将以Android的USB串口通讯库为例,介绍Delphi如何在Android中使用Java的库. USB串口通讯库地址: https://github.com/felHR85/UsbSerial 一.Java库编译 1.安装Android Studio 2.在Android Studio中将SDK路径指向Delphi的SDK路径(避免重复安装SDK) 3.下载UsbSerial,用Android Studio打开, 3.1Android Studio设置(File->Settings) g

  • 用Android MenuInflater创建菜单项的方法步骤

    之前在一篇文章中已经讲过了菜单项的创建方法,但是那种方法效率较低,维护不易,现在实现另一种方法创建菜单. MenuInflater,通过此类我们可以轻松的创建菜单项,具体步骤如下: 1.在res/menu/文件夹下,找到main.xml文件,此文件就是我们定义菜单项的地方,在些文件中添加如下菜单项: 复制代码 代码如下: <item android:id="@+id/menu1" android:icon="@android:drawable/alert_dark_fr

随机推荐