当前位置: 代码迷 >> Android >> 怎么引用第三方SO文件
  详细解决方案

怎么引用第三方SO文件

热度:95   发布时间:2016-05-01 11:11:05.0
如何引用第三方SO文件
各位神,
  鄙人的项目里已经有了3个SO文件,这三个SO文件都是自己写C语言然后生成的。当然也成功了。无话可说。
  问题是,鄙人现在要引用BAIDU的locSDK3.SO,也就是GPRS。请问该如何添加呢?我直接把locSDK3.SO放进armeabi文件夹里,会被删除掉。请问该如何处理,一定要您自己做过的哦。

我的做法如下:
  第一步: 在JNI文件夹下面生成一个新的目录prebuilt,然后在里面生成一个android.mk,把locSDK3.SO COPY进prebuilt.此android.mk 内容如下:
       LOCAL_PATH := $(call my-dir)
   
    include $(CLEAR_VARS)
 
    LOCAL_MODULE := locSDK3
    LOCAL_SRC_FILES := liblocSDK3.so
    include $(PREBUILT_SHARED_LIBRARY)
    

 第二步: 在jni目录下android.mk文件后面添加
include $(CLEAR_VARS)

LOCAL_SHARED_LIBRARIES := prebuilt/locSDK3
include $(LOCAL_PATH)/prebuilt/Android.mk


这时在libs目录下会新生成一个liblocSDK3.so文件,只有5K。系统会提示安装这个文件。
Install        : liblocSDK3.so => libs/armeabi/liblocSDK3.so
我觉得这是有问题的。因为我看armeabi目录下的liblocSDK3.so 只有5K。而真实的liblocSDK3.so有40K

------解决方案--------------------
呵呵,楼主距答案已经很近了,你prebuilt是对的,但是整个过程有点乱,这个工程只需要有一个Android.mk就行了:将prebuilt下的Android.mk删掉,因为这个文件没有必要,然后在jni下创建一个Android.mk(一般工程都是这样的,jni下一个Android.mk),然后将你prebuilt的代码添加到mk文件的最开头,但是要改变一下目录:LOCAL_SRC_FILES := prebuilt/liblocSDK3.so,然后再改一处就行了:
LOCAL_SHARED_LIBRARIES := prebuilt/locSDK3 改为
LOCAL_SHARED_LIBRARIES := locSDK3
这个时候你编译,肯定能通过,我是做过实际项目的
你觉得文件变小了我不太清楚是为什么,因为我从来没有碰到这样的情况,不过我建议你先按我的方法试试,如果还变小,就有问题了
------解决方案--------------------
直接将locSDK3.SO拷进去就行了,android.mk之中不做任何修改,因为.mk是编译时用到的,相当于一个索引,用于指定编译哪些c文件,进而生成so文件,而既然是.so,说明文件已经编译过了,不需要再编译的,至于为什么会变小,是因为在.mk文件中指定了编译一个locSDK3.SO,编译时就会将现有的同名so删除,重新编译生成,而jni可能中没有任何对应c文件或者你没有指定编译哪些文件,所以文件so中几乎没有实际数据
------解决方案--------------------
强力支持,现在三楼说的就是正确的哦,我尝试了!!
  相关解决方案