Android 编译中的LOCAL_SDK_VERSION 和 LOCAL_PRIVATE_PLATFORM_APIS

在Android P中,编译Java代码新增了sdk_check.mk检查步骤,确保定义了LOCAL_SDK_VERSION或LOCAL_PRIVATE_PLATFORM_APIS变量,否则将导致编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

对于这两个变量,虽然在之前就在编译系统中出现了,但是在Android P 中编译Java的时候多了一个check 步骤,即sdk_check.mk

先来看下java.mk:

在编译java 文件的时候都会进行check,来看下代码:

whitelisted_modules := framework-res__auto_generated_rro


ifeq (,$(JAVA_SDK_ENFORCEMENT_ERROR))
  JAVA_SDK_ENFORCEMENT_ERROR := APPS
endif

ifeq ($(LOCAL_SDK_VERSION)$(LOCAL_PRIVATE_PLATFORM_APIS),)
  ifeq (,$(filter $(LOCAL_MODULE),$(whitelisted_modules)))
    ifneq ($(JAVA_SDK_ENFORCEMENT_WARNING)$(JAVA_SDK_ENFORCEMENT_ERROR),)
      my_message := Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
      ifeq ($(LOCAL_MODULE_CLASS),$(JAVA_SDK_ENFORCEMENT_ERROR))
        $(call pretty-error,$(my_message))
      endif
      ifeq ($(LOCAL_MODULE_CLASS),$(JAVA_SDK_ENFORCEMENT_WARNING))
        $(call pretty-warning,$(my_message))
      endif
      my_message :=
    endif
  endif
else ifneq ($(LOCAL_SDK_VERSION),)
  ifneq ($(LOCAL_PRIVATE_PLATFORM_APIS),)
    my_message := Specifies both LOCAL_SDK_VERSION ($(LOCAL_SDK_VERSION)) and
    my_message += LOCAL_PRIVATE_PLATFORM_APIS ($(LOCAL_PRIVATE_PLATFORM_APIS))
    my_message += but should specify only one
    $(call pretty-error,$(my_message))
    my_message :=
  endif
endif

需要在编译的mk 中添加两个变量中的一个LOCAL_SDK_VERSION 和 LOCAL_PRIVATE_PLATFORM_APIS。

如果这两个变量没有定义,那么编译的时候就会报错:

  [sshexec] vendor/commons/packages/apps/PhoneManager/Android.mk: error: PhoneManager: Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS, 
  [sshexec] build/make/core/sdk_check.mk:21: error: done.

注意:

  • 这两个变量必须定义其中一个
  • 除非该LOCAL_MODULE 在白名单中(一般不会去修改源生的 mk)
  • 这两个变量只能定义一个,不能同时定义

对于变量LOCAL_SDK_VERSION 之前一直会使用,标记SDK 的version 状态,值为current system_current test_current core_current 其中一个。

对于使用系统@hide api的,我们默认可以设置 LOCAL_PRIVATE_PLATFORM_APIS 为true即可。

LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src/aidl LOCAL_AIDL_FILES := $(call all-aidl-files-under, $(LOCAL_PATH)/src/aidl) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res LOCAL_PACKAGE_NAME := FactoryMode LOCAL_PRIVATE_PLATFORM_APIS := false LOCAL_PRIVILEGED_MODULE := true LOCAL_CERTIFICATE := platform LOCAL_USE_AAPT2 := true LOCAL_PROGUARD_ENABLED := disabled LOCAL_DEX_PREOPT := false LOCAL_STATIC_ANDROID_LIBRARIES += \ android-support-constraint-layout \ android-support-compat \ android-support-v4 \ android-support-v13 \ android-support-v7-appcompat \ android-support-v7-cardview \ android-support-v7-preference \ android-support-v14-preference \ androidx.recyclerview_recyclerview \ LOCAL_STATIC_JAVA_LIBRARIES += upgradeProxy \ zxing \ someip \ clusterKit \ wayto-annotation \ wayto-base \ mshi \ jwriter \ okio-jvm \ kotlin \ sshd-sftp \ sshd-core \ sshd-common \ slf4j-simple \ slf4j-api \ testsftp-client \ gson-jar \ lifecycle-jar \ LOCAL_JAVA_LIBRARIES += android.car #LOCAL_JNI_SHARED_LIBRARIES := jni include $(BUILD_PACKAGE) include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += upgradeProxy:libs/upgradeProxy.jar \ zxing:libs/zxing.jar \ someip:libs/someip.jar \ clusterKit:libs/ClusterKit-debug.aar \ wayto-annotation:libs/wayto-annotation.jar \ wayto-base:libs/wayto-base-debug.aar \ mshi:libs/moshi-1.15.0.jar \ jwriter:libs/javawriter-2.1.1.jar \ moshi:libs/moshi-1.15.0.jar \ okio-jvm:libs/okio-jvm-2.10.0.jar \ kotlin:libs/kotlin-stdlib-1.9.24.jar \ sshd-sftp:libs/sshd-sftp-2.7.0.jar \ sshd-core:libs/sshd-core-2.7.0.jar \ sshd-common:libs/sshd-common-2.7.0.jar \ slf4j-simple:libs/slf4j-simple-2.0.7.jar \ slf4j-api:libs/slf4j-api-2.0.7.jar \ testsftp-client:libs/jsch-0.1.55.jar \ gson-jar:libs/gson-2.8.9.jar \ lifecycle-jar:libs/lifecycle-common-2.6.1.jar \ include $(BUILD_MULTI_PREBUILT) include $(call all-makefiles-under, $(LOCAL_PATH))
07-18
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值