2012-06-13 94 views
7

我有一個本機二進制文件,我想將其包含到Android的源代碼中,以便在編譯時我的二進制文件將包含在/ system/bin中。在Android源代碼中添加預構建的二進制

我抄我的二進制文件到文件夾/預建/機器人臂/我的二進制,和我創建了一個新的Android.mk有以下幾點:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_SRC_FILES := my-binary 
LOCAL_MODULE := my-binary 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_PREBUILT) 

但是當我運行,我在日誌中得到的唯一參考如下:

target Prebuilt: my-binary (out/target/product/generic/obj/EXECUTABLES/my-binary_intermediates/my-binary) 

和二進制並沒有安裝到system.img可言。在Installing a prebuilt binary on Android: "not found"中有一個幾乎相同的問題,但提問者已經知道了基本程序,並且根本沒有解釋。如果我運行使我的二進制,我得到了我張貼的相同的行。

我也嘗試運行make/target/product/generic/system.img my-binary但它也不起作用。我的二進制文件出現在列出的子文件夾中,但它不會包含在system.imng中

我是否缺少什麼?有沒有什麼辦法,只要運行make -j#我的二進制文件將包含在/ system/bin中?

回答

8

剛剛在我的模擬器上測試過,它正在工作。我在此文件夾中用作gdbserver的示例。我有一個交叉編譯的android strace,並用它嵌入到圖像中。所以,這些指令將用於這個可執行文件。

  1. 下創建預建/機器人臂的文件夾/ strace的
  2. 將有二進制文件(在我的情況strace的)

添加Android.mk有以下內容的文件:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_SRC_FILES := strace 
LOCAL_MODULE := strace 
LOCAL_MODULE_CLASS := EXECUTABLES 
LOCAL_MODULE_TAGS := optional 
include $(BUILD_PREBUILT) 


prebuilt_files := 

$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files)) 

構建指令:mmm prebuilt snod -j4(如果您已經創建了映像),或者您當然也可以使用make -j4

+0

呀,我用Android.mk在參考同一個目錄下gdbserver的發現,但它不工作的readOn一些。我會試着用mmmm;我會馬上回來...... 編輯:*嗯嗯預建snod -j *工作!我打算做一個* make clean *,看看是否從頭開始重建所有東西...... – ziritrion

+0

真的很奇怪......直接從回購(無需使用我的二進制文件)在源代碼上運行* make *編譯好。但是,當我添加我的二進制文件,我得到奇怪的錯誤。最糟糕的是,即使我做了一個* make clean *並取出我的文件夾(它應該讓源代碼就像剛開始時一樣,因爲我沒有碰到其他任何東西),當我嘗試編譯它時仍然會收到編譯錯誤。我釋放了空間,確保它與代碼本身沒有任何關係(我在VMware上運行Ubuntu 10.04) – ziritrion

+0

make clean只需刪除'out'文件夾。它不會將代碼更改爲defaoult。你能用編譯過程中遇到的錯誤更新答案嗎? – Yury

2

如果您的二進制文件在out目錄中結束,但不在映像中,這是因爲您沒有將二進制文件包含在映像中的規則。

device/<vendorname>/<devicename>/device.mk(或由device.mk包括一些makefile文件),你需要有兩個條目之一:

PRODUCT_PACKAGES += my-binary 

或:

PRODUCT_COPY_FILES += path/to/my-binary:/root/target/path/to/my-binary 

...我建議PRODUCT_PACKAGES方法; PRODUCT_COPY_FILES更適合腳本和配置文件。

注意:PRODUCT_PACKAGES使用模塊名稱,其中PRODUCT_COPY_FILES使用二進制文件的實際名稱/位置。

0

您還可以對我的以下工作 ..... LOCAL_MDULE_PATH:= $(TARGET_OUT_OPTIONAL_EXECUTABLES) ... 包括$(BUILD_EXECUTABLE)

相關問題