我将 ADT 项目隐藏到 Android Studio 中。但是,我在构建此项目时不断收到错误:
错误:(687) Android NDK:模块 MediaEncoder 依赖于未定义的模块:cutils gnuSTL dl
这就是 Android.mk 中的内容。我是 NTK 的新手,有人可以在这里提出这个问题的建议吗?
# building application library
#
include $(CLEAR_VARS)
LOCAL_MODULE := libMediaEncoder
LOCAL_CPP_EXTENSION := .cc .cpp
LOCAL_CPPFLAGS := -O2 -Werror -Wall
LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)
LOCAL_SRC_FILES := main_jni.cpp \
h264encoder.cpp \
g72x/g726_32.c \
g72x/g711.c \
g72x/g72x.c
LOCAL_LDLIBS += -llog -lz
LOCAL_SHARED_LIBRARIES := libcutils\
libgnustl\
libdl
最佳答案
我相信您使用的项目配置为在 AOSP 构建上下文中构建,而不是由 NDK 构建。但它仍然可以与非常旧的 NDK 版本一起使用。
当前版本 r14 已集成到 Android Studio 2.3 中,需要对 Android.mk 进行一些更改。
include $(CLEAR_VARS)
LOCAL_MODULE := libMediaEncoder
LOCAL_CPPFLAGS := -O2 -Werror -Wall
LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)
LOCAL_SRC_FILES := main_jni.cpp \
h264encoder.cpp \
g72x/g726_32.c \
g72x/g711.c \
g72x/g72x.c
LOCAL_LDLIBS += -llog -lz -ldl
LOCAL_SHARED_LIBRARIES := libcutils_prebuilt
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libcutils_prebuilt
LOCAL_SRC_FILES := {full-path-to}/libcutils.so
include $(PREBUILT_SHARED_LIBRARY)
要解决对 gnuSTL 的依赖关系,请运行 ndk-build APP_STL=gnuSTL_static
,或在 Application.mk 中定义 APP_STL 文件。
请注意,您的项目使用非公共(public)系统库libcutils.so。该库曾经包含在 NDK 中(请参阅 https://stackoverflow.com/a/22017733/192373 ),但在过去 3 年中,Google 一直在努力阻止链接到它。
您可以自己构建 libcutils.so 作为 AOSP 的一部分,也可以从您的设备甚至兼容的模拟器adb pull
它。您还可以在网络上的某个位置找到此二进制文件(例如 GitHub )。
最后一击是宣布对 Android 7.0 Nougat 的系统链接进行更改。 。 TL;NR:任何依赖此库的应用程序都无法在未来的 Android 版本上运行。
关于安卓NDK : Module MediaEncoder depends on undefined modules: cutils gnuSTL dl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917707/