Android库文件jar与aar的区别及用法

一. jar与aar

大家都知道jar文件把,如果你有一个Android Library项目,可以很容易的导出jar文件,然后在其他项目中很方便的引用,aar和jar类似,区别就是一个Android Library项目导出的jar文件不能包含资源文件,比如一些drawable文件、xml资源文件之类的,所以这就有很大的限制,在gradle之前我们要引用带资源文件的Android Library必须要把整个library导入进来进行引用,但是有了gradle之后,Android Library项目可以直接导出成aar,然后其他项目像引用jar的方式直接方便的引用。

jar:仅仅包含class和清单文件,没有资源文件。
aar:包含了class文件和资源文件。说白了就是Android的专属“jar”

二、描述

1.   *.jar,JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。找一个jar文件,然后修改后缀名为‘zip’或者‘rar’格式,然后解压该文件,打开解压后的文件夹,截图如下所示:

点击‘com‘文件夹就会看到里面全部是‘.class’文件。

PS: JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的。它们包括: 安全性、减少下载时间、传输平台扩展、包密封、包版本控制、可移植性

2. *.aar,AAR(Android Archive)包是一个Android库项目的二进制归档文件。我们随便找一个aar文件,然后修改后缀名为‘zip’或者‘rar’格式,然后解压该文件,打开解压后的文件夹,截图如下所示:(每个aar解压后的内容可能不完全一样,但是都会包含AndroidManifest.xml,classes.jar,res,R.txt)

 *.aar文件中包含所有资源,class以及res资源文件。

三、生成aar文件和jar文件

1.生成jar文件。

在Android Studio中,在某一个Module的Gradle脚本开头声明:

apply plugin: 'com.android.library'

接着编译该Module,编译完成之后会在Module的build-->intermediates-->bundles-->debug(release)-->classes.jar,如下图所示:

2.生成aar文件。

在Android Studio中,在某一个Module的Gradle脚本开头声明:

apply plugin: 'com.android.library'

接着编译该Module,编译完成之后会在Module的build-->outputs-->aar-->xxxxx.aar ,如下图所示:

四、使用

1. *.jar文件使用。

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

dependencies {  
    compile fileTree(include: ['*.jar'], dir: 'libs')  
}  
在module中的包名为: 
com.example.myView

添加依赖后,在当前项目中的布局添加控件:
<com.example.kenjc.myview.MyBar

2.  *.aar文件使用。

*.aar文件使用有两种方式,一种是使用在线的(网上的),一种是添加本地的*.aar文件。网络加载,只要你知道*.aar文件在maven中的路径即可,此处不演示了。下面主要看看在Android Studio中如何加载本地的*.aar文件。

(1).把aar文件放在一个文件目录内,比如就放在libs目录内;

(2).在app的build.gradle文件添加如下内容;

repositories {
    flatDir {
        dirs 'libs' 
    }
}

(3).之后只需要添加一句gradle依赖便方便的引用了该aar文件;

dependencies {
   ...
    compile(name:'test', ext:'aar')
   ...
}

补充一点,如果*.aar文件中引用了其他Maven 仓库的包,那么需要在gradle中添加依赖,否则在运行的时候,可能会报“Caused by: Java.lang.ClassNotFoundException”!aar不会将依赖的lib包打包进来, 哪里引用aar, 哪里要把aar需要的lib一块引入进来。

调用方法与jar文件一样,只需导入包名即可调用里面的函数或者控件之类的。 
例如,我之前测试的时候写了一个自定义标题栏myView.aar

在module中的包名为: 
com.example.myView

添加依赖后,在当前项目中的布局添加控件:
<com.example.kenjc.myview.MyBar
 //方法一 可行
        try{
            Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
            //这里的packetname 一定记住填写 调用方的packetname 因为 aar最终会被合并到调用方的manifest文件
            intent.setComponent(new ComponentName("com.examole.test",//packagename
                    "com.example.module.LYMainActivity"));//classname//
            startActivity(intent);
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(),e.getMessage() ,Toast.LENGTH_LONG).show();
 
        }
        return;
        //方法二 可行
    //        //此种方式 需要androidmanifest.xml添加相应的activity
    //        startActivity(new Intent(this,LYppMainActivity.class));
    //        return;

完!!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值