當前位置:首頁 » 安卓系統 » android的ndk開發

android的ndk開發

發布時間: 2023-06-07 12:34:09

『壹』 ANDROID NDK開發求助

一、NDK產生的背景

Android平台從誕生起,就已經支持C、C++開發。眾所周知,Android的SDK基於java實現,這意味著基於Android SDK進行開發的第三方應用都必須使用Java語言。但這並不等同於「第三方應用只能使用Java」。在Android SDK首次發布時,Google就宣稱其虛擬機Dalvik支持JNI編程方式,也就是第三方應用完全可以通過JNI調用自己的C動態庫,即在Android平台上,「Java+C」的編程方式是一直都可以實現的。

不過,Google也表示,使用原生SDK編程相比Dalvik虛擬機也有一些劣勢,Android SDK文檔里,找不到任何JNI方面的幫助。即使第三方應用開發者使用JNI完成了自己的C動態鏈接庫(so)開發,但是so如何和應用程序一起打包成apk並發布?這裡面也存在技術障礙。比如程序更加復雜,兼容性難以保障,無法訪問Framework
API,Debug難度更大等。開發者需要自行斟酌使用。

於是NDK就應運而生了。NDK全稱是Native Development Kit。

NDK的發布,使「Java+C」的開發方式終於轉正,成為官方支持的開發方式。NDK將是Android平台支持C開發的開端。二、為什麼使用NDK

1.代碼的保護。由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。

2.可以方便地使用現存的開源庫。大部分現存的開源庫都是用C/C++代碼編寫的。

3.提高程序的執行效率。將要求高性能的應用邏輯使用C開發,從而提高應用程序的執行效率。

4.便於移植。用C/C++寫得庫可以方便在其他的嵌入式平台上再次使用。三、NDK簡介

1.NDK是一系列工具的集合

NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。

NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。

NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。

2.NDK提供了一份穩定、功能有限的API頭文件聲明

Google明確聲明該API是穩定的,在後續所有版本中都穩定支持當前發布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標准庫(libc)、標准數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。四、NDK開發環境的搭建

1.下載安裝Android NDK

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

2.下載安裝cygwin

由於NDK編譯代碼時必須要用到make和gcc,所以你必須先搭建一個linux環境, cygwin是一個在windows平台上運行的unix模擬環境,它對於學習unix/linux操作環境,或者從unix到windows的應用程序移植,非常有用。通過它,你就可以在不安裝linux的情況下使用NDK來編譯C、C++代碼了。下載地址:http://www.cygwin.com

1)然後雙擊運行吧,運行後你將看到安裝向導界面。

2)點擊下一步,此時讓你選擇安裝方式:

Install from
Internet:直接從Internet上下載並立即安裝(安裝完成後,下載好的安裝文件並不會被刪除,而是仍然被保留,以便下次再安裝)。

Download Without Installing:只是將安裝文件下載到本地,但暫時不安裝。

Install from Local Directory:不下載安裝文件,直接從本地某個含有安裝文件的目錄進行安裝。

3)選擇第一項,然後點擊下一步。

4)選擇要安裝的目錄,注意,最好不要放到有中文和空格的目錄里,似乎會造成安裝出問題,其它選項不用變,之後點下一步:

5)上一步是選擇安裝cygwin的目錄,這個是選擇你下載的安裝包所在的目錄,默認是你運行setup.exe的目錄,直接點下一步就可以:

6)此時你共有三種連接方式選擇:

Direct Connection:直接連接。

Use IE5 Settings:使用IE的連接參數設置進行連接。

Use HTTP/FTP Proxy:使用HTTP或FTP代理伺服器進行連接(需要輸入伺服器地址、埠號)。

用戶可根據自己的網路連接的實情情況進行選擇,一般正常情況下,均選擇第一種,也就是直接連接方式。然後再點擊「下一步」。

7)這是選擇要下載的站點,選擇後點下一步。

8)此時會下載載入安裝包列表

9)Search是可以輸入你要下載的包的名稱,能夠快速篩選出你要下載的包。那四個單選按鈕是選擇下邊樹的樣式,默認就行,不用動。View默認是Category,建議改成full顯示全部包再查,省的一些包被隱藏掉。左下角那個復選框是是否隱藏過期包,默認打鉤,不用管它就行,下邊開始下載我們要安裝的包吧,為了避免全部下載,這里列出了後面開發NDK用得著的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc-
g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12個包

