`
jxw3042
  • 浏览: 19287 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

NDK 学习笔记

阅读更多
1,创建jni的java类自动生成jni头文件
a)新建Jni接口类
package com.bb_sz.skyjni.jni;

/**
 * Created by Administrator on 2016/7/7.
 */
public class JniInterface {
    static {
        System.loadLibrary("JniTest");
    }

    public native String getStringFromNative();
}

b)在终端执行命令:
javah -d D:\Android\Client\SkyJni\app\src\main\jni -classpath D:\Android\sdk\platforms\android-19\android.jar;D:\Android\Client
\SkyJni\app\build\intermediates\classes\debug com.bb_sz.skyjni.jni.JniInterface


c)生成了com_bb_sz_skyjni_jni_JniInterface.h头文件
d)javah的用法:
D:\Android\Client\SkyJni>javah -help
用法:
  javah [options] <classes>
其中, [options] 包括:
  -o <file>                输出文件 (只能使用 -d 或 -o 之一)
  -d <dir>                 输出目录
  -v  -verbose             启用详细输出
  -h  --help  -?           输出此消息
  -version                 输出版本信息
  -jni                     生成 JNI 样式的标头文件 (默认值)
  -force                   始终写入输出文件
  -classpath <path>        从中加载类的路径
  -bootclasspath <path>    从中加载引导类的路径
<classes> 是使用其全限定名称指定的
(例如, java.lang.Object)。

2,在jni目录下新建JniInterface.c文件
a)实现代码
//
// Created by Administrator on 2016/7/7.
//
#include <jni.h>
#include <android/log.h>

#ifndef LOG_TAG
#define LOG_TAG "ANDROID_LAB"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#endif


#ifdef __cplusplus
extern "C" {
#endif


JNIEXPORT jstring JNICALL Java_com_bb_1sz_skyjni_jni_JniInterface_getStringFromNative
        (JNIEnv * env, jobject jObj){
//    LOGE("log string from ndk.");
    return (*env)->NewStringUTF(env,"Hello From JNI!");
}

#ifdef __cplusplus
}
#ifdef __cplusplus
}
#endif
#endif

b)Ctrl +F9执行Make Project命令
c)在app\build\intermediates\ndk目录下找到Android.mk文件
d)拷贝Android.mk文件到jni目录下
e)在jni目录下执行ndk-build生成.so库
f)将.so库拷贝到Android项目中去.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics