一. 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;
完!!!