android 的JNI调用整理

 

今天讲个Android JNI的用法。
这个是我两年以前最头疼的问题。
感觉应该写出来分享给大家。

OK 我的NDK安装在了Ubuntu的此目录当中

 

 

1.把你的程序拷贝到apps目录里并且修改你的Application.mk

APP_MODULES      := mylib

这里mylib是指定自己使用的库名称

 

2.如果使用其他库请把.a或.so文件拷贝到此目录

out/apps/<MyProject>/android-1.5-arm

 

3.先配置Android.mk,设置引用的静态库.a,动态库.so,输出名称

cd 到 sources/samples/<myproject>

 

Android.mk的内容如下。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := mylib
LOCAL_SRC_FILES := myjni.c
LOCAL_SHARED_LIBRARIES := libcrypto libssl libsqlite
LOCAL_STATIC_LIBRARIES += libhttpd liblightcomp libmod_dirlisting libmod_auth libmod_accesslog libmod_rewrite libmod_alias libmod_indexfile libmod_staticfile libmod_webdav libmod_percent libmod_upfile libmod_datalisting libxml2 libpcre libuuid libmutex
include $(BUILD_SHARED_LIBRARY)

 

注意:

mylib要跟第1部分中的名称一样。

myjni.c是我们即将写入的JNI文件

LOCAL_SHARED_LIBRARIES里的文件可以预先把android自带的so文件拷贝到第二部分中,可以有效降低最终生成的库文件大小。

LOCAL_STATIC_LIBRARIES静态文件链接顺序要格外注意,你知道的。

 

4.开始写Jni文件myjni.c

 

JNI_OnLoad初始化,声明函数名。。。。

 

编译的出库文件

# make APP=<MyProject>

稍等片刻,库文件生成到apps/<MyProject>/project/libs/armeabi/libmylib.so

把此库文件Eclipse项目-><myproject>/libs/armeabi

 

5.写java部分youactivity.java

 

声明库文件

    static {
        System.loadLibrary("mylib");
    }

 

    public static native void setHttpdConf(String file);
    public static native void setUploadTempDir(String dir);
    public static native void setUseDirect(int dir);
    public static native void setTooLarge(int dir);
    public static native void setTopDir(String dir);
    public static native void setParam(String usr, String passwd, String broker);

    public static native void setAccessCallback();

 

 

    用于c语言回调的函数sendAccess

    返回值也可以被c语言获取

    public static int sendAccess(String URL) {

        return 0;
    }

 

 

java的声明的静态函数setAccessCallback调用c语言的setAccessCallback函数,c语言处理完成之后并返回调用java的sendAccess函数。

并且sendAccess函数的返回值可以被c语言获取。完成这一轮的工作。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值