我正在尝试根据所选的 ABI 库在 Android NDK 项目中控制我的 C 代码。
首先,我希望 NDK 库方法用字符串回答使用的 ABI。我做了几次尝试,但都未能提供结果。
在 Application.mk 我定义
APP_ABI := all
Android.mk 看起来像这样:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -D$(TARGET_ARCH)
LOCAL_MODULE := get_current_abi
LOCAL_SRC_FILES := get_current_abi.c
include $(BUILD_SHARED_LIBRARY)
最后我的 C 文件看起来像这样:#include
#include
jstring
Java_com_example_abifinderlib_AbiFinder_getCurrentAbi(JNIEnv* env, jobject thiz)
{
#if defined armeabi
return (*env)->NewStringUTF(env, "armeabi");
#elif defined armeabi-v7a
return (*env)->NewStringUTF(env, "armeabi-v7a");
#elif defined mips
return (*env)->NewStringUTF(env, "mips");
#elif defined x86
return (*env)->NewStringUTF(env, "x86");
#else
return (*env)->NewStringUTF(env, "unknown");
#endif
}
对于所有体系结构,结果字符串始终是“未知的”。(在硬件上测试 arm v6 和 arm v7,在模拟器上测试其他)
我可以在 make 文件中看到 $(TARGET_ARCH) 的实际内容吗?我可以只在我的 c 文件上运行预处理器并查看预处理结果吗?
或者我是直的并且需要一种完全不同的方法?