[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法

主要讲解Android Studio中生成aar文件以及本地方式使用aar文件的方法。

在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件。

分别存储位置:

*.jar:库/build/intermediates/bundles/debug(release)/classes.jar

*.aar:库/build/outputs/aar/libraryname.aar

两者区别:

*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

*.aar:包含所有资源,class以及res资源文件全部包含

如果你只是一个简单的类库那么使用生成的*.jar文件即可;如果你的是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件那么就只能使用*.aar文件。


使用方式:

*.jar:拷贝到:libs目录,eclipse直接导入即可,AndroidStudio项目中添加:

[java]  view plain  copy
  1. dependencies {  
  2.     compile fileTree(include: ['*.jar'], dir: 'libs')  
  3. }  
重新编译一次项目既可完成加载。

*.aar:有两种方式,分别为本地加载以及网络加载,由于网络加载涉及到发布到mavenCentral托管的问题这里不做讨论;另外eclipse很久没有使用了也不做讨论;在这里给大家说一种本地加载的方式,简单快捷。

这里演示的aar文件为:”genius.aar“

第一步:拷贝到:libs目录

第二步:build.gradle 配置文件中更改为

[java]  view plain  copy
  1. repositories {  
  2.     flatDir {  
  3.         dirs 'libs'  
  4.     }  
  5. }  
  6. dependencies {  
  7.     compile(name:'genius', ext:'aar')  
  8. }  

分别添加了”repositories“与更改了”dependencies“,然后重新编译一次项目就可以正常使用了。

这时打开你的项目地址”\build\intermediates\exploded-aar\“你会发现下面多了一个文件夹”genius“打开后能看见里边包含了一个”classes.jar“文件与一些资源文件和”R.txt“文件

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第1张图片

这就是Android Studio自动解析了aar文件后出现的东西。


在这里给大家宣传一下自己的项目:Genius-Android

原创作品,转载请注明出处:http://blog.csdn.net/qiujuer/article/details/39754517


下一次给大家分享一下怎么把自己做的库aar文件发布出去,别人通过网络加载方式使用。






Android Studio导入第三方类库的方法

本人也刚刚开始尝试做android app的开发,听说android studio是Google支持的android 应用开发工具,所以想应该肯定比Eclipse好用吧,反正以前没有java开发经验,索性就从android studio开始学,以前一直是做.net的开发,最近使用了Eclipse,Android Studio之后发现Visual studio.net正式太好用了,不得不说微软的开发工具做的比谁都好。下面是我在使用Android Studio应用第三类库刚开始的时候走了不少弯路,所以写下来给和我一样的初学者,分享一下

导入*.jar包

新建好了Android项目,添加一个第三方已经打包好的jar文件进你项目,下面就已添加一个odata4j的一个包

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第2张图片

在项目中添加一个libs文件

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第3张图片

直接通过COPY/PAST 把你下载的jar文件添加到libs文件夹下

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第4张图片

然后在libs文件夹和添加的*.jar文件下鼠标单击菜单 add as library

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第5张图片

然后在选择项目单击Open Module Settings,在Dependencies中选择添加文件

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第6张图片

这样就完成了jar文件添加

打开App目录下有个build.gradle文件应该项目结构文件,上述的动作只是为了在在文件下添加

dependencies {

compile files('libs/android-support-v13.jar')

compile files('libs/odata4j-0.7.0-clientbundle.jar')

}

 

导入第三方java类库含源代码包

下面演示如何在本项目中导入第三方的源代码类库,这里例子是导入Httpzoid一个json http client类库

先从github上下载zip包解压后把Httpzoid目录copy到你项目的目录下

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第7张图片

添加后android studio的项目下会自动出现这个目录

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第8张图片

接下来需要手工修改项目跟目录下settings.gadle 添加

include ':App',':Httpzoid'

这里必须手工修改没有其他方法

然后在打开App/build.gradle这个文件,添加

dependencies{

compile project(':Httpzoid')

}

这是你在打开Open Module Settings就可以看到,已经导入httpzoid的类库

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第9张图片

 

但是编译肯定还是会错误的

还必须在项目Httpzoid目录下添加一个build.gradle的这个文件,内容如下

 

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.android.tools.build:gradle:0.6.+'

}

}

apply plugin: 'android-library'

 

repositories {

mavenCentral()

}

 

android {

compileSdkVersion 18

buildToolsVersion "17.0.0"

 

defaultConfig {

minSdkVersion 14

targetSdkVersion 18

}

 

 

sourceSets {

main {

manifest.srcFile 'AndroidManifest.xml'

java.srcDirs = ['src']

resources.srcDirs = ['src']

aidl.srcDirs = ['src']

renderscript.srcDirs = ['src']

}

}

}

 

