Android JNI (.so)库中与android共享第三方 (.so)库

来源:互联网 发布:软件许可管理 编辑:程序博客网 时间:2024/06/05 06:55

http://blog.csdn.net/zf135792468/article/details/11213661

1.在project/jni目录下创建prebuilt子目录(目录名可自定义).

2.将第三方.so放到prebuilt中,并创建Android.mk, 内容如下:

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE := xxx

    LOCAL_SRC_FILES := libxxx.so

    include $(PREBUILT_SHARED_LIBRARY)

3.在project/jni/Android.mk中加入

    LOCAL_SHARED_LIBRARIES := xxx

4.在project/jni/android.mk的最后加入

    include $(LOCAL_PATH)/prebuilt/Android.mk

5.运行cygwin, 到project目录下, 运行$NDK/ndk-build

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

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

 

你得到一个第三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
原创粉丝点击