分享

JIN学习一、Android使用已有C/C 代码、第三方SO库的方法

 啊司com 2016-08-06

1.配置好NDk编译环境(这个Google一下,:))

2.将已有C/C++代码,编译成SO文件

3.Eclipse中新建Android工程,创建一个jni目录。如下所示


4.在jni目录创建C/C++文件,里面调用步骤2函数,或者第三方SO的函数

5.创建Android.mk文件,内容为:

LOCAL_PATH := $(call my-dir)
# Link libXXX.so
include $(CLEAR_VARS)  
LOCAL_MODULE :=XXX  
LOCAL_SRC_FILES := libXXX.so  
#LOCAL_SRC_FILES := /jni/libXXX.so  
include $(PREBUILT_SHARED_LIBRARY)  

include $(CLEAR_VARS)
LOCAL_MODULE    := XXXAgent
LOCAL_SRC_FILES := XXXAgent.cpp
LOCAL_SHARED_LIBRARIES := XXX
LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY)

将XXX替换为编译出的SO或者第三方SO的名字

6.将jni目录下的C/C++编译成Android通过JNI调用的SO文件,这里名字为  libXXXAgent.so

7.Android工程中使用时,首先加载一下用到的SO库,即可正常使用了。

System.loadLibrary('XXX');
System.loadLibrary('XXXAgent');

说明:这里的重点是如何调用第三方SO库,所有部分细节没有表述。比如Javah生成相关头文件,jni调用等。


补充:上面步骤可能比较多,这里举一个例子加以说明。某天,你得到一个第三SO库,名字就叫XXX。你发现里面的功能正好是你Android项目里需要的,可以拿来就用。这个消息令你高兴万分啊那是。但是,如何在Android里使用呢,XXX库里的调用约定不符合JNI规定,是不能直接来用的。哈哈,想到了,创建一个XXXAgent.so。它的调用采用JNI,然后在实现里调用第三方SO就可以了。以上就是大概的思路。


SO文件是如何自动安装到虚拟机或者手机上呢,NDK生成的SO文件会自动放到libs/armeabi目录下。而此目录下的SO文件都会自动打包到APK,安装后释放到/data/data/项目名字/lib/下。这里XXXAgent.SO文件生成libs/armeab,XXXAgent.SO依赖XXX文件,XXX文件自动拷贝到libs/armeab下。(XXX文件放在jni下,和Android.mk同级,这个是和Android.mk里的设置配合使用的)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多