我想建立一個靜態庫,使用最新的Android NDK(r5),我沒有任何運氣。我已經能夠毫無問題地構建和運行示例(例如HelloJni),但從「從頭開始」開始一個新項目已經是另一回事了。如何爲NDK靜態庫編寫/調試Android.mk?
對於這個實驗,我試圖構建libpng。我的文件夾結構如下所示:
root
|
+--- jni
|
+---- Android.mk (one line: "include $(call all-subdir-makefiles)")
|
+---- png
|
+---- Android.mk (see below)
|
+---- { a bunch of .c and .h files)
所以我有兩個Android.mks。一個用於構建所有子項目,另一個用於libpng子項目。根/ JNI/PNG/Android.mk是這樣的:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := png
MODULE_PATH := $LOCAL_PATH
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.c)
LOCAL_C_INCLUDES := $(wildcard $(LOCAL_PATH)/*.h)
LOCAL_INTERMEDIATE_TARGETS += junk
junk:
echo $(LOCAL_SRC_FILES)
include $(BUILD_STATIC_LIBRARY)
此版本的設置似乎什麼也不做(即從根文件夾運行NDK,建立什麼也不做,甚至後NDK,建立清潔)。詳細運行(ndk-build V = 1)會顯示一些rm -f調用(刪除不存在的文件夾),但與項目或子項目無關。
我對這個構建腳本失敗的原因很感興趣,但這個過程應該是微不足道的,所以我確信它沒有什麼太有趣的地方。我對如何開始自己攻擊構建錯誤更感興趣。在上面的腳本中回聲調用從來沒有打 - 我不知道如何確定什麼值或爲什麼它跳過子項目。有沒有人找到一種方法來知道構建系統是試圖用來做什麼?
我也有興趣知道這些工具是否有文檔,或者它是否只是NDK文檔文件夾中的一小部分文本文件?我一直在試圖通過複製我從Google搜索中發現的隨機Android.mk的部分來解決這個問題,但是隻有簡單的NDK示例中使用的幾個命令似乎被記錄下來,所以這些經驗實際上只是提出了新的問題。
謝謝。我已經嘗試過,並沒有改變任何行爲(ndk-build仍然是一個無操作)。我也嘗試刪除LOCAL_C_INCLUDES,因爲我不知道爲什麼會被使用。沒有運氣。這聽起來像你在暗示我使用eclipse來生成這個mk文件?我不知道你可以這樣做。我可能能夠使用它而不是關於如何調試.mk文件的說明。你能指點我怎麼做的嗎? – Dave 2011-04-27 23:28:41
奇怪:對不起,沒有工作。原始的參考文件是手工生成的,但由Eclipse構建,除非我記錯。我會實際嘗試自己構建它。有一點需要注意:如果你在Windows上這樣做,你必須確保你的路徑中沒有空格,不管怎麼樣,或者在十多年後,Cygwin STILL不能正確處理空格(不是視覺工作室ddk做了一個粉碎的工作,所以這可能只是Windows吸吮風)。 – Femi 2011-04-27 23:49:33
我將嘗試報廢我的文件夾結構並逐字使用您的文件。但是關於如何調試這些.mk文件的原始問題仍然存在。 僅供參考,我在Mac上... – Dave 2011-04-27 23:55:44