10)然後開始選擇安裝這些包吧,點skip,把它變成數字版本格式,要確保Bin項變成叉號,而Src項是源碼,這個就沒必要選了。

11)下面測試一下cygwin是不是已經安裝好了。

運行cygwin,在彈出的命令行窗口輸入:cygcheck -c
cygwin命令,會列印出當前cygwin的版本和運行狀 態,如果status是ok的話,則cygwin運行正常。

然後依次輸入gcc –version,g++ --version,make –version,gdb
–version進行測試,如果都列印出版本信息和一些描述信息,則cygwin安裝成功!

3.配置 NDK 環境變數

a.首先找到 cygwin 的安裝目錄,找到一個 home\< 你的用戶名 >\.bash_profile 文件,我的是:E:\cygwin\home\Administrator\.bash_profile , ( 注意:我安裝的時候我的 home 文件夾下面什麼都沒有,解決
的辦法:首先打開環境變數,把裡面的用戶變數中的 HOME 變數刪掉,在 E:\cygwin\home 文件夾下建立名為Administrator 的文件夾(是用戶名),然後把 E:\cygwin\etc\skel\.bash_profile 拷貝到該文件夾下 ) 。

b.打開 bash_profile 文件,添加 NDK=/cygdrive/< 你的盤符 >/<android
ndk 目錄 > 例如:

NDK=/cygdrive/e/android-ndk-r5

export NDK

NDK 這個名字是隨便取的,為了方面以後使用方便,選個簡短的名字,然後保存

c.打開 cygwin ,輸入 cd
$NDK ,如果輸出上面配置的 /cygdrive/e/android-ndk-r5 信息,則表明環境變數設置成功了。4.用 NDK 來編譯程序

a.現在我們用安裝好的 NDK 來編譯一個簡單的程序吧,我們選擇 ndk 自帶的例子 hello-jni ,我的位於E:\android-ndk-r5\samples\hello-jni( 根據你具體的安裝位置而定 ) ,

b.運行 cygwin ,輸入命令 cd
/cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。

c.輸入 $NDK/ndk-build ,執行成功後,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在裡面。 ($NDK是調用我們之前配置好的環境變數, ndk-build 是調用 ndk 的編譯程序 )

d.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,你的 ndk 就運行正常啦!5.在 eclipse 中集成 c/c++ 開發環境

a.裝 Eclipse 的 C/C++ 環境插件: CDT ,這里選擇在線安裝。首先登錄 http://www.eclipse.org/cdt/downloads.php ,找到對應你 Eclipse 版本的 CDT 插件 的在線安裝地址。

b.然後點 Help 菜單,找到 Install New Software 菜單

c.點擊 Add 按鈕,把取的地址填進去,出來插件列表後,選 Select All ,然後選擇下一步即可完成安裝。

d.安裝完成後,在 eclispe 中右擊新建一個項目,如果出現了 c/c++ 項目,則表明你的 CDT 插件安裝成功啦!

『貳』 AndroidStudio怎樣使用NDK開發示例

1、新建一個Android工程,這一步就不多說了;

2、在AndroidStudio中配置NDK路徑,方法是:

(1)先下載NDK並安裝(這句基本是廢話);

(2)點菜單欄的File->ProjectStructure…->在打開的窗口中左側選中SDKLocation->在右側Android NDK Location中填入NDK目錄所在路徑

3、編譯生成.class文件,方法是:

點菜單欄的Build->Make Project

這時,在工程的app/build/intermediates下就會生成classes文件夾,打開classes目錄下的debug目錄就會看到以你的包名命名的各級文件夾,最里邊文件夾下有你的Java類對應的.class文件;

4、確定你要引用本地方法的類:

其實你也可以先生成jni目錄,再去創建這個類,但是先Google顯然建議先創建要引用C代碼的Java類,因為AndroidStudio可以根據你在java類中定義的native方法的名稱來自動生成.h頭文件。

比如你想在MainActivity中引用本地方法,那麼你先用

static {

System.loadLibrary("myNativeLib");

}

來聲明本地代碼庫,然後定義幾個natvie方法,比如

public native String getStringFromNative();

5、使用javah命令行生成jni目錄及對應的頭文件:

我用的是AndroidStudio 2.1.1,在主界面最下邊就能找到Terminal,點一下就能打開系統的命令行工具,並且已經為你自動cd到當前工程所在目錄

