JNI常见问题(问题查询笔记)2

文章链接:http://www.liuschen.com

1.编译(ndk-build):

Android.mk文件:

LOCAL_PATH := $(call my-dir):指向编译目标文件的位置,这里是本目录,开头必填项

include $(CLEAR_VARS):清除之前系统中存在的LOCAL_XXX变量,因为是全局的

LOCAL_MODULE:编译成为模块的名字

LOCAL_SRC_FILES:编译包含的源文件,需要注意看Android.mk文件中的LOCAL_SRC_FILES选项是否包含了必要文件(不要忘了自己写的那个连接Java的调用文件),可以这样写来包含文件夹下的所有c文件LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.c)

LOCAL_LDLIBS:依赖库,连接的是NDK目录下的android-ndk-r9b\platforms\android-19\arch-arm\usr\lib中的so文件

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true:忽略掉未定义的错误

LOCAL_ARM_MODE := arm:指定编译的指令集

LOCAL_PRELINK_MODULE :Prelink利用事先链接代替运行时链接的方法来加速共享库的加载

LOCAL_MODULE_TAGS :=user eng tests optional
	user: 指该模块只在user版本下才编译
	eng: 指该模块只在eng版本下才编译
	tests: 指该模块只在tests版本下才编译
	optional:指该模块在所有版本下都编译

结尾要指向一个编译选项:

  • include $(BUILD_STATIC_LIBRARY) :编译成为一个静态库,不能被项目引用,用来生成动态库
  • include $(BUILD_EXECUTABLE) :编译成为一个可执行的本地程序
  • include $(BUILD_SHARED_LIBRARY):编译为一个共享库,.so文件,我们通常用的

TO BE CONTINUE

Loading Disqus comments...
Table of Contents