dependencies {

compile 'com.android.support:appcompat-v7:+'

compile files('libs/gson-2.2.4.jar')

}

 

 

这是后编译还会有可能报错

这时候可能需要修改一下Httpzoid目录下的AndroidManifest.xml文件有可能存在和你项目中文件有冲突或版本跨度太大导致语法的错误修改一下

 

做完以上几步基本上就可以便宜成功了


1、 简述

在比较大的 Android 项目的开发中,我们经常会遇到工程、jar 包等等之间相互引用的方式。一般我们通过在 gradle 文件中配置依赖来解决,比如:

Gradle 的一些基本依赖配置方式如下

  • compile fileTree(dir: 'xxx', include: ['*.jar', "*.xxx"]):将某个目录下所有符合扩展名的文件作为依赖;
  • compile 'com.xx.xx:ProjectName:Version':配置Maven` 库作为依赖;在 Maven 库中心 可以搜索自己想用的库进行依赖;
  • compile project(':AnotherModule'):配置另一个 Module 作为本 Module 的依赖,被依赖的 Module 必须被导入到当前工程中;
  • compile files('xxx.jar'):配置某个 jar 包作为依赖。

看起来不错,基本通用的配置都已经存在了。一般对于中等小型的工程,这种开发方式完全没有问题。但是有时候 A 和 B 两个工程,想同时引用另一个公共的 Module C,而这个 Module 可能是一个比较复杂的 Android Module,可能包含了一些主题、UI 、资源文件等等,这时候,如果用 Module 依赖的方式来配置,不免有些困难,因为 A 和 B 都要导入 C,而且要随时关注 C 的更改。

好在 Android Studio 提供了 aar 库的打包方式,我们可以把 C 作为 library 进行打包,输出 aar 文件,然后在 A 和 B 中,配置 aar 库依赖,就可以解决。

2、aar 文件简介

要输出 aar 文件,必须将 Module 配置为 library,在 gradle 文件中如下:

  • 输出 aar : apply plugin: 'com.android.library'
  • 输出 apk :apply plugin: 'com.android.application'

将 Module 配置为 library 后,构建输出一个 aar 文件,根据渠道和 BuildType 的不同,在相应的目录下可以找到。比如对 BuildType 为 debug 的配置,输出为:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。一份 aar 文件其实就是一份 zip 包,和 jar 不同的是,它将一些资源文件、第三方库文件、so 文件等等都打包在内,而代码文件编译后压缩在在 classes.jar 中。比如:

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第10张图片

3、导入 aar 的方式引用

这种方式比较简单,打开 Project Structure,添加一个新 Module,然后选择 Import *.JAR or *.AAR Package 的方式导入:

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第11张图片

导入后,在你的工程下面,会生成一个文件夹,里面是 aar 文件以及 Android Studio 的配置文件。

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第12张图片

接着可以在 gradle 中配置依赖了,其他 Module 可以引用这个 Module 了,依赖方式使用 compile project 的方式即可。

缺点:被依赖的 aar 无法 F3 跟进去,无法看到资源文件内容以及目录层级等等缺陷。

4、使用配置依赖的方式引用

gradle 其实还有另一种依赖可以引用 aar:

  • compile(name: 'xxx', ext: 'aar')

首先需要将 aar 文件放入引用 Module 的 libs 目录下,和一般的 jar 文件类似。然后在 gradle 配置文件中把 libs 目录加入依赖:

1
2
3
4
5
repositories
     flatDir {
         dirs  'libs'
     }
}

接着在 gradle 的依赖配置中加入 compile(name: 'xxx', ext: 'aar') 这一句,依赖即可关联完毕。构建一下工程,在 Module 的build/intermediates/exploded-aar 目录下,可以看到有一些临时文件生成:

[Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法_第13张图片

看起来完全是引用 aar 的解压版本。Android Studio 安装反编译插件后,可以通过 F3 跟进到 class 文件里面,如果你有被依赖 Module 的源代码的话,还可以 Attach Source 关联源代码查看。另外,可以很方便的查看 aar 中的资源文件。

另外,这种依赖方式更新 aar 后,生成的临时文件也会随之变动,不用担心改动不同步的问题。

5、总结

综上,介绍了 aar 文件的生成方式,以及两种 aar 依赖的方式,经过实战检验,第二种通过配置 gradle 依赖的方式简单易用,只需一行代码即可搞定。




你可能感兴趣的:([Android Studio] *.jar 与 *.aar 的生成与*.aar,jar,第三方库项目导入项目方法)