本文暫時不講述如何用ndk編譯第三方開源**庫,而是先以簡單的例子講述如何在任意目錄把自己寫的c**編譯成android可使用的靜態庫/動態庫。
1. 準備環境
首先,你得安裝了android的ndk編譯工具,假設你的ndk的根目錄在 /opt/android/ndk .
當然,最好你能在環境變數裡配置一下路徑,否則使用ndk-build命令的時候,都得加上路徑的字首了。
修改 ~/.bashrc
1
2
export
ndk_home=
/opt/android/ndk
export
path=$ndk_home:$path
然後執行:
1
$
source
~/.bashrc
2. 編寫 .c 檔案
假設你在 ~/math 目錄下編寫了乙個 math.c 檔案,內容如下:
1
2
3
4
5
#include
int
add(
int
a ,
int
b )
ok,後面我們就準備在 ~/math 目錄下,將這個.c檔案編譯為android可使用的靜態庫/動態庫了。
3. 編譯成動態庫
編寫 android.mk 檔案,內容如下:
1
2
3
4
5
6
local_path := $(call my-
dir
)
include $(clear_vars)
local_module := dmath
local_src_files := math.c
include $(build_shared_library)
在 ~/math 目錄下,執行 ndk-build 命令,引數如下:
1
/android
.mk
執行完ndk-build命令後,你會發現當前目錄下,生成了 obj 和 libs 資料夾,這樣,你的libdmath.so動態庫就已經製作完成了,在 libs/armeabi 目錄下。
4. 編譯為靜態庫
編譯為靜態庫,與編譯為動態庫唯一的區別就是 android.mk 檔案的寫法不同,另外,如果要編譯為靜態庫,則必須有其他的**引用該靜態庫**,ndk-build才會真正執行,否則無法成功生成靜態庫,這裡,我們編寫乙個 android.mk ,將 math.c 同時編譯成靜態庫和動態庫。
1
2
3
4
5
6
7
8
9
10
11
12
local_path := $(call my-
dir
)
include $(clear_vars)
local_module := smath
local_src_files := math.c
include $(build_static_library)
include $(clear_vars)
local_module := dmath
local_static_libraries := smath
local_src_files := math.c
include $(build_shared_library)
同樣,在 ~/math 目錄下執行:
1
/android
.mk
你會在生成的 libs/armeabi 目錄下看到動態庫libdmath.so,在 obj/local/armeabi 目錄下看到靜態庫 libsmath.a
關於在任意目錄將c/c++**編譯為android可使用的靜態庫/動態庫就介紹到這裡了,了解了這個編譯過程,對你將來用ndk編譯第三方庫會很有幫助,另外,如果希望編譯為c/c++應用程式在android機器上執行的話,只需要在**中加乙個main函式,修改android.mk中的最後一行為 include $(build_executable) 即可。
Android測試驅動開發實踐
在android應用開發中,相信很少有人在堅持先由設計人員做完整的概要設計 詳細設計,然後交給程式設計師進行編碼實現了。通常是在有乙個大體框架的情況下,就開始進行具體編碼開發了。在這種情形下,開發速度可以有很大的提高,但是最終 質量卻不可避免的降低了。如何能既保持開發速度,同時又能保證開發質量呢?相...
Svn使用實踐 android開發
a svn 分為主幹和分支。主幹用途 常規的 提交了,主要是新功能的提交。分支 分為發布分支,實驗性分支。發布分支用途 乙個版本到開發後期,新需求已不能提交到發布分支上。只能用於修復bug。而敏捷開發中,新功能的開發和bug 的修復通常是同期進行的。b 提交細則 乙個版本的開發主要有以下過程 一 新...
Android 專案實踐(一) 開發流程
應用的需求設計大體上可以分為三個階段 階段一 應用基本需求設計。首先確定我們應用的功能 該應用是幹什麼的,面向的客戶是哪些,包含哪些功能,客戶如何使用等。階段二 應用的草圖設計。在確定應用的各項功能之後,我們需要確定應用基本的介面設計。應用每個介面的草圖設計。前期草圖一般使用axure繪製 這裡繪製...