Android开发-jni的编写

最近忙得跟孙子似的,由于业务需要,开始介入jni的研究。

说到研究还有点自惭形秽,我现在只能算是一根脚趾头步入jni开发的Android开发者,下面总结下一个简单的jni的demo,基本相当于helloworld级别的小demo。

首先配置环境,ndk下载好了,解压 或者安装。(版本尽量搞,我用的是10d)

然后打开eclipse(目前还在使用eclipse~都2016年了): Window->preferences->Android->NDK->指向NDK的路径;(有的eclipse没有这个选项,换个sdk版本试试)

然后配置环境变量: path里面加如NDK路径

然后开始写代码了:

举个我写的第一个栗子~

package com.kurt.jni;
public class KurtJni {
public native String PrintStr();
public native int PrintInt();
}

贼简单的两个方法,然后在在文件夹中切换到bin目录下的classes路径,执行javah 口令,以我的demo为例,执行的是javah com.kurt.jni.KurtJni  回车 

然后你就在classes目录下看见一个com_kurt_jni_KurtJni.h的文件copy出来,在android工程路径下新建个jni文件夹~放进去,再新建个同名的 .c文件,在c文件中实现方法:

简单的栗子:

JNIEXPORT jstring JNICALL Java_com_kurt_jni_KurtJni_PrintStr(JNIEnv *env,
jobject obj, jstring inputStr) {
return (*env)->NewStringUTF(env, "this is from Cpp");
}

JNIEXPORT jint JNICALL Java_com_kurt_jni_KurtJni_PrintInt(JNIEnv *env,
jobject obj, jint inputInt) {
int x = 1;
return x;
}

然后新建个.mk文件,编辑它:

LOCAL_PATH:= $(call my-dir)
# 一个完整模块编译
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=com_kurt_jni_KurtJni.c
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_MODULE := libKurt
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_TAGS :=optional
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

好,然后cmd 切换到  jni对应的路径下  执行  ndk-build 口令,然后 你就发现~什么也没有。

再去看libs目录下,如果编译没提示error的话,libs里已经有一个so包了

然后我们开始调用它:

在需要的时候:


然后 运行下,打印出来瞅瞅。

具体的细节咱们后面再讲(等我再搞明白点),其实思路已经很清楚了。c中实现方法,java声明方法,jni在中间拉皮条,根据mk的规定编译出so包(运行库),然后通过调用java的方法,c去执行,拿到结果然后~想干嘛就干嘛了~~先说到这吧,一起学习一起努力,我自己也才刚刚走上jni开发的不归路没几天....


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值