Android開發實踐 在任意目錄執行NDK編譯

2021-09-21 19:35:49 字數 2787 閱讀 7600

本文暫時不講述如何用ndk編譯第三方開源**庫,而是先以簡單的例子講述如何在任意目錄把自己寫的c**編譯成android可使用的靜態庫/動態庫。

1. 準備環境

首先,你得安裝了android的ndk編譯工具,假設你的ndk的根目錄在 /opt/android/ndk .

當然,最好你能在環境變數裡配置一下路徑,否則使用ndk-build命令的時候,都得加上路徑的字首了。

修改 ~/.bashrc

1

2

exportndk_home=/opt/android/ndk

exportpath=$ndk_home:$path

然後執行: 

1

$source~/.bashrc

2. 編寫 .c 檔案

假設你在 ~/math 目錄下編寫了乙個 math.c 檔案,內容如下:

1

2

3

4

5

#include

intadd(inta ,intb )

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繪製 這裡繪製...