android工程添加第三方库.so文件

安卓native项目,接入sdk的时候,当第三方库中包含.so文件,我们把.so文件放到安卓工程的armeabi,armeabi-v7a 等文件夹下面的时候,然后再运行该项目,编译的时候,是会删掉对应的.so文件,然后重新生存.so文件的,此时就会删掉我们刚刚复制的.so文件,如果直接用eclipse开发,倒是有一个方法,就是在打包的时候(此时只涉及到安卓层的东西,不会涉及到c++层的东西,我们只需要把第三方.so拷贝到对应的平台文件夹下,然后找到工程,然后找到编译属性,把那个编译c++/c部分关闭,意味着工程不会删除.so,在执行run as 的时候,就不会删掉.so文件了,这个也是我以前一直用的方法,多平台的就把各个平台给的.so文件依次复制下去就是了)但是这样未免有些繁琐,我们需要的是一劳永逸的方法,通过摸索,找资料,得到解决方案如下:

1:复制.so文件

找到项目工程的jni文件夹,发现里面会有一个android.mk 和一个application.mk文件   假若我们现在要引入的第三方库是third.so,在jni里面新建一个文件夹,命名随便,我们命名为prebuilt 然后我们打开application.mk文件,找到关键字APP_ABI(代表该工程需编译什么版本的.so库,不懂可以百度,没有找到该关键字表示工程用的是默认的armeabi),假若我们找到这样的一条语句:APP_ABI:= armeabi-v7a x86 那么我们回到prebuilt文件夹下面创建对应的两个文件夹,然后再到对应的两个文件夹里面复制好第三方给的对应的.so文件(一般第三方给的.so文件,都会有几个版本),这个是第一步,做好资源的复制。

2:修改android.mk

打开android.mk文件,在LOCAL_PATH := $(call my-dir)添加下面语句:

###add the third .so start

include $(CLEAR_VARS)

LOCAL_MODULE := thirdSo

LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/third.so  ###这个是关键语句,TARGET_ARCH_ABI表示当前平台 就是对应之前建立的文件夹

include $(PREBUILT_SHARED_LIBRARY)

###add the third .so end


这样一来就会复制.so到对应的文件夹下面,打包的时候,就没问题了。

好的,问题解决了,我们需要了解一下armeabi armeabi-v7a x86等是什么意思呢。我的理解就是手机的cpu类型,一般我们的android工程用的就是默认的也是兼容性最强的armeabi,但是为什么我们还要用armeabi-v7a x86呢,我认为是为了发挥更好的手机处理器的优势吧。但是这样会有一个问题,就是当我们的工程用了多各个版本后,ndk在编译的时候,会生成各个版本的.so文件,那么apk包是要大一些的。总之,性能和包的大小,就要看实际情况了。利用中午休息时间写的,有错别字还望见谅。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值