您的位置:首页 > 移动开发 > Android开发

Android Studio 使用NDK编程

2015-08-25 16:01 337 查看
基本步骤:

1.编写A类,生成A.class

2.生成A.h

3.编写A.cpp

4.配置生成.so

5.loadLibrary,调用native方法

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

示例:

[code]public class TestNdk {

    public native String getStr(String str);

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

}


Step2.生成A.h

通过javah命令,将class文件转换成头文件

示例:

[code]D:\workspace_studio\dev_launcher_bugfix\launcher\src\main>javah -d jni -classpat
h D:\androidsdk\platforms\android-21\android.jar;..\..\build\intermediates\class
es\debug com.ksmobile.launcher.custom.TestNdk


头文件会在jni目录下生成

示例:

[code]/* 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 __cplusplus
extern "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

[code]/* 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 __cplusplus
extern "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


Step4.配置生成.so

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

示例:

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


Step5.loadLibrary,调用native方法

其实之前写java类时已经写了,主要是这一句

[code]static {
        System.loadLibrary("JniDemo");
    }


调用

[code]Log.d("","ndk:str:"+new TestNdk().getStr("arg str"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: