Android_JNI的一个实例

参考资料:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0415/1166.html

第一步:创建一个AndroidJniTest的Android工程,默认会生成MainActivity.java文件,在该目录下新建新类TestJNI.java。如下图:

第二步:编写TestJNI.java,代码如下:

package com.example.demo;
public class TestJNI {
	static{
		System.loadLibrary("jniinterface");
	}	
	public static native int getInt();
	public static native String getString();
}


第三步:使用cmd命令使生成C++的.h头文件:

第四步:拷贝生成的.h头文件。

      使用第三部的命令后,后发现在目录F:\program2\AndroidJniTest\bin\classes下生成了com_example_demo_TestJNI.h文件。在工程中新建文件夹jni,将上面的.h头文件拷贝到jni文件夹下。

第五步:编写C++代码和android.mk文件

  1 编写C++代码。将.h头文件里生成的函数复制到.cpp文件下,实现其函数:

#include"com_example_demo_TestJNI.h"//包含刚生成的头文件
#include<stdio.h>
#include<stdlib.h>
int sum()
{
	int x,y;
	x = 100;
	y = 1000;
	x += y;
	return x;
}
JNIEXPORT jint JNICALL Java_com_example_demo_TestJNI_getInt
  (JNIEnv *, jclass)//复制头文件生成的函数,实现该函数
{
	return sum();
}
JNIEXPORT jstring JNICALL Java_com_example_demo_TestJNI_getString
  (JNIEnv *env, jclass)//此处的env参数头文件没有
{
	return env->NewStringUTF("HelloNDK");
}

  2 编写android.mk文件。android.mk可以直接从NDK的samples里例子的jni目录下直接拷过来改一下。代码如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := jniinterface
LOCAL_SRC_FILES := com_example_demo_TestJNI.cpp

include $(BUILD_SHARED_LIBRARY)

其中你只需要该LOCAL_MODULE和LOCAL_SRC_FILES就可以了。
说明:LOCAL_MODULE是描述模块的,用来给java调用的模块名,会生成对应的libtestJni.so
        LOCAL_SRC_FILES就是源文件啦,多个文件空格隔开即可。
接下来,我们要开始编译生成so文件咯。

第六步:编译生成.so文件。

编译生成 .so文件后工程如下:

第七步:用Android调用JNI

package com.example.demo;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tv = (TextView)findViewById(R.id.name);
		tv.setText(String.valueOf(TestJNI.getInt()+", "+TestJNI.getString()));
	}
}

     运行程序如下:

程序代码:http://download.youkuaiyun.com/detail/yegucheng2618/7613475

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值