NDK構建

Android.mk

Android.mk把你的源碼組織成「模塊」(靜態庫/動態庫)。默認狀況會讀取project/jni/Android.mk,並會讀取project/jni/Application.mk做爲可選選項。android

你能夠在單個Android.mk文件中定義多個模塊,或者你能夠書寫多個Android.mk文件,每一個文件定義一個單一模塊。架構

若是你想在子目錄中定義Android.mk文件 include $(call all-subdir-makefiles)。app

注意,一個Android.mk文件可能被構建系統分析多遍,因此不要假設某個變量沒有被定義。默認下,NDK將尋找下面的構建腳本:函數

$PROJECT/jni/Android.mk

若是你想在子路徑下定義Android.mk文件,你應該在頂層的Android.mk中包含它們。有個函數能夠作到這個功能:測試

include$(call all-subdir-makefiles)

這將會包含當前構建路徑的全部子路徑下的Android.mk文件們。優化

Application.mk

這個文件主要包含:ui

  • 你的應用所須要模塊的準確列表。spa

  • 產生的機器碼所對應的CPU架構。命令行

  • 可選的信息,像你要構建release仍是debug,特殊的C或 C++編譯參數以及其它須要應用到全部模塊的構建選項。debug

這個文件是可選的:默認狀況下,NDK將構建在Android.mk中列出的全部模塊的而且默認面向CPUABI (armeabi).

將它放在$PROJECT/jni/Application.mk位置,那麼它會被’ndk-build’腳本自動使用。

Application.mk

它描述哪一個原聲模塊是個人應用程序所須要的。例如描述添加STL的支持APP_STL := stlport_static。

它部分的變量:

APP_PROJECT_PATH  # 應用程序工程根目錄的絕對路徑
APP_MODULES       # 應用程序工程用到的模塊
APP_OPTIM         # 優化級別release或者debug
APP_CFLAGS        # C編譯器開關集合
APP_CPPFLAGS      # C++編譯器開關集合
APP_BUILD_SCRIPT  # NDK構建系統腳本即Android.mk位置
APP_ABI := armeabi armeabi-v7a  # 爲了支持基於ARMv5TE和ARMv7設備的軟件浮點單元指令
APP_STL := system            # 默認的C++運行時庫
APP_STL := stlport_shared    # 動態STLport庫
APP_STL := stlport_static    # 靜態STLport庫

這裏的APP_OPTIM := debug和ndk-build NDK_DEBUG=1是等效的,
APP_OPTIM := release和NDK_DEBUG=0是等效的。

ndk-build組件

它是個很小的腳本在目錄NDK_ROOT/ndk-build下,用於構建NDK庫。用法很簡單

cd <project>
<ndk_root>/ndk-build # 若是將ndk_root配置到環境變量就直接使用ndk-build

它將中間文件生成到obj/下,目標文件生成到libs/下。

ndk-build              # 編譯
ndk-build clean        # 清掉二進制文件
ndk-build NDK_DEBUG=1  # 編譯爲可調試版的二進制文件
ndk-build NDK_DEBUG=0  # 編譯爲release版
ndk-build V=1          # 執行ndk-build且打印出它所執行的詳細編譯命令。
ndk-build -B           # 強制從新編譯
ndk-build -B V=1       # -B 和 V=1 的組合
ndk-build NDK_LOG=1    # 打印出內部的NDK日誌信息(用於調試NDK本身)
ndk-build NDK_APP_APPLICATION_MK=<文件路徑> # 用這裏指定的路徑尋找Application.mk文件
ndk-build -C <project路徑>  # 先cd進入<project路徑>,而後執行ndk-build

ndk-gdb組件

使用NDK/ndk-gdb啓用native調試(ndk-build時要家參數NDK_DEBUG=1)

ndk-build NDK_DEBUG=1  # 帶調試信息編譯
ant debug && adb install -r bin/xxx.apk  # 打包和安裝
ndk-gdb --start        # 啓動調試信息

附:

使用命令行建立項目

  1. SDK根目錄下執行 tools/android list targets

  2. 執行建立命令:

android create project --target <target-id> --name MyFirstApp --path <path-to-workspace>/MyFirstApp --activity MyActivity --package com.example.myfirstapp
# <target-id>爲第一步裏展現的。

使用ant命令行打包

首先確保安裝了ANT到環境,加入ANT_ROOT/bin到環境變量

android update project --name <project name> --target <target_id> --path <path_for_project>
# 這樣就會產生build.xml, local.properties兩文件。
# 若是添加了第三方包,須要添加--subprojects參數

ant debug # 打包一個測試apk  默認使用debug key簽名
ant release # 生成一個未簽名和未aligned的apk(工程添加簽名規則後會生成已簽名apk)

adb install -r ./bin/XXX.apk  # adb 安裝
相關文章
相關標籤/搜索