Android.mk、CMake、Gradle簡介 NDK和JNI的關係

原文地址:http://hubingforever.blog.163.com/blog/static/171040579201152185542166/java

android.mk文件是GNU makefile的一小部分,它用來對android程序進行編譯。由於全部的編譯文件都在同一個GNU MAKE執行環境中進行執行,而android.mk中全部的變量都是全局的。所以,您應儘可能少聲明變量,不要認爲某些變量在解析過程當中不會被定義。android

一個android.mk能夠編譯多個模塊,每一個模塊屬下列類型之一:apk  java  c++應用程序   c++靜態庫  c++共享庫c++

 

CMake是一個跨平臺的安裝(編譯)工具,能夠用簡單的語句來描述全部平臺的安裝(編譯過程)。能輸出各類各樣的makefile和project文件,能測試編譯器所支持的C++特性,類型UNIX下的automake。編程

CMake能夠編譯源代碼、製做程序庫、產生適配器、還能夠用任意的順序建構執行檔。也支持靜態和動態程式庫的建構。maven

CMake常見指令總結,可參閱博文:http://blog.csdn.net/u012839187/article/details/45790491工具

ADD_LIBRARY(hello SHARED${LIBHELLO_SRC})生成動態靜態庫測試

SET_TARGET_PROPERTIES爲一個目標設置屬性。該命令的語法是列出全部你想要變動的文件,而後提供你想要設置的值。你可以使用任何你想要的屬性/值對,而且在隨後的代碼中調用GET_TARGET_PROPERTY命令取出屬性的值。gradle

include_directories添加頭文件目錄.net

link_directories添加須要連接的庫文件目錄(用於多個第三方庫)blog

target_include_directories 向target中添加頭文件目錄

 

 

gradle在語法上是基於groovy語言的,在項目管理上是基於ant和maven概念的項目自動化建構工具

關於gradle的博文:http://www.jianshu.com/p/001abe1d8e95

 

NDK與JNI的關係   http://blog.csdn.net/banketree/article/details/12167145

JNI是java語言提供的java和c相互溝通的機制,java可經過jni調用本地c++代碼。jni是本地編程接口。NDK是一系列工具的集合,它提供了一系列的工具,幫助開發者快速開發c的動態庫,並能自動將so和java應用一塊兒打包成apk。

java經過jni機制和c++溝通的具體步驟:

1編寫包含native本地方法的java類

2經過javah工具生成c++的頭文件

3使用c++實現頭文件

4使用交叉編譯工具對c++本地代碼進行編譯,最後經過連接生成so可執行的c++庫

5實際執行java代碼去和本地的c++代碼溝通

相關文章
相關標籤/搜索