码迷,mamicode.com
首页 > 其他好文 > 详细

JNI实现HelloWorld1

时间:2015-04-29 13:36:52      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

1.下载NDK并解压

2.配置NDK的环境变量


3.打开eclipse,创建一个新项目,右击项目->Android tools->add Native Support...,创建一个.so文件(名字随便取)

技术分享

4.点击Finish后,我们可以看到在项目的根目录下自动生成了一个JNI文件夹,里面有两个文件Andorid.mk和HelloWorld.cpp,

Adnorid.mk是makefile文件,一般是不需要我们改的,HelloWorld.cpp,看名字就知道是c++文件,我们Java层调用c++层,c++层就指的是这里面的HelloWorld.cpp。打开HelloWorld.cpp我们看到里面除了一个#include <jni.h>头文件什么也没有。好了!

我们先讲cpp放一下,等会再来编写函数,因为在这之前我们需要先定义java层的本地方法。

5.定义本地方法

  /**
     * 声明本地方法
     * 该方法为native方法.由CPP实现
     * @return     JNI 给出的信息
     */
    public native String  getStringFromJNI();
    
    /**
     * 载入JNI生成的so库文件
     */
    static {
        System.loadLibrary("HelloWorld");
    }
声明本地方法需要注意两点:必须有native关键字,必须是抽象方法


6.编写.h文件

好了,java层的方法已经声明,现在编写c++了,在编写c++之前,我们还需要创建一个.h文件,放在JNI目录中,.h文件学过c的应该知道里面可以引入头文件,函数声明。。。那么怎么生成.h文件呢?a.javac xx.java生成xx.class文件,b.javah -jni xx 就可以生成xx.h了,如果还不知道,创建一个.h文件,将下面的代码copy进去

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

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT jstring JNICALL Java_com_example_helloworld_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz );

#ifdef __cplusplus
}
#endif
#endif
JNIEXPORT jstring JNICALL Java_com_example_helloworld_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz );是函数声明,就是你在cpp创建的函数要声明一下


7.引入.h文件

#include "HelloWorld.h",好像是自定义的.h用" ",忘掉了!接着创建函数

jstring Java_com_example_helloworld_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz ) {

	//返回一个字符串给Java层

	return (env)->NewStringUTF("HelloWorld from JNI !");

}

解释一下:jstring是返回的类型,.h声明函数的时候不要写错,函数名的编写是固定的Java_固定不变,后面是你的包名,+类名+方法名

在网上看到很多NewStringUTF出错,看了一下jni.h

    jstring NewStringUTF(const char* bytes)
    { return functions->NewStringUTF(this, bytes); }



JNI实现HelloWorld1

标签:

原文地址:http://blog.csdn.net/u012858313/article/details/45364831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!