Konwertowanie z Make na Soong

Przed wydaniem Androida 7.0 Android używał wyłącznie narzędzia GNU Make do opisywania i wykonywania reguł kompilacji. System kompilacji Make jest powszechnie obsługiwany i używany, ale w przypadku Androida stał się powolny, podatny na błędy, nie można go było skalować ani łatwo testować. System kompilacji Soong zapewnia elastyczność wymaganą w przypadku kompilacji Androida. Wprowadzamy istotne zmiany w systemie kompilacji Androida. Wycofujemy system kompilacji Make (Android.mk) i zastępujemy go systemem Soong (Android.bp).

Dlatego oczekujemy, że deweloperzy platform jak najszybciej przejdą z Make na Soong. Aby uzyskać pomoc, wyślij pytania do grupy dyskusyjnej Android Building w Google.

Co to jest Soong?

System kompilacji Soong został wprowadzony w Androidzie 7.0 (Nougat) jako zamiennik Make. Wykorzystuje narzędzie Kati, czyli klon GNU Make, oraz komponent systemu kompilacji Ninja, aby przyspieszyć kompilowanie Androida.

Ogólne instrukcje znajdziesz w opisie Android Make Build System w Android Open Source Project (AOSP), a o zmianach w systemie kompilacji dla osób piszących pliki Android.mk dowiesz się z artykułu Build System Changes for Android.mk Writers. Definicje kluczowych terminów znajdziesz w hasłach związanych z kompilacją w słowniczku, a szczegółowe informacje w dokumentacji modułów Soong.

Porównanie Make i Soong

Poniżej znajdziesz porównanie konfiguracji Make z konfiguracją Soong, która wykonuje to samo zadanie w pliku konfiguracji Soong (Blueprint lub .bp).

Tworzenie przykładu

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)

Przykład Soong

cc_library_shared {
     name: "libxmlrpc++",

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

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

Przykłady konfiguracji Soong dla testów znajdziesz w artykule Prosta konfiguracja kompilacji.

Podstawowa procedura konwersji

Konwersja pliku Android.mk na plik Android.bp zwykle przebiega zgodnie z tym ogólnym przepływem pracy przy użyciu narzędzia pomocniczego androidmk. Podczas konwersji zwykle wykonuje się te czynności:

  1. Skonfiguruj środowisko terminala i skompiluj narzędzie androidmk.

    androidmk to narzędzie wiersza poleceń, które analizuje plik Android.mk i próbuje wygenerować analogiczny plik Android.bp. Może on przekonwertować większość Android.mkplików na format Android.bp przy niewielkich zmianach ręcznych lub bez nich.

    cd <root-of-the-tree>
    source build/envsetup.sh
    lunch <lunch-target>
    m androidmk
    
  2. Kompilacja za pomocą Android.mk:sh m <module-name>

  3. Uruchom narzędzie do konwersji androidmk:sh androidmk <path-to-Android.mk>/Android.mk > <path-to-Android.bp>/Android.bp

  4. Ręcznie edytuj plik Android.bp:

    • Rozwiąż problemy widoczne w ostrzeżeniach wyświetlanych przez androidmk.
    • zachować lub dodać nagłówek dotyczący praw autorskich; Jeśli dodajesz nowy, użyj bieżącego roku.
  5. Usuń plik Android.mk i skompiluj go za pomocą pliku Android.bp.

  6. Sprawdź konwersję, porównując utworzone artefakty lub przeprowadzając testy jednostkowe i funkcjonalne.

  7. Zapisz zmiany i prześlij je do sprawdzenia.

Więcej informacji znajdziesz w artykule Format pliku Android.bp.