我将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
答案 0 :(得分:1)
我相信您使用的项目配置为在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 。
请注意,您的项目使用非公共系统库 libcutils.so 。这个图书馆曾经被纳入NDK(见https://stackoverflow.com/a/22017733/192373),但在过去的3年里,谷歌一直在努力阻止与它的联系。
您可以自己构建 libcutils.so 作为AOSP的一部分,或者您可以从设备adb pull
或甚至从兼容的模拟器中{
"google": {
"families": [
"Alegreya Sans:400,400italic,700,700italic",
"Arvo:400,400italic,700,700italic",
"Averia Libre:400,400italic,700,700italic",
"Averia Sans Libre:400,400italic,700,700italic",
"Josefin Sans:400,400italic,700,700italic",
"Josefin Slab:400,400italic,700,700italic",
"Karla:400,400italic,700,700italic",
"Lobster Two:400,400italic,700,700italic",
"Lora:400,400italic,700,700italic",
"Montserrat Alternates:400,400italic,700,700italic",
"Playfair Display SC:400,400italic,700,700italic",
"Raleway:700italic,700,400italic,400:latin",
"Roboto Condensed:400,400italic,700,700italic",
"Roboto:400,400italic,700,700italic",
"Rubik:400,400italic,700,700italic",
"Sansita:400,400italic,700,700italic",
"Ubuntu:700italic,700,400italic,400"
]
}
}
。您也可以在Web上的某处找到此二进制文件(例如GitHub)。
最后一击是公布的Android 7.0 Nougat系统链接更改。 TL; NR:任何依赖此库的应用程序都无法在未来的Android版本上运行。
答案 1 :(得分:1)
您需要安装较旧版本的ndk Android NDK,修订版10e(2015年5月)为我工作,然后使用该ndk-build