在将用户参数和函数指针封装到一个函数指针里面(这正是ffi要做的,因此closure API一定要实现)。
2.2 Android Libffi调用
在/android2.1/dalvik/vm/Dvm.mk中有以下语句:
ifeq ($(MTERP_ARCH_KNOWN),false)
# unknown architecture, try to use FFI
LOCAL_C_INCLUDES += external/libffi/$(dvm_os)-$(dvm_arch)
LOCAL_SHARED_LIBRARIES += libffi
LOCAL_SRC_FILES += \
arch/generic/Call.c \
arch/generic/Hints.c \
mterp/out/InterpC-allstubs.c
在android2.1里,对于未知架构android将调用libffi来处理不同语言的函数调用问题,调用的源文件位于/android2.1/dalvik/vm/arch/generic/Calls.c和Hints.c;而对于确定的架构(例如ARM、X86、MIPS等)则采用他们架构相关的方法来处理该问题。