Eclipse下用NDK編譯產生so檔案

來源:互聯網
上載者:User

標籤:android   style   io   ar   color   使用   sp   java   檔案   

 我們在安裝環境的時候安裝了NDK,可以在eclipse下直接產生so檔案。NDK的壓縮包裡面內建了一些sample工程,NDK的檔案直接解壓到某個目錄下即可。

第一次產生so檔案的時候,我們先使用NDK的sample下的hello-jni的例子。

1、啟動eclipse,通過Create project  from existing source,選擇hello-jni的目錄,按預設選項建立工程即可;

2、觀察hello-jni的工程目錄結構,發現根目錄下多了一個名叫jni的檔案夾,該檔案夾下面有兩個檔案,Android.mk和hello-jni.c。

     Android.mk是用來產生so檔案的設定檔,我們來看看裡面是什麼:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

include $(BUILD_SHARED_LIBRARY)表示會產生一個動態連結程式庫,即so檔案,產生的庫檔案名稱為lib*.so

LOCAL_MODULE    := hello-jni表示將要產生一個名稱為libhello-jni.so的庫檔案

LOCAL_SRC_FILES := hello-jni.c表示產生庫檔案的源檔案是hello-jni.c

    開啟hello-jni.c檔案,會看到裡面有一個函數:

jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

這個函數從根據什麼原則產生的呢?是根據src下的HelloJni.java檔案中的函數 public native String  stringFromJNI();產生的。命名規則為:

Java_(固定開頭)com_example_hellojni(用"_"串連的包名)_HelloJni(類名)_stringFromJNI(函數名)

    這個函數的產生可以使用javah的命令:用命令列方式進入工程目錄的bin\classes目錄下,運行javah com.example.hellojni.HelloJni,就會把所有native的函數都按規則產生在一個名為HelloJni.h的標頭檔裡。

3、建立並配置一個新的Builder

    1) 點擊Project->Properties->Builders->New,建立立一個Builder。在彈出的對話方塊上面點擊Program,點擊OK;

    2) 在彈出的對話方塊【Edit Configuration】中,配置選項卡【Main】:

               Location中需要填入nkd-build.cmd的路徑(NDK安裝目錄下)。

               WorkingDiretcoty中需要填入HelloJni的工程根目錄。

    3) 在【EditConfiguration】中,配置選項卡【Refresh】:

              勾選“Refresh resources upon completion”,

              勾選“The entire workspace”,

              勾選“Recuresively include sub-folders”。

    4)在【EditConfiguration】中,配置選項卡【Build Options】:

             勾選“After a “Clean””,

             勾選“During manual builds”,

             勾選“During auto builds”,

             勾選“Specify working set of relevant resources”。

             點擊“Specify Resources…”勾選TestNDK工程的“jni“目錄,Finish!

      儲存設定,點擊OK。

4、產生so檔案

     由於我們勾選了“During auto builds”,所以在工程有所改變的時候,so檔案便會自動編譯,正確產生以後就能在工程目錄下發現多了兩個檔案夾,檔案夾libs\armeabi目錄下產生了一個叫libhello-jni.so的檔案。至此,使用NDK產生so檔案的工作就完成了。

5、so檔案的調用

      在HelloJni.java檔案中有一段代碼:

    static {
        System.loadLibrary("hello-jni");
    }

    使用loadLibrary就可以載入該so檔案了,載入的時候不需要寫libhello-jni.so,只要寫hello-jni就可以了。

Eclipse下用NDK編譯產生so檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.