天天看點

完全的安卓初學者的NDK開發——幾點注意

到目前為止我還是不明白Android裡面的東西是個怎麼回事,因為我還沒有看過一點關于Android内部實作的東西。Java也不是很熟悉,也隻會用它寫個HelloWorld。之前就試着寫過一個HelloAndroid。對于SDK和NDK這兩個環境有什麼關系也不甚了解,要在這樣的情況下寫NDK的代碼沒有其他辦法,隻有看教程,跟着抄代碼。Android的java代碼跟本地C++和C代碼配合其實還是有許多細節的問題要注意的。這兩部分要結合需要Java代碼,C/C++代碼和Android.mk檔案,這三個檔案都需要規範。

1、注意代碼編譯的順序,一般先編譯C/C++代碼到.so庫裡然後在Java代碼完成時就可以使用最新的本地代碼了。

2、注意java路徑的設定問題,在NDK中的方法要在函數前添加這個路徑作為字首,比如Java_com_example_SpotifyWidget_stringFromJNI其實在java代碼裡面就是stringFromJNI,而前面一段是Java類的所在,記得首字母要大寫哦。

3、在android.mk檔案裡面寫錯了一些标記,導緻本地代碼編譯時檔案無法加載,編譯出來一個空的庫,找不到方法。比如添加本地代碼檔案LOCAL_SRC_FILES寫錯了,那所有的c/c++代碼檔案都找不到了,可是NDK還是可以給你編出一個.os檔案,然後放到Android工程裡面報警 DalvikJVM No Implementation of native method***或者java.lang.UnsatisfiedLinkError: Native method not found這樣無厘頭錯誤。

4、中文字元報錯問題Java預設使用的是UTF-8字元編碼的檔案,包含中文的C代碼檔案使用的字元編碼是GBK這是Eclipse預設的字元編碼方式,可以在檔案的屬性中看到并對其進行修改。如下:

完全的安卓初學者的NDK開發——幾點注意

修改後的效果如圖所示:

完全的安卓初學者的NDK開發——幾點注意

如果沒有進行字元編碼的修改在程式啟動時就會報錯logcat的資訊欄中顯示Fatal error ,Tag 顯示libc,也就是C标準庫的錯誤。

希望這幾點可以對那些像我一樣粗心又不了解NDK的人有用。