Von Make zu Soong konvertieren

Vor der Veröffentlichung von Android 7.0 verwendete Android GNU Make ausschließlich, um die Build-Regeln zu beschreiben und auszuführen. Das Make-Build-System wird weitgehend unterstützt und verwendet, wurde aber bei der Größe von Android langsam, fehleranfällig, nicht skalierbar und schwer zu testen. Das Soong-Build-System bietet die Flexibilität, die für Android-Builds erforderlich ist. Wir nehmen erhebliche Änderungen am Android-Build-System vor, stellen das Make-Build-System (Android.mk) ein und ersetzen es durch Soong (Android.bp).

Aus diesem Grund sollten Plattformentwickler so schnell wie möglich von Make zu Soong wechseln. Fragen können Sie in der Google-Gruppe Android Building stellen.

Was ist Soong?

Das Soong-Build-System wurde in Android 7.0 (Nougat) eingeführt, um Make zu ersetzen. Es nutzt das Kati GNU Make-Klon-Tool und die Ninja Build-System Komponente, um die Builds von Android zu beschleunigen.

Eine allgemeine Anleitung finden Sie in der Beschreibung des Android-Make-Build-Systems im Open Source-Projekt für Android (AOSP). Informationen zu den Änderungen, die für die Umstellung von Make auf Soong erforderlich sind, finden Sie unter Build-Systemänderungen für Android.mk-Autoren. Definitionen wichtiger Begriffe finden Sie in den Build-bezogenen Einträgen im Glossar. Vollständige Details finden Sie in der Soong-Modulreferenz.

Vergleich von Make und Soong

Hier sehen Sie einen Vergleich der Make-Konfiguration mit Soong, wobei dasselbe in einer Soong-Konfigurationsdatei (Blueprint oder .bp) erreicht wird.

Make-Beispiel

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)

Soong-Beispiel

cc_library_shared {
     name: "libxmlrpc++",

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

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

Beispiele für testspezifische Soong-Konfigurationen finden Sie unter Einfache Build-Konfiguration.

Grundlegende Konvertierungsprozedur

Die Konvertierung einer Android.mk-Datei in eine Android.bp-Datei folgt in der Regel diesem allgemeinen Workflow mit dem Hilfstool androidmk. Im Allgemeinen werden bei der Konvertierung die folgenden Schritte ausgeführt.

  1. Richten Sie die Terminalumgebung ein und erstellen Sie das Tool androidmk.

    androidmk ist ein Befehlszeilentool, das eine Android.mk-Datei parst und versucht, eine analoge Android.bp-Datei auszugeben. Die meisten Android.mk-Dateien können mit wenigen oder keinen manuellen Änderungen in Android.bp konvertiert werden.

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

  3. Führen Sie das androidmk Konvertierungstool aus: sh androidmk <path-to-Android.mk>/Android.mk > <path-to-Android.bp>/Android.bp

  4. Bearbeiten Sie die Datei Android.bp manuell:

    • Beheben Sie alle Warnungen, die vom Tool androidmk ausgegeben werden.
    • Behalten Sie eine Copyright-Kopfzeile bei oder fügen Sie eine hinzu. Wenn Sie eine neue hinzufügen, verwenden Sie das aktuelle Jahr.
  5. Entfernen Sie die Datei Android.mk und erstellen Sie den Build mit der Datei Android.bp.

  6. Prüfen Sie die Konvertierung, indem Sie die erstellten Artefakte vergleichen oder Unit- und Funktionstests ausführen.

  7. Speichern Sie die Änderungen und laden Sie sie zur Überprüfung hoch.

Weitere Informationen finden Sie unter Android.bp-Dateiformat.