2012-06-13 9 views
7

Tôi có một nhị phân gốc mà tôi muốn đưa vào mã nguồn của Android, để khi biên dịch nó, nhị phân của tôi sẽ được đưa vào/system/bin.Thêm một nhị phân dựng sẵn trong nguồn Android

tôi đã sao chép nhị phân của tôi vào thư mục/dựng sẵn/android-cánh tay/my-nhị phân, và tôi đã tạo ra một Android.mk mới với những điều sau:

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) 

Nhưng khi tôi chạy làm, tham chiếu duy nhất mà tôi có được trong nhật ký như sau:

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

Và nhị phân không được cài đặt vào system.img ở tất cả. Có một câu hỏi gần như giống hệt nhau trong Installing a prebuilt binary on Android: "not found", nhưng người hỏi đã biết thủ tục cơ bản và nó không được giải thích chút nào. Nếu tôi chạy làm cho số nhị phân của tôi, tôi nhận được cùng một dòng mà tôi đã đăng.

Tôi cũng đã cố gắng chạy tạo/mục tiêu/sản phẩm/chung/hệ thống.img nhị phân của tôi nhưng không hoạt động. Tệp nhị phân của tôi hiển thị trong thư mục con ra nhưng nó sẽ không được đưa vào hệ thống.imng

Tôi có thiếu gì đó không? Có cách nào để chỉ chạy make -j # nhị phân của tôi sẽ được đưa vào/system/bin không?

Trả lời

8

Chỉ cần thử nghiệm trên trình giả lập của tôi và nó hoạt động. Tôi đã sử dụng như một gdbserver ví dụ trong thư mục này. Tôi có một strace crosscompiled cho android và sử dụng nó để được nhúng vào hình ảnh. Vì vậy, các hướng dẫn sẽ được thực thi.

  1. Tạo một thư mục dưới dựng sẵn/android-cánh tay/strace
  2. Đặt có bạn nhị phân (trong trường hợp của tôi strace)

Thêm tập tin với nội dung sau 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)) 

Tạo theo hướng dẫn: mmm prebuilt snod -j4 (nếu bạn đã tạo hình ảnh) hoặc bạn, tất nhiên, cũng có thể sử dụng make -j4.

+0

Yeah, tôi đã sử dụng Android.mk tìm thấy trong gdbserver trong cùng thư mục để tham khảo, nhưng nó đã không làm việc cho một số Readon. Tôi sẽ thử với mmmm; Tôi sẽ quay lại ngay ... CHỈNH SỬA: * mmm đã sẵn sàng snod -j * đã hoạt động! Tôi sẽ làm một * làm sạch * và xem nếu xây dựng lại tất cả mọi thứ từ đầu hoạt động là tốt ... – ziritrion

+0

Một cái gì đó thực sự kỳ lạ đang xảy ra ... Chạy * make * trên mã nguồn trực tiếp từ repo (không có nhị phân của tôi) biên dịch tốt. Nhưng khi tôi thêm nhị phân của mình, tôi nhận được các lỗi lạ. Điều tồi tệ nhất là ngay cả khi tôi làm một * làm sạch * và đưa ra thư mục của tôi (mà nên để cho mã nguồn giống như nó đã được bắt đầu từ khi tôi không chạm vào bất cứ điều gì khác), khi tôi cố gắng biên dịch nó tôi vẫn sẽ nhận được lỗi biên dịch. Tôi đang giải phóng không gian nad làm cho chắc chắn nó không phải bất cứ điều gì không liên quan đến mã chính nó (Tôi đang chạy Ubuntu 10.04 trên VMware) – ziritrion

+0

làm sạch chỉ đơn giản là xóa 'ra' thư mục. Nó không thay đổi mã để defaoult. Bạn có thể cập nhật câu trả lời của mình với các lỗi mà bạn nhận được trong quá trình biên dịch không? – Yury

2

nếu nhị phân của bạn kết thúc trong thư mục ngoài nhưng không phải trong hình ảnh, đó là vì bạn không có quy tắc để bao gồm nhị phân trong hình ảnh.

trong device/<vendorname>/<devicename>/device.mk (hoặc trong một số makefile bao gồm theo device.mk), bạn cần phải có một trong hai mục:

PRODUCT_PACKAGES += my-binary 

hay:

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

... Tôi sẽ đề nghị phương pháp PRODUCT_PACKAGES; PRODUCT_COPY_FILES phù hợp hơn với tập lệnh và tệp cấu hình.

LƯU Ý: PRODUCT_PACKAGES sử dụng tên mô-đun, trong đó PRODUCT_COPY_FILES sử dụng tên/vị trí thực tế của tệp nhị phân.

0

Bạn cũng có thể làm như sau với tôi ..... LOCAL_MDULE_PATH: = $ (TARGET_OUT_OPTIONAL_EXECUTABLES) ... bao gồm $ (BUILD_EXECUTABLE)