Android关于JNI开发(1)-----eclipse工具开发

一、JNI简介

JNI全称为Java Native Interface(JAVA本地调用)。从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C++)进行交互。并非从Android发布才引入JNI的概念的。


二、JNI与NDK

        简单来说,Android的NDK提供了一些交叉编译工具链和Android自带的库,这些Android的库可以让开发者在编写本地语言的程序时调用。而NDK提供的交叉编译工具链就对已经编写好的C&C++代码进行编译,生成库。

        当然了,你也可以自己搭建交叉编译环境,而不用NDK的工具和库。然后生成库,只要规范操作,一样可以生成能让JAVA层成功调用的库文件的。


三、开发步骤

        理论性的东西太多,百度都可以查得到,我这里就将一些使用的,具体的操作步骤。按照这个步骤来做,一定可以写成功。我们常用的开发工具有两种,eclipse和As我们这里分别来介绍。

       本篇主要介绍eclipse的用法,已经出现的一些常见的错误及解决办法。

      1,在官网上下载ndk,直接解压。

      2,配置ndk:window->prferences->Android ->NDK->选择ndk的路径

             

   3,在java代码中声明在c中要调用的函数。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText(getString());        
    }
    //声明调用JNI库的函数且前面添加native关键字
    public native String getString();     
}

     4,进入D:\Android\JniDemo\src,然后按住shift键,点鼠标右键,然后选择”在此次打开命令窗口“,然后进入doc命令的界面,      然后输入命令javah com.example.jnidemo.MainActivity如果没有错误,则会在D:\Android\JniDemo\src下生成一个文件           com_example_jnidemo_MainActivity.h,然后在程序中按f5刷新,在com.example.jnidemo下出现                    com_example_jnidemo_MainActivity.h文件。

         

5,选中项目,点击反键->Android Tools->Add Native support,然后给你的.so文件取一个名字,然后finish.(如果finish是灰色的,       不可以点,那就检查ndk配置是否正确)

       

6 然后在项目的根目录下会产生一个文件夹jni,里面有两个文件Android.mk和JniDemo.cpp,将JniDemo.cpp文件名修改成JniDemo.c,然后点开Android.mk将里面的JniDemo.cpp改为JniDemo.c


7,将第4部生成的 com_example_jnidemo_MainActivity.h转移到jni文件夹中。然后打开.h文件夹,将里面的方法复制到JniDemo.c文件夹中,然后补全参数和要实现的逻辑代码。在.c中加入导入文件的代码。



com_example_jnidemo_MainActivity.h

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

#ifndef _Included_com_example_jnidemo_MainActivity
#define _Included_com_example_jnidemo_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_jnidemo_MainActivity
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_jnidemo_MainActivity_getString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
JniDemo.c

#include <stdio.h>
#include <stdlib.h>
#include "com_example_jnidemo_MainActivity.h"

JNIEXPORT jstring JNICALL Java_com_example_jnidemo_MainActivity_getString
  (JNIEnv * env, jobject job){

	return (*env)->NewStringUTF(env, "hello2222");
}
关联ndk(如果.c文件或者.h文件报错,暂时不要管),一下ndk:选中项目,右键->properties->c/c++ General->Includes->Add->file System -> 选中ndk中include所在的目录D:\BaiduYunDownload\android-ndk32-r10-windows-x86\android-ndk-r10\platforms\android-9\arch-arm\usr\include->ok->apply->ok。此时重新报错.c文件和.h文件,如果还报错,则clear一下。

8在java中使用System.loadLibrary()函数来引用JNI库,调用native函数。

public class MainActivity extends Activity {
	{
		System.loadLibrary("JniDemo");
	}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText(getString());        
    }
    //声明调用JNI库的函数且前面添加native关键字
    public native String getString();     
}
       用eclipse开发的基本步骤就是这些了,需要的朋友可以下载一下源码:源码

      下一篇博客将介绍怎么用Android Studio开发jni :Android关于JNI开发(2)-----Android Studio工具开发






2、
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章