6、配置build.gradle文件

這里的build.gradle是指app模塊下的build.gradle,不是整個工程的build.gradle文件。在模塊的build.gradle的defaultConfig下加入以下idk配置:

ndk {

moleName"myNativeLib"

ldLibs "log", "z", "m"

abiFilters "armeabi", "armeabi-v7a", "x86"

}

7、配置local.properties文件

打開工程目錄下的local.properties,感覺這一步是自動配置的,或者說在你一開始在AndroidStudio中指定NDK目錄時已經自動生成了。我的AndroidStudio在打開local.properties已經有了

ndk.dir=/Develop/Android/android-ndk-r10e

這一行,所以就不用配了;

8、配置gradle.properties

打開工程目錄下的gradle.properties文件(注意不是build.gradle,而是gradle.properties),在文件的最後一行加入

android.useDeprecatedNdk=true

這句的作用是允許我們使用已經過時的NDK版本,不知道AndroidStudio要求使用哪個版本的NDK才不會報錯,總之只要配置了這一句就可以使用比較舊的NDK版本了,我用的r10;

至此我們在AndroidStudio中就完成了NDK環境的配置,接下來就可以寫Native代碼了;

9、寫一個.c文件測試一下是否運行正常

(1)在我們之前生成src/main/jni目錄下新建一個.c文件,方法是在jni文件夾上點滑鼠右鍵,選擇New->C/C++ Source File,然後在彈出的對話框中填入.c或.cpp文件的文件名就可以了,比如說mail.c

『叄』 如何使用ndk進行android開發

Android之NDK開發

一、NDK產生的背景

Android平台從誕生起,就已經支持C、C++開發。眾所周知,Android的SDK基於Java實現,這意味著基於
Android SDK進行開發的第三方應用都必須使用Java語言。但這並不等同於「第三方應用只能使用Java」。在Android SDK首次發布
時,Google就宣稱其虛擬機Dalvik支持JNI編程方式,也就是第三方應用完全可以通過JNI調用自己的C動態庫,即在Android平台
上,「Java+C」的編程方式是一直都可以實現的。

不過,Google也表示,使用原生SDK編程相比Dalvik虛擬機也有一些劣勢,Android SDK文檔里,找不到任何JNI方面的幫
助。即使第三方應用開發者使用JNI完成了自己的C動態鏈接庫(so)開發,但是so如何和應用程序一起打包成apk並發布?這裡面也存在技術障礙。比如
程序更加復雜,兼容性難以保障,無法訪問Framework API,Debug難度更大等。開發者需要自行斟酌使用。

於是NDK就應運而生了。NDK全稱是Native Development Kit。

NDK的發布,使「Java+C」的開發方式終於轉正,成為官方支持的開發方式。NDK將是Android平台支持C開發的開端。

二、為什麼使用NDK

1.代碼的保護。由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。

2.可以方便地使用現存的開源庫。大部分現存的開源庫都是用C/C++代碼編寫的。

3.提高程序的執行效率。將要求高性能的應用邏輯使用C開發,從而提高應用程序的執行效率。

4.便於移植。用C/C++寫得庫可以方便在其他的嵌入式平台上再次使用。

三、NDK簡介

1.NDK是一系列工具的集合

NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。

NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。

NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。

2.NDK提供了一份穩定、功能有限的API頭文件聲明

Google明確聲明該API是穩定的,在後續所有版本中都穩定支持當前發布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標准庫(libc)、標准數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。

熱點內容
行李箱的密碼鎖哪裡修 發布:2025-02-08 23:58:14 瀏覽:531
c語言字母ascii碼表 發布:2025-02-08 23:55:49 瀏覽:838
筆記本電腦一般存儲空間 發布:2025-02-08 23:51:15 瀏覽:835
php網站優化 發布:2025-02-08 23:49:41 瀏覽:455
php網頁列印 發布:2025-02-08 23:40:02 瀏覽:820
windowssmb無法訪問 發布:2025-02-08 23:33:28 瀏覽:467
python27編譯器 發布:2025-02-08 23:29:20 瀏覽:339
如何運行python代碼 發布:2025-02-08 23:28:15 瀏覽:692
新箱子密碼鎖怎麼設置 發布:2025-02-08 23:26:50 瀏覽:148
安卓如何可以看見被撤回的消息 發布:2025-02-08 23:19:17 瀏覽:798