Конвертировать из Make в Soong

До выхода Android 7.0 для описания и выполнения правил сборки Android использовалась исключительно система GNU Make . Система сборки Make широко поддерживается и используется, но в масштабах Android стала медленной, подверженной ошибкам, не масштабируемой и сложной для тестирования. Система сборки Soong обеспечивает необходимую гибкость для сборок Android. Мы вносим существенные изменения в систему сборки Android, отказываясь от системы сборки Make ( Android.mk ) и заменяя её на Soong ( Android.bp ).

По этой причине разработчикам платформы рекомендуется как можно скорее перейти с Make на Soong. Для получения поддержки отправляйте вопросы в группу Google по разработке Android-приложений .

Что такое Сунг?

Система сборки Soong была представлена ​​в Android 7.0 (Nougat) и заменила Make. Она использует инструмент клонирования GNU Make Kati и компонент системы сборки Ninja для ускорения сборки Android.

Общие инструкции см. в описании системы сборки Android Make в проекте Android Open Source Project (AOSP), а информацию о необходимых изменениях для адаптации от Make к Soong — в разделе «Изменения системы сборки для разработчиков Android.mk» . Определения ключевых терминов см. в разделах глоссария , посвященных сборке , а полную информацию — в справочнике модулей Soong .

Сравнение Make и Song

Здесь приведено сравнение конфигурации Make и Soong, демонстрирующее выполнение тех же задач в конфигурационном файле Soong (Blueprint или .bp ).

Приведите пример

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libxmlrpc++
LOCAL_MODULE_HOST_OS := linux

LOCAL_RTTI_FLAG := -frtti
LOCAL_CPPFLAGS := -Wall -Werror -fexceptions
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/src

LOCAL_SRC_FILES := $(call \
     all-cpp-files-under,src)
include $(BUILD_SHARED_LIBRARY)

Пример песни

cc_library_shared {
     name: "libxmlrpc++",

     rtti: true,
     cppflags: [
           "-Wall",
           "-Werror",
           "-fexceptions",
     ],
     export_include_dirs: ["src"],
     srcs: ["src/**/*.cpp"],

     target: {
           darwin: {
                enabled: false,
           },
     },
}

Примеры конфигурации Soong, специфичные для конкретных тестов, см. в разделе «Простая конфигурация сборки» .

Основная процедура преобразования

Преобразование файла Android.mk в файл Android.bp обычно выполняется в соответствии с этим общим алгоритмом с использованием вспомогательного инструмента androidmk . В общем случае, при преобразовании выполняются следующие шаги.

  1. Настройте среду терминала и соберите инструмент androidmk .

    androidmk — это инструмент командной строки, который анализирует файл Android.mk и пытается создать аналогичный файл Android.bp . Он может преобразовать большинство файлов Android.mk в Android с минимальными изменениями или без них.

    cd <root-of-the-tree>
    source build/envsetup.sh
    lunch <lunch-target>
    m androidmk
    
  2. Сборка с использованием Android.mk : sh m <module-name>

  3. Запустите инструмент преобразования androidmk : sh androidmk <path-to-Android.mk>/Android.mk > <path-to-Android.bp>/Android.bp

  4. Отредактируйте файл Android.bp вручную:

    • Устраните все предупреждения, выдаваемые инструментом androidmk .
    • Сохраните или добавьте заголовок с указанием авторских прав. При добавлении нового заголовка используйте текущий год.
  5. Удалите файл Android.mk и выполните сборку с использованием файла Android.bp .

  6. Проверьте правильность преобразования, сравнив созданные артефакты или запустив модульные и функциональные тесты.

  7. Сохраните изменения и загрузите файл для проверки.

Для получения дополнительной информации обратитесь к описанию формата файла Android.bp .