X (java: sdk) не должен ссылаться на Y (java: платформа) - PullRequest
1 голос
/ 05 марта 2019

Я разработчик прошивок для Android. Я работаю с источником Android 9. Я написал собственный поставщик сетевых расположений для прошивки AOSP, названный автономной службой определения местоположения. Я добавил это приложение в packages/apps/offlinelocatonservice путь в дереве сборки AOSP.

Я создал файл Android.mk, чтобы включить его в пакеты по умолчанию для ОС Android.

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := OfflineLocationService

LOCAL_SDK_VERSION := current

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_CERTIFICATE := platform

LOCAL_USE_AAPT2 := true

# Include libraries

LOCAL_JAVA_LIBRARIES := framework com.android.location.provider

LOCAL_STATIC_JAVA_LIBRARIES := android-common

LOCAL_STATIC_ANDROID_LIBRARIES := \
    android-support-v4 \
    android-support-v7-appcompat \
    android-support-design \
    android-support-v7-preference \
    android-support-v7-recyclerview \

LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res

LOCAL_AAPT_FLAGS := --auto-add-overlay

LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat

LOCAL_AAPT_FLAGS += --extra-packages android.support.design

include $(BUILD_PACKAGE)

Но когда я собираю AOSP, я сталкиваюсь с этой ошибкой:

packages/apps/OfflineLocationService/Android.mk: error: OfflineLocationService (java:sdk) should not link to com.android.location.provider (java:platform)
packages/apps/OfflineLocationService/Android.mk: error: OfflineLocationService (java:sdk) should not link to framework (java:platform)

Почему я не должен ссылаться на com.android.location.provider и framework? В предыдущих версиях Android, таких как Android 8 и более ранних, эта ошибка не возникает.

Как я могу решить эту ошибку?

Ответы [ 2 ]

3 голосов
/ 06 марта 2019

У меня такая же проблема в Android 9.0 Временно я решил, изменив OfflineLocationService/Android.mk и заменив:

LOCAL_SDK_VERSION := current

с:

LOCAL_PRIVATE_PLATFORM_APIS := true

Но было бы неплохо, если бы кто-нибудь смог найти лучшее решение.

1 голос
/ 29 мая 2019

Из документации Android:

Начиная с Android 9 (уровень API 28), платформа ограничивает интерфейсы, не относящиеся к SDK, которые может использовать ваше приложение.

В идеале,вам следует переписать ваше приложение, чтобы использовать только общедоступный Android SDK.

Более подробную информацию можно найти на этой странице: https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces

...