Добавление готового двоичного файла в исходный код Android
У меня есть собственный двоичный файл, который я хочу включить в исходный код Android, чтобы при компиляции мой двоичный файл был включен в / system / bin.
Я скопировал свой бинарный файл в папку / prebuilt / android-arm / my-binary и создал новый 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)
Но когда я запускаю make, единственная ссылка, которую я получаю в журнале:
target Prebuilt: my-binary (out/target/product/generic/obj/EXECUTABLES/my-binary_intermediates/my-binary)
И бинарный файл вообще не установлен в system.img. При установке готового бинарного файла на Android есть почти идентичный вопрос : "не найден", но спрашивающий уже знал основную процедуру, и она вообще не объясняется. Если я запускаю make my-binary, я получаю ту же строку, что и я.
Я также попытался запустить make out / target / product / generic / system.img my-binary, но он тоже не работает. Мой бинарный файл отображается в подпапке out, но он не будет включен в system.imng
Я что-то пропустил? Есть ли способ, чтобы при запуске make -j# мой бинарный файл был включен в /system/bin?
3 ответа
Только что протестировал на моем эмуляторе и он работает. Я использовал в качестве примера gdbserver в этой папке. У меня есть страйк кросс-компиляция для Android и использовать его для встраивания в изображение. Итак, инструкции будут для этого исполняемого файла.
- Создайте папку в папке prebuilt / android-arm / strace
- Положи туда свой бинарный файл (в моем случае 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
также.
Если ваш двоичный файл попадает в каталог out, но не в образ, это потому, что у вас нет правила для включения двоичного файла в образ.
в device/<vendorname>/<devicename>/device.mk
(или в некотором make-файле, включенном device.mk
) вам нужно иметь одну из двух записей:
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
использует фактическое имя / местоположение двоичного файла.
Вы также можете следующее, что работает для меня..... LOCAL_MDULE_PATH:= $(TARGET_OUT_OPTIONAL_EXECUTABLES) ... include $(BUILD_EXECUTABLE)