android的根目录下有个libs文件夹,此文件加包含了armeabi和armeabi-v7a(或者只有其中一个)。
我们的c代码编译成的本地库(各种.so)就会放在这两个文件夹其中的一个。那armeabi-v7a 与 armeabi有什么区别,都是什么意思呢?
armeabi和armeabi-v7a是表示cpu的类型,我们知道一般的手机或平板都是用arm的cpu(mips的就悲催的被忽视了),不同的cpu的特性不一样,armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。
在android.mk里可配置以下宏:
TARGET_CPU_API := armeabi
APP_ABI := armeabi
当你编译时出现一些链接动态库的undefine错误,或你的apk运行时出现装载.so动态库错误时,不妨看一下这个cpu类型的配置是否有误。
但是有时候你的主程序中只有armeabi或者armeabi-v7a,而你引用的library 工程里面这两个(armeabi和armeabi-v7a)都有。这时你在运行你的程序就会出现问题:找不到.so文件了。
解决办法:在你的主程序libs下面把这两个文件夹都建立(已有的就不要建了),把里面的.so文件拷贝一份到新建立的文件夹中,这样就ok了。