Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Реализация библиотеки Java SDK

Платформа Android содержит большое количество общих библиотек Java, которые можно дополнительно включить в путь к классам приложений с помощью <uses-library> в манифесте приложения. Поскольку приложения связываются с этими библиотеками, их следует рассматривать как остальную часть API Android с точки зрения совместимости, проверки API и поддержки инструментов. Однако в большинстве библиотек этих функций нет.

Android 10 представляет java_sdk_library , новое правило сборки для устранения проблем совместимости для общих библиотек Java. Производители устройств могут использовать этот механизм для своих собственных общих библиотек Java, чтобы поддерживать обратную совместимость своих API. Если производители устройств используют свои собственные общие библиотеки Java через <uses-library> вместо пути к загрузочному классу, java_sdk_library может проверить, что эти библиотеки Java являются API-стабильными.

java_sdk_library - это библиотека Java, которая реализует дополнительные API SDK для приложений. Библиотеки, реализованные с помощью java_sdk_library в вашем файле make ( Android.bp ), выполняют следующие операции:

  • Библиотеки заглушек создаются для включения stubs , stubs.system и stubs.test . Эти библиотеки-заглушки создаются путем распознавания @hide , @SystemApi и @TestApi . Во время сборки на них автоматически ссылаются, когда версия SDK current , system_current и test_current соответственно.
  • Android получает списки API через файлы-заглушки и проверяет, поддерживаются ли API-интерфейсы с обратной совместимостью, сравнивая текущие списки API в главном меню со списками API в самой последней опубликованной версии Android.
  • Если установлена ​​библиотека реализации для среды выполнения, создается и устанавливается XML-файл.
Построение потока с помощью библиотеки Java SDK
Рисунок 1. Последовательность сборки с библиотекой Java SDK

Примеры и источники

Минимальный компонент для библиотек-заглушек - это обязательные свойства srcs и api_packages .

java_sdk_library {
        name: "com.android.future.usb.accessory",
        srcs: ["src/**/*.java"],
        api_packages: ["com.android.future.usb"],
    }

Чтобы создать библиотеку impl, используемую для среды выполнения, заполните все свойства java_library , такие как hostdex , compile_dex и errorprone .

java_sdk_library {
        name: "android.test.base",

        srcs: ["src/**/*.java"],

        errorprone: {
          javacflags: ["-Xep:DepAnn:ERROR"],
        },

        hostdex: true,

        api_packages: [
            "android.test",
            "android.test.suitebuilder.annotation",
            "com.android.internal.util",
            "junit.framework",
        ],

        compile_dex: true,
    }

Чтобы создать библиотеки-заглушки, заполните свойства droidstubs , такие как srcs_lib , srcs_lib_whitelist_dirs , srcs_lib_whitelist_pkgs , merge_annotations_dirs и merge_inclusion_annotations_dirs . Вы также можете использовать эти свойства для библиотеки заглушек:

  • api_srcs : список необязательных исходных файлов, которые являются частью API, но не являются частью библиотеки времени выполнения.
  • stubs_only_libs : список библиотек Java, которые находятся в пути к классам при создании заглушек.
  • hidden_api_packages : список имен пакетов, которые необходимо скрыть от API.
  • droiddoc_options : Дополнительный аргумент для металавы.
    java_sdk_library {
              name: "android.test.mock",
    
              srcs: ["src/**/*.java"],
    
              api_packages: [
                  "android.test.mock",
              ],
    
              srcs_lib: "framework",
              srcs_lib_whitelist_dirs: ["core/java"],
              srcs_lib_whitelist_pkgs: ["android"],
              compile_dex: true,
          }

Сохранение обратной совместимости

Система сборки проверяет, поддерживают ли API обратную совместимость, сравнивая последние файлы API с созданными файлами API во время сборки. Это достигается с помощью нового правила сборки, называемого prebuilt_apis , которое создает готовые модули библиотеки заглушек и модули списков API. Все библиотеки, созданные с помощью java_sdk_library должны иметь файлы API в последней версии api_dirs в prebuilt_apis . Когда вы выпускаете версию, список файлов API и библиотеки-заглушки можно получить с помощью dist build с PRODUCT-sdk_phone_armv7-sdk .

Свойство api_dirs - это список каталогов версий API в prebuilt_apis . Каталоги версий API должны находиться на одном уровне с Android.bp .

prebuilt_apis {
        name: "sdk",
        api_dirs: [
            "1",
            "2",
              ....
            "28",
            "current",
        ],
    }

Настройте каталоги с version / scope /api/ structure в каталоге prebuilts. version соответствует уровню API, а scope определяет, является ли каталог общедоступным, системным или тестовым.

  • version / scope содержит библиотеки Java.
  • version / scope /api содержит файлы API .txt . Создайте здесь пустые текстовые файлы с именами module_name .txt и module_name -removed.txt .
    ├── 28
          │   ├── public
          │   │   ├── api
          │   │   │   ├── android.test.base-removed.txt
          │   │   │   └── android.test.base.txt
          │   │   └── android.test.base.jar
          │   ├── system
          │   │   ├── api
          │   │   │   ├── android.test.base-removed.txt
          │   │   │   └── android.test.base.txt
          │   │   └── android.test.base.jar
          │   └── test
          │       ├── api
          │       │   ├── android.test.base-removed.txt
          │       │   └── android.test.base.txt
          │       └── android.test.base.jar
          └── Android.bp