Я могу подтвердить, что переход на LOCAL_WHOLE_STATIC_LIBRARIES действительно был решением.Также оригинальный mk пытается быть как с фиксированной, так и с плавающей точкой.Итак, окончательное исправление всего этого:
# This .mk has to be in a folder called jni. Because :(
ROOT := $(call my-dir)
# Build libopus.a (static library)
LOCAL_PATH := ../opus-1.2.1/opus-1.2.1
include $(CLEAR_VARS)
#include the .mk files
include $(LOCAL_PATH)/celt_sources.mk
include $(LOCAL_PATH)/silk_sources.mk
include $(LOCAL_PATH)/opus_sources.mk
LOCAL_MODULE := opus
#fixed point sources
SILK_SOURCES += $(SILK_SOURCES_FIXED)
#floating point sources - this throws badly!
#SILK_SOURCES += $(SILK_SOURCES_FLOAT)
#ARM build
CELT_SOURCES += $(CELT_SOURCES_ARM)
SILK_SOURCES += $(SILK_SOURCES_ARM)
LOCAL_SRC_FILES := \
$(CELT_SOURCES) $(SILK_SOURCES) $(OPUS_SOURCES)
LOCAL_LDLIBS := -lm -llog
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/silk \
$(LOCAL_PATH)/silk/fixed \
$(LOCAL_PATH)/celt
LOCAL_CFLAGS := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT=1 -DDISABLE_FLOAT_API -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno
#LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno
LOCAL_CPPFLAGS := -DBSD=1
LOCAL_CPPFLAGS += -ffast-math -O3 -funroll-loops
include $(BUILD_STATIC_LIBRARY)
# Now create a dynamic library that contains the static library
include $(CLEAR_VARS)
LOCAL_MODULE := opus-share
#LOCAL_SRC_FILES := opus
LOCAL_WHOLE_STATIC_LIBRARIES := opus
include $(BUILD_SHARED_LIBRARY)
Это было построено с использованием Windows NDK, и мне пришлось поместить этот файл (называемый Android.mk) в каталог с именем «JNI». Может быть, есть какая-то хитростьчтобы избежать этого с переменными окружения, но я перестал пытаться бороться с этим.Добавьте к этому исходный код opus 1.2.1 и mk-файлы для конкретной платформы, например:
APP_ABI := arm64-v8a
APP_PLATFORM := android-19
APP_STL := c++_static
APP_BUILD_SCRIPT := Android.mk
, и вы получите файлы .so для Android.Просто измените значение ABI соответствующим образом.