android JNI开发基本步骤

1.编写java类,定义Native方法,这里的native方法就是后面.c文件(c/c++语言)里面要实现的方法名。示例:

public class JniClient
{
    public static native String AddStr(String strA,String strB);

    public static native int AddInt(int a,int b);
}

2.根据上面的JinClient类使用cmd命令自动生成.h文件。com_example_testndk_JniClient.h
如下内容:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_testndk_JniClient */

#ifndef _Included_com_example_testndk_JniClient
#define _Included_com_example_testndk_JniClient
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_testndk_JniClient
 * Method:    AddStr
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_testndk_JniClient_AddStr
  (JNIEnv *, jclass, jstring, jstring);

/*
 * Class:     com_example_testndk_JniClient
 * Method:    AddInt
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_example_testndk_JniClient_AddInt
  (JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

3.新建一个.c文件,实现com_example_testndk_JniClient.h里面的两个方法,这里就是JniClient类Native要调用的方法要实现的功能。
如下内容:

#include "com_example_testndk_JniClient.h"
#include <stdlib.h>
#include <stdio.h>

#ifdef __cplusplus
extern "C"
{
#endif
/*
 * Class:     com_ndk_test_JniClient
 * Method:    AddStr
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_testndk_JniClient_AddStr
  (JNIEnv *env, jclass arg, jstring instringA, jstring instringB)
{
    jstring str = (*env)->NewStringUTF(env, "HelloWorld from JNI !");
    return str;
}

/*
* Class:     com_ndk_test_JniClient
* Method:    AddInt
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_example_testndk_JniClient_AddInt
  (JNIEnv *env, jclass arg, jint a, jint b)
{
    return a + b;
}

#ifdef __cplusplus
}
#endif

4.创建Android.mk文件,内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestNdk
LOCAL_SRC_FILES := JniClient.c
include $(BUILD_SHARED_LIBRARY)

5.编译生成.so文件库

6.调用JNI方法,如下内容:

public class MainActivity extends Activity
{  

    static {
        //注意这里的“TestNdk”加载库名与本目录文件下的.so文件名一一对应,省略开头的lib和结尾的.so后缀
        System.loadLibrary("TestNdk");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
//      setContentView(R.layout.activity_main);

         //第一个方法传入的两个参数没有做操作,直接返回hello jni,不用管
        String str = JniClient.AddStr("test", "test");

        //第二个方法
        int iSum = JniClient.AddInt(10, 2);        

        TextView tv1 = new TextView(this);
        tv1.setText(iSum+"");
        setContentView(tv1);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值