关于Android.mk中@标识符没有将apk中的so抽离出来的现象

前面的博客里面有提到Android系统预装第三方apk的方法:

Android系统预装第三方apk

里面提到

LOCAL_PREBUILT_JNI_LIBS := \
@lib/armeabi/libcwatchdog.so \
@lib/armeabi/libmp3lame.so \
@lib/armeabi/libttsnotemsc.so \

@lib/armeabi/libopustoolvn.so

前面的 @符号,@标识符会将apk中的so抽离出来,拷贝到对应编译后的apk目录;

但是项目中实际编译的时候遇到并没有将apk中的so抽离出来,拷贝到对应编译后的apk目录,导致系统首次开机启动速度很慢,后来改用了下面的方法二,可以实现系统首次开机快速启动,具体原因未知,现做记录以备日后有时间重新分析原因:

方法一 不从apk中解压lib库而直接添加
如下例,在Android.mk中添加并配置变量(注意路径对应):
LOCAL_PREBUILT_JNI_LIBS = \
@lib/armeabi-v7a/libcryptox.so \
@lib/armeabi-v7a/libfb.so 
注意前面的 @符号,@标识符会将apk中的so抽离出来,拷贝到对应编译后的apk目录;
方法二 手动解压lib文件到当前apk的编译目录并添加
先解压当前apk内的lib文件夹到当前apk编译目录,同方法一在Android.mk中添加并配置变量(注意路径对应),如下例:
LOCAL_PREBUILT_JNI_LIBS = \
lib/armeabi-v7a/libcryptox.so \
lib/armeabi-v7a/libfb.so 
若当前apk包含的lib库文件数量比较多时,上述代码可以通过修改为如下代码进行优化,优化的思路是用递归搜索来替代手工对lib库文件进行添加:
###清空临时变量JNI_LIBS 
JNI_LIBS :=
###当前目录递归搜索
$(foreach FILE,$(shell find $(LOCAL_PATH)/lib/ -name *.so), $(eval JNI_LIBS += $(FILE)))
###获取搜索文件目录集(相对目录)
LOCAL_PREBUILT_JNI_LIBS := $(subst $(LOCAL_PATH),,$(JNI_LIBS))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值