主要介绍某个项目跟随系统一起编译如何通过makefile添加so库。
帮另外一个项目救火,需要用到百度定位的sdk,一个依赖的jar包,一个需要放到armeabi中的liblocSDK4.so库,百度lbs后台中创建访问密钥后设置里面可以不设置安全码,感谢@左啊提醒。
用eclipse debug或者eclipse签名导出APK都能正常定位,但跟随系统一起编译,则BDLocationListener的
1 |
public void onReceiveLocation(BDLocation location) |
函数参数location.getLocType()始终为162,和百度的技术支持了解后知道162表示so库加载失败,之后就排查liblocSDK4.so为何加载失败。
stackoverflow之,在Android.mk中添加
1 |
PRODUCT_COPY_FILES += $(LOCAL_PATH)/libs/armeabi/liblocSDK4.so:system/lib/liblocSDK4.so |
表示将so库拷贝到系统的system/lib下面,makefile中该部分整体配置如下:
1 2 3 4 5 6 7 8 |
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 \ baidu-loc-sdk-v4 include $(BUILD_PACKAGE) include $(CLEAR_VARS) PRODUCT_COPY_FILES += $(LOCAL_PATH)/libs/armeabi/liblocSDK4.so:system/lib/liblocSDK4.so LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += baidu-loc-sdk-v4:libs/baidu-loc-sdk-v4.jar include $(BUILD_MULTI_PREBUILT) |
不过要使的PRODUCT_COPY_FILES生效,需要系统整体编译才可,mm单独编译该项目是无法生效的,可通过系统完整编译升级后在system/lib下查找是否存在liblocSDK4.so判断so库是否编译正确。
至于eclipse为什么放到libs的armeabi下面就能直接生效是因为这些工作adt都已经帮你完成了。
赞
赞