现在讲的都是些基础的东西,东西会一步步往上升的,知道操作的可以在这里找找问题 ,顺便温习下。然后不知道的就在这里学习下。嗯就这样吧。
-
第三方库的分类和区别。
-
如何导入这些库
一丶第三方库分类和区别:
-
jar文件。我们需要了解的是Jar通常都是只包含.class文件和清单文件。不包含资源文件,在Android里面就是不包含Layout.xml还有其他的资源。当然你也可以包含但是会识别不了。.class是我们.java编译出来的。这样比直接提供java少了一层编译。
2. library文件。工程库.java和资源文件等。
除了不能运行和progject基本上一样的。正常情况下是不能独立运行的, 但是也可以修改gradle来成为独立工程。通过相互切换可以做组件化开发加快调试。
把上面的是说可以运行的工程文件。下面就是library可以修然后运行。
3. aar 文件。先说说aar文件和jar文件的区别吧。jar我们知道的是只有.class文件和清单文件而aar文件里面可以包含资源文件,说白了专属的Android jar。面也就是一些.jar+res+assets+R和清单文件等。一些必选和可选文件。我们突然发现了一个问题。这个和library有什么关系和区别呢?当然是有联系的。实际上aar是library编译后的文件的集合。
这里希望大家了解到一个事情就是library既可以编译成jar,又可以编译成aar。如果只是java文件可以选择导出jar。如果加UI应该导出aar。
来2张bigbang(逼格棒)的图片。
这个基本上不用怎么翻译了吧。就是我上面说的内容。第一张图是解释aar的。第二张图是说明aar里面必须要包含什么文件和可选的包含的文件。
这里给大家插播一个小知识。res/raw 和assets的异同。
相同点:都会原封不动的的打如apk包中。
不同点:res/raw中的文件会被映射到R.java里面可以通过 id open流找到并引用。而assets里面的文件则需要通过AssetManager来调用。还有一个不同的地方就是assets是可以建立二级目录的而res是不可以的。我现在好想哭,每个里面都有好多的知识点。还有里面文件大小的注意点等等无数的点。先了解个大概不要在意这些细节。看样子后面还得专门用一个篇幅写这些。
获取方式:
InputStream is = getResources().openRawResource(R.id.fileName);
AssetManager am = getAssets();
InpusStream is = am.open("fileName");
4.os文件。这个是动态库文件,这个要讲的话很大一个篇幅。先和大家说说大概吧。以后可以专门再用一篇讲讲这个。我们经常看到引入os的时候会有很多个文件夹,这个其实是不同cpu架构。目前支持7种,而每一种都关联一个相应的applicationBinary Interface。这个主要是定义了二进制文件如何在相应的系统平台上。这个里面很多东西。我也只是知道个皮毛。很多设备都支持多于一种的ABI。例如ARM64和x86设备也可以同时运行armeabi-v7a和armeabi的二进制包主要的架构有:armeabi,armeabi-v7a,X86,mips等等。也是大学的技术及组成原理里面的。
主要是由c。c++编写的。先了解这些吧。
二丶导入第三方库,方式和注意点。
A) jar包的导入以fastJson为例子
下载链接:http://download.csdn.net/download/pdsyzbaozi/8199419
-
jar包的导入。这个就很好导入了也基本没有什么可以说的了吧。
-
先找到相应的jar包
-
工程切换到project模式。放入libs目录下。然后同步一下工程。理论上这样是可以了的。如果不行往下面走
-
在这里这样写,意思是将本libs里面的所有的以jar结尾的文件导入到工程里面来。
逗逼朋友们。如果没有libs目录怎么办,在app目录下自己创建。
示例图(fastJson):
大功告成
B) Library的导入和注意:以PullToRefreshListView为例子
下载链接:https://github.com/chrisbanes/Android-PullToRefresh
-
找到并且下载并且解压
-
一步步往后next就可以了, 然后就会遇到这个问题
是说没有找到这个版本的的sdk要么点击下载,要么去求改library的gradle文件,修改很简单。compileSdkVersion就是说编译版本,你电脑上有哪个就添加哪个,最好就是用你主工程里面的。 buildeToolsVersion也是直接复制过来。然后同步一下工程就不会问题了。
完美。
c. 打开project Structure
找到你要添加lib就可以了。
哦哦对了出现了小插曲,这个方进来用不了会报错。不是导包的问题,是包的问题。修改下就可以了。
C) .os文件的导入以高德地图为例子
-
还是得先下载下来os。
-
和java在同一个目录层级新建一个jniLibs,然后把文件全部拽进去,在有的时候我们看到在gradle有这样的配置
SourceSets {
main{
JniLibs.srcDirs = [‘libs’]
}
}
这个是为什么呢。这里的话是因为我们没有将os文件放到jniLibs下面直接放到了libs下面和jar包在同一个目录,这样的话就得在gradle里面说明os路径,不然会找不到的。
配置好高德的一些配置然后运行就可以了。
但是在这个过程中又出现了小插曲。这个是调试后的结果.
给大家看看插曲
当我运行在模拟器上面的时候
说当前的native libs不支持当前的cup架构。然后修改模拟器cpu架构就可以。这个就说明了上面的为什么os分那么多包,是不同cpu架构调度不同的方法和什么对齐方式的。我知道一般arm是精简指令集,X86是复杂指令集的代表。是大学计算机组成里面了解的一点点。哦对了教大家看手机cpu架构
adb shell
cat /proc/cupinfo
不要问我adb shell 怎么不是内部命令,不要问我cat的意思。
D) aar的导入
-
aar的导入方式一:Maven远程仓库
compile'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
直接这样就可以了。
b.arr的导入方式二:本地aar包
1.直接本地aar包这个和jar一样放入libs里面就可以了。
2.然后在gradle里面加入到工程里面
3.compile(name:'fileName', ext:'aar')
补充说明:1.aar实际上就是Android专属的jar,建议将module都打成aar可以提高as的速度。因为里面主要是.class而不是.java不用编译。2.我们需找库导入的时候可以直接通过Project Structure里面选择Choose Library Dependncy找,先在我基本都是这样的。
像如果将我们自己开发的库打包成SDK给别人,无非也就是给别人提供这些。后面的内容会给大家讲如何将我们的库打包出来提供给别人用。
如有什么问题可以添加我微信公众号,每天分享原创干货。