You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP(Oreo)编译报错:LOCAL_MODULE未定义问题求助

我来帮你解决这个AOSP Oreo编译的问题,这个错误的根源其实是两个地方的问题:JNI目录下的Android.mk存在语法错误,主Android.mk的结构也混淆了APK和JNI库的构建逻辑。

解决方案

1. 修复jni/Android.mk的语法错误

你的jni目录下的Android.mk里,LOCAL_SRC_FILES和LOCAL_CFLAGS的最后一行末尾多了不必要的反斜杠,这会导致构建系统把后续的代码当成这些变量的一部分,进而无法正确识别LOCAL_MODULE的定义。

修改后的jni/Android.mk如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
jni_init.cpp \
com_android_terminal_Terminal.cpp  # 去掉末尾多余的反斜杠
LOCAL_C_INCLUDES += \
external/libvterm/include \
libcore/include \
frameworks/base/include
LOCAL_SHARED_LIBRARIES := \
libandroidfw \
libandroid_runtime \
liblog \
libnativehelper \
libutils
LOCAL_STATIC_LIBRARIES := \
libvterm
LOCAL_CFLAGS := \
-Wno-unused-parameter  # 去掉末尾多余的反斜杠
LOCAL_MODULE := libjni_terminal
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

2. 修正主Android.mk的构建结构

主Android.mk里错误地在APK构建块中添加了LOCAL_MODULE := libjni_terminal(BUILD_PACKAGE用于编译APK,不需要这个变量),同时构建顺序也需要调整,确保先编译JNI库再编译APK。

修改后的主Android.mk如下:

LOCAL_PATH:= $(call my-dir)

# 先编译JNI子目录的共享库
include $(call all-subdir-makefiles)

include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := TerminalTest
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
LOCAL_JNI_SHARED_LIBRARIES := libjni_terminal  # 这里要和JNI库的LOCAL_MODULE名称一致
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)

错误原因说明

那个LOCAL_MODULE not defined的提示,本质是因为jni/Android.mk里的反斜杠语法错误,导致构建系统解析变量时出错,把LOCAL_MODULE的定义错误地合并到了前面的LOCAL_SRC_FILES或LOCAL_CFLAGS中,使得系统认为你没有定义LOCAL_MODULE就启动了构建流程。

做完这两处修改后,重新执行编译命令应该就能解决这个问题了。

内容的提问来源于stack exchange,提问作者Midhun PM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:36:17