android Jni NDK開發環境搭建及其簡單實例的編寫


 android  Jni  NDK開發環境搭建及其簡單實例的編寫

                   由於工作需要,需要采用開發想要的JNI,由於之前沒有接觸過安卓的開發,所以更加網上的帖子,學習了下。遇到了些問題,然后總結下學習過程中的問題和開發流程

 

首先、Jni我的理解,屬於一個中間的東西,如果把只做linux 的話,他就是linux的應用程序,但是如果做安卓的話,它就是中間層了(用於java語言調用C語言的接口)。我們說說

開發JNI的開發環境的搭建吧。

第一:我們用windows平台開發

准備工作:

    1、我們安卓開發都需要的elipse ,包括SDK,首先要能夠開發APK軟件。

    2、 我們需要一個如同linux 的環境,需要編譯的環境,我們采用Cygwin(注意:1.7版本以上),否則不行。

    3 、我們需要NDK工具包,可以通過安卓官網下載

1.1、cygwin的安裝

下載地址:http://www.cygwin.com/

也可以選擇我下載好的地址:http://pan.baidu.com/s/1b1UQE

 

 

1.1.1、  可以選擇從網上下載最新的安裝也可以選擇我下載好的安裝

1.1.2、  雙擊cygwin1.7.1/cygwin1.7.1.exe  選擇Install form LocalDirectory

1.1.3、  選擇安裝的路徑

1.1.4、  選擇的下載之后的路徑tmp

1.1.5、  點擊下一步直到安裝完成。

1.1.6、雙擊桌面的圖標,看是否能夠進去。有沒有問題(輸入gcc 等命令)。

 

 

1.2、Android的NDK安裝

下載地址:http://developer.android.com/tools/sdk/ndk/index.html

1.2.1、將android-ndk-r9b-windows-x86.zip解壓到任意目錄(記住即可)

如:E:\android\android-ndk-r9b

1.2.2、設置環境變量(有的方法是通過/home/.bashrc設置的也可以),我就直接設置。右鍵點擊我的電腦-屬性(選擇高級選項卡,點擊環境變量設置),然后選擇新建

 

1.2.3、重新關掉cygwin,然后打開,輸入ehco$ndk 看是否顯示E:\android\android-ndk-r9b目錄,如果可以則設置成功

1.2.4、編譯一個簡單的實例 如下圖,如果生成*.so 就說明沒有問題。

第二:安卓JNI實例說明

 

1、  用eclips 新建一個android 工程

2、  修改Activity

2.1 加入:

static {

        //注意你生成的庫文件名稱(如libhellojni.so,去掉lib.so即可。

       System.loadLibrary("hellojni");

      

    }

2.2加入:

    /*

     * JNI中的方法

     * */

    public static native int open(int fd);

    public static native int close(int fd);

    public static native String read();

2.3 添加一個按鈕:在onCreate方法中

       Button tb=(Button)findViewById(R.id.button1);

          tb.setOnClickListener(new OnClickListener() {

           public void onClick(View v) {

                 /*調用Jni

                  */

              open(2); 

              close(2);

              tv.setText(read());//修改文本框中的內容

           }});

 

3、  通過javah生成.h文件(用於編譯jni的程序)

3.1 切換到項目目錄

#cd "C:\Documents and Settings\gonglinyuan\workspace\HelloJni"

#cd ./bin/class

3.2 執行java –h命令

#javah -jni com.cem.hellojni.HelloActivity

4、  編寫jni代碼

4.1、在工程目錄中建立jni文件夾

#mkdir jni

#cp  ./bin/class/com_cem_hellojni_HelloActivity.h ./jni

4.2、刷新eclipse的目錄,新建com_cem_hellojni_HelloActivity.c 文件,實現頭文件中的代碼,如下面代碼

#include <string.h>

#include <jni.h>

 

#include "android/log.h"

#include "com_cem_hellojni_HelloActivity.h"

 

 

static const char *TAG="Hello_module";

char buf[]="icegoly";

 

#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO,  TAG, fmt,##args)

#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt,##args)

#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt,##args)

 

 

JNIEXPORT jint JNICALL Java_com_cem_hellojni_HelloActivity_open

  (JNIEnv *env, jclass jc, jint fd)

{

 

    LOGD("Jni open ing\n");

    return 0;

 

}

JNIEXPORT jint JNICALL Java_com_cem_hellojni_HelloActivity_close

  (JNIEnv *env, jclass jc , jint fd)

{

 

    LOGD("Jni Close ing\n");

 

}

 

JNIEXPORT jstring JNICALL Java_com_cem_hellojni_HelloActivity_read

  (JNIEnv *env , jclass jc)

{

 

    LOGD("Jni Read ing\n");

    //當時直接返回一個字符串失敗,應該轉換一下,APK上層才能夠識別

    return (*env)->NewStringUTF(env,(char*)buf);

 

}

 

 

 

 

5、  編寫Android.mk

LOCAL_PATH :$(call my-dir)

 

include $(CLEAR_VARS)

 

TARGET_PLATFORM := android-4

LOCAL_MODULE    := hellojni

LOCAL_SRC_FILES := com_cem_hellojni_HelloActivity.c

LOCAL_LDLIBS    := -llog

 

include $(BUILD_SHARED_LIBRARY)

 

6、  編寫Application.mk

APP_ABI := armeabi armeabi-v7a x86

 

7、  通過ndk-bulid編譯生成庫文件

# cd "C:\Documents and Settings\gonglinyuan\workspace\HelloJni"

#$ndk/ ndk-build

Android NDK: WARNING: APP_PLATFORM android-17 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml

[armeabi] Compile thumb  : hellojni <= com_cem_hellojni_HelloActivity.c

[armeabi] SharedLibrary  : libhellojni.so

[armeabi] Install        : libhellojni.so => libs/armeabi/libhellojni.so

[armeabi-v7a] Compile thumb  : hellojni <= com_cem_hellojni_HelloActivity.c

[armeabi-v7a] SharedLibrary  : libhellojni.so

[armeabi-v7a] Install        : libhellojni.so => libs/armeabi-v7a/libhellojni.so

[x86] Compile        : hellojni <= com_cem_hellojni_HelloActivity.c

[x86] SharedLibrary  : libhellojni.so

[x86] Install        : libhellojni.so => libs/x86/libhellojni.so

 

 

8、  生成APK文件,測試

最終實例代碼下載地址:http://files.cnblogs.com/android100/HelloJni.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM