成都网站建设设计

将想法与焦点和您一起共享

AndroidNDK生成及连接静态库与动态库的方法-创新互联

对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用。但是在某些情况下,我们需要借助C/C++来写JNI本地代码。比如,在使用跨平台的第三方库的时候;为了提升密集计算性能的时候(这种情况下往往还可能会直接使用汇编语言)。因此,这里我将为大家介绍如何给其它开发者创建可供使用的静态库或动态库。而应用开发者如何去连接这些生成的静态库或动态库。由于现在Android Studio已经比较成熟,因此以下描述将基于Android Studio的目录布局。

创新互联公司是专业的天峨网站建设公司,天峨接单;提供网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行天峨网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

在Android Studio的一个项目工程下,会有一个app文件夹,这个文件夹主要存放我们编写应用的所有代码以及相关其它资源。如果我们需要写JNI,那么就需要在这个目录下创建jni文件夹。jni文件夹里必须包含Android.mk文件、Application.mk文件以及你所要编译的源文件。下面我们先给出编译生成提供给第三方开发者使用的静态库与动态库的Android.mk文件内容:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# 编译后生成的模块名,在Java端使用System.loadLibrary加载模块的的时候直接用此名
LOCAL_MODULE := my_blocks

# LOCAL_SRC_FILES用于添加源文件(可以是.c,.cpp,.s等)
LOCAL_SRC_FILES := my_block_test.c
LOCAL_SRC_FILES += my_blocks_data.c
LOCAL_SRC_FILES += my_runtime.c

# 条件预编译,如果当前架构为ARMv7以下的架构,则定义MY_NO_CSWAP这个宏
ifeq ($(TARGET_ARCH_ABI),armeabi)
  LOCAL_CFLAGS := -DMY_NO_CSWAP=1
endif

# 连接系统编译出的静态库
LOCAL_STATIC_LIBRARIES := cpufeatures
LOCAL_STATIC_LIBRARIES += ld.gold

LOCAL_LDLIBS := -llog

# 用于生成动态库
# include $(BUILD_SHARED_LIBRARY)

# 用于生成静态库
include $(BUILD_STATIC_LIBRARY)

$(call import-module,cpufeatures)

分享文章:AndroidNDK生成及连接静态库与动态库的方法-创新互联
网页路径:http://chengdu.cdxwcx.cn/article/hpjgj.html