[android學習筆記]學習jni編程

來源:互聯網
上載者:User

由於筆者一直從事c++的開發,因此轉移到android平台時不免需要使用jni的模式進行開發。

本人使用的ndk版本為r5b,該目錄下面內建了一個hello-jni的sample程式,在匯入該project到eclipse的時候破費周折,

按照網上教程均無法奏效,後來查閱官方文檔,才順利完成匯入,編譯。

(eclipse + ndk + cygwin平台的搭建請參閱該文檔:windows系統整合cygwin與Eclipse與使用Android NDK r5(支援OpenglES),整合(轉)
)

官方文檔:

In Eclipse:

  1. Click File > New Android Project...
  2. Select the Create project from existing source
    radio button.
  3. Select any API level above Android 1.5.
  4. In the Location
    field, click Browse...
    and select
    the <ndk-root>/samples/hello-jni
    directory.
  5. Click Finish
    .

之後就可以編譯了。

如果想自己建一個jni工程也很簡單,建立一個新的android工程,然後在工程目錄下面手動建立一個"jni"目錄(與src目錄平級),然後在該目錄下面建立一個Android.mk(android的makefile)和你的c檔案或者cpp檔案,在函式宣告和調用方面可以參照sample程式hello-jni,特別注意的是函數名字需要遵循"Java_packetname_projectname_functionname"的規則,否則運行期間會報連結錯誤。

 

編寫c或者c++程式時的一個小的注意事項:

1.c代碼,如執行個體中那樣使用env參數,(*env)->NewStringUTF(env, "Hello from JNI!");

2.c++代碼,需要這樣調用 env->NewStringUTF("Hello from JNI!");

原因在於jni.h中對JNIEnv的聲明針對c和c++是不同的,如下:

#if defined(__cplusplus)

typedef _JNIEnv JNIEnv;

#else

typedef const struct JNINativeInterface* JNIEnv;

#endif

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.