一个android常识从导包到CPU

作为一个android程序员,导库貌似是最基本的常识了。就像复制粘贴一样日常便饭……

其实,如果在eclipse里面,导包可能不值一提,但是在android studio,多多少少还是有些不一样。这里用一个例子来说明问题。

推送什么的,最常见了,所以我们选择了在项目中集成极光推送。其实不管什么第三方jar包,都该是一样的–jar包丢到/libs目录下,这点无可厚非。

但是当导入了jar包,跑程序一直出现问题,logcat提示jar包不存在。但是根据我的目录结构,所有的jar包都在呢,怎么会这样。

原本以为只是掉了多cpu支持的so包,结果复制了所有的so包还是有问题。资料查下来,发现android studio的导入方式有差异。

mark出来如下:

1,在**./项目目录/app/src/main/**目录下新建一个文件夹jniLibs,也即:/project_name/app/src/main/jniLibs

2,将所有的so包都复制到该目录下,复制的包包括cpu构架的目录,截图如下:

image

3,这样下来还没玩。接下来是最重要的一步,修改配置文件

从android studio打开配置文件build.gradle。在android节点添加以下代码

sourceSets.main{

jniLibs.srcDir  ‘src/main/jniLibs’

}
接下来编译项目就能通过。


我们知道,android是一个多cpu构架支持的平台,目前支持的cpu构架至少有armeabi,armeabi-v7a,mips,x86这四种。

如果你看过android源代码,你会发现形似abi的文件。abi是应用程序二进制接口,英文为application binary interface。这个接口描述的是应用程序和操作系统之间的接口。abi不同于api,api定义的是源代码和库之间的接口,所以同样的代码可以很好的在各种平台上执行,然而abi则允许编译好的目标代码使用兼容abi的系统中无需任何改变就直接运行。这样看来,abi需要完成的工作显然是多于api的。

abi指定了应用程序使用那种指令来编译。abi和cpu相构架关联。