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
相关产品推荐
相关产品推荐

