Android NDK開發技巧一

來源:互聯網
上載者:User

平時我們開發Android應用時可能部分要求由於效能問題需要使用NDK來實現,比如OpenGL、OpenCore這樣的多媒體應用,使用本地
C/C++語言可以處理一些效能敏感或複雜的演算法,Android123就我們日常NDK開發中遇到的問題以及技巧逐一總結方便網友查閱。

     1. Android NDK編譯的應用可以運行在Android 1.5或更高的作業系統上,在Android平台中本地調用主要通過JNI方式處理,JNI調用開銷不小如果很簡單的操作沒有必要畫蛇添足。

     2. 一般NDK產生的so檔案如何打包到apk中去呢?一般工程目錄下建立一個libs檔案夾,當然了手動釋放也可以比如說 data/data/cn.com.android123.cwj/files/rmvb-decoder.so

     3. 在JNI下面,我們常用的命名方式:

    static JavaVM *g_VM;   //全域環境指標

    static jclass jNativesClass;

  (*env)->GetJavaVM(env, &g_VM);   //擷取env環境指標,這樣以後用g_VM就可以了。

     4.   jobjectArray jargv // java數組

int getArrayLen(JNIEnv * env, jobjectArray jarray): //擷取一個Java數組長度,返回為jsize類型

jstring jele = (jstring)(*env)->GetObjectArrayElement(env, jargv, n);  //從將Java數組元素n轉為本地的jstring
const char *word = (*env)->GetStringUTFChars(env, jele, 0); //將java的utf字元轉為c下面的char*

   5.  記住釋放記憶體,這不是java

  (*env)->ReleaseStringUTFChars(env, jele, word); 

   6. 有關Java類命名方式

    (Ljava/lang/String;I)V   其中本句

 I = Integer
B = Byte
S = Short
C = Char
LXXX; = L加上類名

  7. JNI本身沒有什麼技術含量,Android123提醒大家,會C語言的網友只需要知道Java和C/C++中如何通過JNI相互傳輸資料即可。

  8. JNI和Java如何傳遞大型資料呢,其實變通的方法可以通過共用一個檔案方式處理一些大型資料。

相關文章

聯繫我們

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