Android Studio 使用NDK编程

基本步骤:
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 __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

或者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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值