博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用NDK编译C/C++为.so文件
阅读量:1982 次
发布时间:2019-04-27

本文共 1846 字,大约阅读时间需要 6 分钟。

概述:

Android NDK是一系列工具的集合。帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

下载地址: 

创建目录jni,比如F:\NDK-Build\jni,要编译的C/C++代码在该目录的外层(即F:\ClientSocketEngine

jni目录下为mk文件

其中Android.mk文件如下

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := u3dtools_sharedLOCAL_MODULE_FILENAME := libu3dtools# 配置自己的源文件目录和源文件后缀名MY_FILES_PATH  :=  $(LOCAL_PATH) \                   $(LOCAL_PATH)/../../ClientSocketEngineMY_FILES_SUFFIX := %.cpp %.c# 递归遍历目录下的所有的文件rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))# 获取相应的源文件MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) ) MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)MY_SRC_LIST  := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES)) MY_SRC_LIST  := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)# 去除字串的重复单词define uniq =  $(eval seen :=)  $(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))  ${seen}endef# 递归遍历获取所有目录MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) )MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS))# 赋值给NDK编译系统LOCAL_SRC_FILES  := $(MY_SRC_LIST)#LOCAL_C_INCLUDES := $(MY_ALL_DIRS)LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../ClientSocketEngineinclude $(BUILD_SHARED_LIBRARY)

 

Application.mk文件如下

APP_STL := gnustl_staticAPP_CPPFLAGS := -frtti -DCOCOS2D_DEBUG=1 -fexceptions

build_native.bat脚本如下

@set "NDK_ROOT=E:/InstallPack/android-ndk-r9d"@set "DIR=%cd%"@REM ... use paths relative to current directory@set "APP_ROOT=%DIR%/.."@set "APP_ANDROID_ROOT=%DIR%"@echo NDK_ROOT = %NDK_ROOT%@echo APP_ROOT = %APP_ROOT%@echo APP_ANDROID_ROOT = %APP_ANDROID_ROOT%@echo Using prebuilt externals@"%NDK_ROOT%/ndk-build.cmd" pause

运行build_native.bat脚本,生成libu3dtools.so文件,搞定

你可能感兴趣的文章
攻防世界web进阶区FlatScience详解
查看>>
攻防世界web进阶区ics-04详解
查看>>
攻防世界web进阶区Cat详解
查看>>
攻防世界web进阶区bug详解
查看>>
攻防世界web进阶区ics-07详解
查看>>
攻防世界web进阶区unfinish详解
查看>>
攻防世界web进阶区i-got-id-200超详解
查看>>
sql注入总结学习
查看>>
leetcode46 全排列
查看>>
leetcode121 买卖股票的最佳时机
查看>>
leetcode 122 买卖股票的最佳时机II
查看>>
leetcode 309 最佳买卖股票含冷冻期
查看>>
leetcode 714 买卖股票的最佳时机含手续费
查看>>
leetcode3 无重复字符的最长子串
查看>>
leetcode 76 最小覆盖子串
查看>>
leetcode 1143. 最长公共子序列
查看>>
leetcode 83. 删除排序链表中的重复元素
查看>>
智能体 Intelligent Agent
查看>>
Network Compression网络压缩(一)
查看>>
GAN系列(零)—— GAN的发展(两条路线)
查看>>