Android Studio 使用NDK编程

来源:互联网 发布:网络禁毒知识竞赛答案 编辑:程序博客网 时间:2024/05/17 00:10

基本步骤:
1.编写A类,生成A.class
2.生成A.h
3.编写A.cpp
4.配置生成.so
5.loadLibrary,调用native方法

Step1:编写A类,生成A.class
示例:

public class TestNdk {    public native String getStr(String str);    static {        System.loadLibrary("JniDemo");    }}

Step2.生成A.h
通过javah命令,将class文件转换成头文件
示例:

到classes根目录:javah -classpath ./ com.**.**.JNITest

头文件会在jni目录下生成
示例:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_ksmobile_launcher_custom_TestNdk */#ifndef _Included_com_ksmobile_launcher_custom_TestNdk#define _Included_com_ksmobile_launcher_custom_TestNdk#ifdef __cplusplusextern "C" {#endif/* * Class:     com_ksmobile_launcher_custom_TestNdk * Method:    getStr * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_ksmobile_launcher_custom_TestNdk_getStr  (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif

Step3.编写A.cpp

或者A.c 可以任意命名,也可以是c或者c++文件#include "com_ksmobile_launcher_custom_TestNdk.h"JNIEXPORT jstring JNICALL Java_com_ksmobile_launcher_custom_TestNdk_getStr  (JNIEnv *env, jobject obj, jstring str){    //注意(JNIEnv *, jobject, jstring)与头文件中不同    return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");}#endif

Step4.配置生成.so
build.gradle 增加生成so的名称配置,还可以增加其他配置
示例:

defaultConfig {        applicationId "com.ksmobile.launcher"        minSdkVersion 14        targetSdkVersion 17        ndk{            moduleName "JniDemo"  //设置库(so)文件名称        }    }

Step5.loadLibrary,调用native方法
其实之前写java类时已经写了,主要是这一句

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

调用

Log.d("","ndk:str:"+new TestNdk().getStr("arg str"));

Eclipse中新建Builder生成so
1.NDK方式
这里写图片描述
2.NDK+cygwin方式,NDK(r8)不需要cygwin了
这里写图片描述

工程:http://download.csdn.net/detail/ahong222/9566855

0 0