Android下如何通过JNI方法向上提供接口总结(2)

这些注册函数是由同目录下的其他.cpp文件中实现,如上面的register_android_server_HelloService(env)这个函数是在com_android_service_HelloService.cpp文件中实现的.那么编译器又是如何知道这点的呢? 答案当然是Android.mk这个文件,打开这个文件,其内容如下:

LOCAL_PATH:= $(call my-dir)   include $(CLEAR_VARS)      LOCAL_SRC_FILES:= \       com_android_server_AlarmManagerService.cpp \       com_android_server_BatteryService.cpp \       com_android_server_InputApplicationHandle.cpp \       com_android_server_InputManager.cpp \       com_android_server_InputWindowHandle.cpp \       com_android_server_LightsService.cpp \       com_android_server_PowerManagerService.cpp \       com_android_server_SystemServer.cpp \       com_android_server_UsbDeviceManager.cpp \       com_android_server_UsbHostManager.cpp \       com_android_server_VibratorService.cpp \       com_android_server_location_GpsLocationProvider.cpp \       com_android_server_connectivity_Vpn.cpp \       com_android_server_HelloService.cpp \       onload.cpp      LOCAL_C_INCLUDES += \       $(JNI_H_INCLUDE) \       frameworks/base/services \       frameworks/base/core/jni \       external/skia/include/core      LOCAL_SHARED_LIBRARIES := \       libandroid_runtime \       libcutils \       libhardware \       libhardware_legacy \       libnativehelper \       libsystem_server \       libutils \       libui \       libinput \       libskia \       libgui \       libusbhost      ifeq ($(WITH_MALLOC_LEAK_CHECK),true)       LOCAL_CFLAGS += -DMALLOC_LEAK_CHECK   endif      LOCAL_MODULE:libandroid_servers      include $(BUILD_SHARED_LIBRARY)  

在LOCAL_SRC_FILE中给出了所有实现文件(cpp文件)的路径,因此编译就能找到各个注册函数对应的实现文件了.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjjjj.html