Android(AOSP)7:在其他模块之前构建模块/作为构建过程的一部分的补丁模块/修改系统源代码

Android(AOSP)7:在其他模块之前构建模块/作为构建过程的一部分的补丁模块/修改系统源代码,android,android-source,android-wifi,Android,Android Source,Android Wifi,考虑到使用Android.mk文件构建AOSP 7: 如何在不同的本地\u模块之间添加构建时间依赖关系,特别是在构建特定模块之前构建目标?我想在编译系统模块之前运行补丁应用目标 我的目标是从构建的进程中修补WifiStateMachine.java,因为它目前不支持动态禁用RSSI轮询;DR:复制要修补的模块的Android.mk,并添加修补规则,作为修补程序将源作为目标的先决条件。然后使用LOCAL\u OVERRIDES\u MODULE:=…使您的补丁模块覆盖旧模块。确保将新模块的名称添加

考虑到使用Android.mk文件构建AOSP 7:

如何在不同的
本地\u模块
之间添加构建时间依赖关系,特别是在构建特定模块之前构建目标?我想在编译系统模块之前运行补丁应用目标


我的目标是从构建的进程中修补
WifiStateMachine.java
,因为它目前不支持动态禁用RSSI轮询;DR:复制要修补的模块的Android.mk,并添加修补规则,作为修补程序将源作为目标的先决条件。然后使用
LOCAL\u OVERRIDES\u MODULE:=…
使您的补丁模块覆盖旧模块。确保将新模块的名称添加到
产品包中
,否则覆盖无效


确保我的目标在构建之前得到修补的唯一方法是从
wifi服务
模块的
frameworks/opt/net/wifi/service/Android.mk
复制代码,并使我自己的
Android.mk
覆盖旧的。 原始的
Android.mk
如下所示

# Copyright (C) 2011 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

LOCAL_PATH := $(call my-dir)

ifneq ($(TARGET_BUILD_PDK), true)

我在我的
供应商/
中添加了一个新目录,包括wifi状态机的补丁和以下
Android.mk
。正在修补的源在使用patch apply命令生成的戳记文件上有一个先决条件。在这个stamp文件中,我在补丁之前添加了模块的提交散列。在清理步骤中使用此哈希将模块正确重置为原始头提交。由于Android.mk的位置不同,我不得不更改的唯一变量是protoc的参数

# Copyright (C) 2011 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

THIS_LOCAL_PATH := $(realpath $(call my-dir))
LOCAL_PATH := $(ANDROID_BUILD_TOP)/frameworks/opt/net/wifi/service

# Partwise taken from frameworks/opt/net/wifi/service/Android.mk
# ============================================================

ifneq ($(TARGET_BUILD_PDK), true)

include $(CLEAR_VARS)

PATCHED_STAMP_FILE := $(ANDROID_HOST_OUT)/.wsm_patched.stamp
TO_BE_PATCHED_DIR := $(ANDROID_BUILD_TOP)/frameworks/opt/net/wifi
CHECK_IF_PATCHED_FILE := $(LOCAL_PATH)/java/com/android/server/wifi/WifiStateMachine.java
PREVIOUS_HASH := $(shell grep -hs ^ $(PATCHED_STAMP_FILE))

LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/java
LOCAL_SRC_FILES := $(call all-java-files-under, java) \
    $(call all-Iaidl-files-under, java) \
    $(call all-logtags-files-under, java) \
    $(call all-proto-files-under, proto) \
    $(PATCHED_STAMP_FILE)

$(PATCHED_STAMP_FILE): $(CHECK_IF_PATCHED_FILE)

$(CHECK_IF_PATCHED_FILE):
    git -C $(TO_BE_PATCHED_DIR) rev-parse HEAD > $(PATCHED_STAMP_FILE)
    git -C $(TO_BE_PATCHED_DIR) am $(THIS_LOCAL_PATH)/wifiStateMachine.patch

ifndef INCLUDE_NAN_FEATURE
LOCAL_SRC_FILES := $(filter-out $(call all-java-files-under, \
    java/com/android/server/wifi/nan),$(LOCAL_SRC_FILES))
endif

ifdef PREVIOUS_HASH
$(call add-clean-step, git -C $(TO_BE_PATCHED_DIR) reset --hard $(PREVIOUS_HASH))
$(call add-clean-step, rm $(PATCHED_STAMP_FILE))
endif

LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt services
LOCAL_REQUIRED_MODULES := services
LOCAL_MODULE_TAGS :=
LOCAL_MODULE := wifi-service-anbox
LOCAL_OVERRIDES_MODULE := wifi-service
LOCAL_PROTOC_OPTIMIZE_TYPE := nano

# Protoc uses proto_path=., but wifi.proto is not here
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)

ifeq ($(EMMA_INSTRUMENT_FRAMEWORK),true)
LOCAL_EMMA_INSTRUMENT := true
endif

LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.server.wifi.*

include $(BUILD_JAVA_LIBRARY)

endif
# Copyright (C) 2011 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

THIS_LOCAL_PATH := $(realpath $(call my-dir))
LOCAL_PATH := $(ANDROID_BUILD_TOP)/frameworks/opt/net/wifi/service

# Partwise taken from frameworks/opt/net/wifi/service/Android.mk
# ============================================================

ifneq ($(TARGET_BUILD_PDK), true)

include $(CLEAR_VARS)

PATCHED_STAMP_FILE := $(ANDROID_HOST_OUT)/.wsm_patched.stamp
TO_BE_PATCHED_DIR := $(ANDROID_BUILD_TOP)/frameworks/opt/net/wifi
CHECK_IF_PATCHED_FILE := $(LOCAL_PATH)/java/com/android/server/wifi/WifiStateMachine.java
PREVIOUS_HASH := $(shell grep -hs ^ $(PATCHED_STAMP_FILE))

LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/java
LOCAL_SRC_FILES := $(call all-java-files-under, java) \
    $(call all-Iaidl-files-under, java) \
    $(call all-logtags-files-under, java) \
    $(call all-proto-files-under, proto) \
    $(PATCHED_STAMP_FILE)

$(PATCHED_STAMP_FILE): $(CHECK_IF_PATCHED_FILE)

$(CHECK_IF_PATCHED_FILE):
    git -C $(TO_BE_PATCHED_DIR) rev-parse HEAD > $(PATCHED_STAMP_FILE)
    git -C $(TO_BE_PATCHED_DIR) am $(THIS_LOCAL_PATH)/wifiStateMachine.patch

ifndef INCLUDE_NAN_FEATURE
LOCAL_SRC_FILES := $(filter-out $(call all-java-files-under, \
    java/com/android/server/wifi/nan),$(LOCAL_SRC_FILES))
endif

ifdef PREVIOUS_HASH
$(call add-clean-step, git -C $(TO_BE_PATCHED_DIR) reset --hard $(PREVIOUS_HASH))
$(call add-clean-step, rm $(PATCHED_STAMP_FILE))
endif

LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt services
LOCAL_REQUIRED_MODULES := services
LOCAL_MODULE_TAGS :=
LOCAL_MODULE := wifi-service-anbox
LOCAL_OVERRIDES_MODULE := wifi-service
LOCAL_PROTOC_OPTIMIZE_TYPE := nano

# Protoc uses proto_path=., but wifi.proto is not here
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)

ifeq ($(EMMA_INSTRUMENT_FRAMEWORK),true)
LOCAL_EMMA_INSTRUMENT := true
endif

LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.server.wifi.*

include $(BUILD_JAVA_LIBRARY)

endif