使用 Android 9 构建系统,我能够使用
BUILD_PHONY_PACKAGE
和 LOCAL_ADDITIONAL_DEPENDENCIES
能够在 Android.mk 文件中执行自定义构建,但是,现在我切换到 Android 11,但不知何故无法让它工作。如果您不熟悉 Android 构建系统的虚假包构建模板,请参阅 https://kristianrumberg.wordpress.com/2016/02/13/android-local-module-based-on-custom-target/。
奇怪的是,如果我用
mma
编译,那么它会成功构建,但是如果我使用make -j8
,那么makefile中指定的目标根本不会执行。我想知道我错过了什么。请看下面的例子:
mypackage_LOCAL_PATH := $(call my-dir)
LOCAL_PATH := $(mypackage_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := mypackage
LOCAL_MODULE_TAGS := optional
mypackage_ANDROID_API ?= 28
mypackage_ANDROID_NDK_CROSS_COMPILE := aarch64-linux-android$(mypackage_ANDROID_API)-
mypackage_LIBDIR := lib64
mypackage_ARCH := arm64
mypackage_ANDROID_NDK_PATH := toolchain/android-ndk/android-ndk-r19c-linux-x86_64
mypackage_ANDROID_NDK_BIN_PATH := $(mypackage_ANDROID_NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin
mypackage_ANDROID_DIR := $(shell pwd)
mypackage_ANDROID_NDK_DIR := $(mypackage_ANDROID_DIR)/$(mypackage_ANDROID_NDK_PATH)
mypackage_ANDROID_NDK_BIN_DIR := $(mypackage_ANDROID_DIR)/$(mypackage_ANDROID_NDK_BIN_PATH)
mypackage_SOURCE_PATH = $(mypackage_LOCAL_PATH)/mypackage
mypackage_BUILD_PATH = $(OUT_DIR)/standalone/build/mypackage
$(mypackage_BUILD_PATH):
....
....
$(mypackage_BUILD_PATH)/apps/mypackage: $(mypackage_BUILD_PATH)
$(hide) \
ANDROID_NDK=$(mypackage_ANDROID_NDK_DIR) \
CROSS_COMPILE=$(mypackage_ANDROID_NDK_CROSS_COMPILE) \
PATH=$(mypackage_ANDROID_NDK_BIN_DIR):$$PATH \
$(MAKE) -C "${mypackage_BUILD_PATH}" --silent \
DESTDIR="$(mypackage_ANDROID_DIR)"/"$(PRODUCT_OUT)" \
generate_apps \
install_programs
LOCAL_ADDITIONAL_DEPENDENCIES := $(mypackage_BUILD_PATH)/apps/mypackage
include $(BUILD_PHONY_PACKAGE)
我确保这里没有未定义或指向错误位置的路径变量。我也验证了问题是目标
$(mypackage_BUILD_PATH)/apps/mypackage
没有执行。文件的其余部分被执行。我预计目标会被执行,因为它是在 LOCAL_ADDITIONAL_DEPENDENCIES
变量中指定的。
我只是想知道为什么它与
mma
一样有效,但与 make -j8
却不起作用。预先感谢。
您可以添加
droidcore
目标来进行全部制作。
例如:
$(mypackage_BUILD_PATH) droidcore:
....
....
mmm的第一个目标 全力以赴的第二个目标