首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X (java:sdk)不应该链接到Y (java:platform)

X (java:sdk)不应该链接到Y (java:platform)
EN

Stack Overflow用户
提问于 2019-03-05 13:49:31
回答 3查看 5K关注 0票数 4

我是一个android固件开发人员。我与android 9的源代码一起工作,我为AOSP固件编写了一个自定义网络位置提供程序,名为脱机位置服务。我已经将这个应用程序添加到application中的packages/apps/offlinelocatonservice路径中。

我为它创建了一个Android.mk文件,以便将它包含在android中的默认包中。

代码语言:javascript
复制
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时,会遇到以下错误:

代码语言:javascript
复制
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.providerframework?在以前的机器人,如android 8和更早,这个错误是不会发生的。

如何解决这个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-06 12:53:30

在Android9.0中,我也遇到了同样的问题,我通过更改OfflineLocationService/Android.mk替换了:

代码语言:javascript
复制
LOCAL_SDK_VERSION := current

通过以下方式:

代码语言:javascript
复制
LOCAL_PRIVATE_PLATFORM_APIS := true

不过,如果有人能找到更好的解决办法,那就太好了。

票数 9
EN

Stack Overflow用户

发布于 2019-05-29 13:18:10

在Android文档中:

从Android 9 (API级别28)开始,该平台限制了应用程序可以使用的非SDK接口。

理想情况下,您应该重写应用程序,只使用。

您可以在此页上阅读更多信息:https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces

票数 1
EN

Stack Overflow用户

发布于 2021-03-24 16:48:36

没有直接回答这个问题,但是对于那些使用LOCAL_STATIC_JAVA_LIBRARIESLOCAL_PREBUILT_STATIC_JAVA_LIBRARIES结合编写模块的人来说,这在Android9中停止了工作:

代码语言:javascript
复制
include $(CLEAR_VARS)
(...)
LOCAL_MODULE := foo
LOCAL_STATIC_JAVA_LIBRARIES := bar
(...)
include $(BUILD_WHATEVER)

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := bar:path/to/bar.jar
include $(BUILD_MULTI_PREBUILT)

这将产生error: foo (java:sdk) should not link to bar (java:platform)。解决方案是像这样集成预构建的JAR:

代码语言:javascript
复制
include $(CLEAR_VARS)

LOCAL_MODULE := bar
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_SDK_VERSION := current
LOCAL_SRC_FILES := path/to/bar.jar
LOCAL_UNINSTALLABLE_MODULE := true

include $(BUILD_PREBUILT)

然后像以前一样使用LOCAL_STATIC_JAVA_LIBRARIES从模块foo引用它。

有关真实世界的示例,请参阅谷歌是如何在拨号应用程序中做到这一点的

或者只使用LOCAL_PRIVATE_PLATFORM_APIS := true (但这允许模块使用私有API,这可能是不必要的)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55004358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档