实际上,我很容易地解决了这个问题。感谢 @auselen 的帮助。
您有一个常规的 Android.mk,在 x86 架构上失败,因为您正在使用的库(libExternalLibrary.so)仅针对 arm 架构提供。您想要基于此库构建一个 .so(libMyLibraryBasedOnExternalLibrary.so)。
1)创建 2 个虚拟的 .cpp 文件 Dummy0.cpp 和 Dummy1.cpp,例如 Dummy0.cpp 如下:
#include <jni.h>
#include <android/log.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <string>
#ifdef __cplusplus
extern "C"
{
#endif
int dummy0 = 0;
#ifdef __cplusplus
}
#endif
然后,编辑构建库的 Android.mk 文件,并将其修改为以下内容:
LOCAL_PATH := $(call my-dir)
ifeq ($(TARGET_ARCH_ABI), armeabi)
else
include $(CLEAR_VARS)
LOCAL_MODULE := ExternalLibrary
LOCAL_SRC_FILES := Dummy0.cpp
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := MyLibraryBasedOnExternalLibrary
LOCAL_SHARED_LIBRARIES := ExternalLibrary
LOCAL_SRC_FILES := Dummy1.cpp
include $(BUILD_SHARED_LIBRARY)
endif
当然,在您的代码中,请确保在应用程序运行在仅限于x86设备上时不要调用该库:
if ((android.os.Build.CPU_ABI.equalsIgnoreCase("armeabi")) || (android.os.Build.CPU_ABI2.equalsIgnoreCase("armeabi"))) {
// Good I can launch
// Note that CPU_ABI2 is api level 8 (v2.2)
// ...
}