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