#android #c #build #android-service #android-source
#Android #c #сборка #android-сервис #android-исходный код
Вопрос:
В Android, когда вы открываете эмулятор терминала или подключаете оболочку adb, есть команда service
, которую вы можете выполнить, которая позволяет вам в некоторой степени взаимодействовать с системными службами. Для моих целей функциональность слишком ограничена, и я хотел бы ее немного расширить.
К сожалению, этот исполняемый файл не документирован.
Я нашел исходный код здесь: service.cpp
В том же каталоге также есть файл с именем Android.bp со следующим содержимым:
cc_binary {
name: "service",
srcs: ["service.cpp"],
shared_libs: [
"libcutils",
"libutils",
"libbinder",
],
cflags: [
"-DXP_UNIX",
"-Wall",
"-Werror",
],
}
cc_binary {
name: "vndservice",
proprietary: true,
srcs: ["service.cpp"],
shared_libs: [
"libcutils",
"libutils",
"libbinder",
],
cflags: [
"-DXP_UNIX",
"-DVENDORSERVICES",
"-Wall",
"-Werror",
],
}
Для меня эти cflags выглядят как флаги g . Я действительно не знаю g , но после долгих проб и ошибок я пришел к этому:
# Download required source code
git clone https://android.googlesource.com/platform/superproject
cd superproject
git submodule init
git submodule update frameworks/native
git submodule update system/libbase
git submodule update system/core
git submodule update system/logging
# Set required include directories in CPATH
export CPATH="./frameworks/native/include:./system/libbase/include:./system/core/libcutils/include:./system/core/libutils/include:./system/logging/liblog/include:./system/core/libsystem/include:./frameworks/native/libs/binder/include"
# Build
g -DXP_UNIX -Wall -Werror -o service ./frameworks/native/cmds/service/service.cpp
К сожалению, я получаю огромное количество ошибок:
https://pastebin.com/fnu7LJLU
Моя версия G :
g (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
Есть идеи, почему это не удается?
Комментарии:
1. Этот g предназначен для вашей хост-платформы, верно? Если ваша целевая платформа — ARM, вам нужен соответствующий кросс-компилятор / набор инструментов. Самый простой способ настроить это, включая набор инструментов и все зависимости файла, который вы хотите скомпилировать, — это получить полное дерево AOSP ( source.android.com/setup/build/downloading ), а затем используйте сценарии сборки Android для создания этого модуля.
2. Для справки, вот полный вызов компилятора для service.cpp из моего журнала сборки Android 8: pastebin.com/raw/jtdQGH5L Но, как я уже сказал, я не думаю, что делать это вручную было бы очень продуктивно.
3. Сначала я попытался проверить весь исходный код, но у меня недостаточно места на диске. Для проверки исходного кода и его сборки, по-видимому, требуется не менее 400 ГБ свободного места на диске. Мне нужно что-то более разумное, потому что в противном случае я не смогу должным образом интегрировать его в бесплатные системы CI и сделать его доступным для всех. Я не думал о том, что архитектура является проблемой, спасибо, что указали на это. Я попытался создать его на своем телефоне прямо сейчас, но я все еще получаю много ошибок: pastebin.com/xQfeM4rJ
4. Я также пытался скомпилировать его с помощью clang на своем устройстве, чтобы я мог скопировать и вставить вашу команду, но пока безуспешно.
5. Получил clang для работы на моем телефоне и ПК, но я получаю
fatal error: 'map' file not found
сообщение о том, что он не может найти стандартные заголовки. Довольно странно, так как простойclang test.cpp -o test
с включением карты работает просто отлично.