Android studio ndk-build方式开发

2023-08-23 1534阅读

温馨提示:这篇文章已超过578天没有更新,请注意相关的内容是否还可用!

一切都要靠自己的运气,他得到的并不是我自己的。本文主要介绍android studio ndk-builld开发相关的知识,希望对您有所帮助。之前都是在Ubuntu下开发的,项目也老了。最近想转用android studio,不太习惯。Android studio提供了两种不同的ndk开发方式,使用cmake自动编译脚本和类似于eclipse上的ndk-build。如果你想在第三方源码库上进行二次开发,或者需要关联多个源码库,使用ndk-build感觉更灵活,或者不用老经验去踩那么多坑。环境搭建请参考android开发者文档,里面有详细的说明#link-gradle 接下来,在android studio中构建一个ndk示例项目。刷新android studio的工程目录即可看到。如果ndk配置发生变化,需要清理项目

【Android studio ndk-build开发】一切都要靠自己的运气,他得到的并不是我自己的。 本文主要介绍android studio ndk-builld开发相关的知识,希望对您有所帮助。

之前都是在Ubuntu下开发的,项目也老了。 自然而然的就顺理成章的使用eclipse来做各种android开发了。 最近想转用android studio,不太习惯。 Android studio提供了两种不同的ndk开发方式,使用cmake自动编译脚本和类似于eclipse上的ndk-build。 两者的区别在于,如果要直接开发新的单个模块,可以考虑使用cmake,而ide有自己的辅助插件,让程序员使用起来更加得心应手。 如果你想在第三方源码库上进行二次开发,或者需要关联多个源码库,使用ndk-build感觉更灵活,或者不用老经验去踩那么多坑。 环境搭建请参考android开发者文档,里面有详细的说明#link-gradle 接下来,在android studio中构建一个ndk示例项目。 1、新建一个通用工程,添加jni文件夹及子目录include存放头文件,src存放源代码

文章图片

2.在java代码中,新建TestJni类来调用native方法,并使用javah命令生成头文件

文章图片

3 创建对应的方法文件并返回主目录

在头文件中声明类_利用ndk产生头文件_在头文件声明函数

文章图片

? classpath:类搜索路径,这里是指从当前bin目录开始搜索? d:将生成的头文件放到当前jni目录下? 名称+类名.h)注意:-d和-o只能使用其中一个参数。刷新android studio的工程目录即可看到

文章图片

上面的javah命令可以在外部工具中自定义,方便以后使用。 文件->设置->工具->外部工具点击添加

文章图片

这样就可以右键使用需要包含native方法的文件4.cmake方法会根据脚本提供自动生成的Android.mk脚本,但是ndk-build方法需要自己编写编译配置脚本 Android.mkLOCAL_PATH := $(call my -dir)include $(CLEAR_VARS)LOCAL_C_INCLUDES += $(LOCAL_PATH)/include \\ $(LOCAL_PATH)/srcLOCAL_SRC_FILES := src/hello-jni.cLOCAL_MODULE := NativeLibinclude $( BUILD_SHARED_LIBRARY)Android.mk文件必须以LOCAL_PATH变量 开始定义。 LOCAL_PATH := $(call my-dir) Android 构建系统使用 LOCAL_PATH 来定位源文件。 由于将此变量设置为硬编码值是不合适的,因此 Android 构建系统提供了一个名为 my-dir 的宏。 通过将此变量设置为 my-dir 宏函数的返回值,将其放置在当前目录中。 Android 构建系统将 CLEAR_VARS 变量设置为clear_vars.mk 片段的位置。

在头文件中声明类_在头文件声明函数_利用ndk产生头文件

包含 Makefile 片段可以清除 LOCAL_PATH 以外的 LOCAL_ 变量,例如 LOCAL_SRC_FILES、LOCAL_MODULE 等。 include $(CLEAR_VARS) 这样做是因为 Android 构建系统在一次执行中解析多个构建文件和模块定义,而 LOCAL_ 是全局变量。 为了通过明确冲突来避免冲突,每个本机组件称为模块。 LOCAL_MODULE 变量用于为这些模块提供唯一的名称。 下面的代码将模块的名称设置为 NativeLib。 LOCAL_MODULE := NativeLib 其实LOCAL_MODULE := libNativeLib 的结果也是可以的。 编译完成后,构建系统会自动添加适当的前缀和后缀,生成动态共享文件。 如果之前已经添加过lib,还是一样的,如: libNativeLib.so 。 在路径“项目路径\\unit2\\app\\build\\intermediates\\ndkBuild\\debug\\obj\\local\\architecture type\\”中可以看到。 使用 LOCAL_C_INCLUDES 指定头文件的搜索路径,使用 LOCAL_SRC_FILES 指定源文件列表。 多个文件可以使用多个源文件名,并用空格分隔。

至此,一个原生项目已经简单描述了。 编译和生成实际模块的构建系统还需要包含适当的构建系统片段,具体取决于要生成的模块的类型。 include $(BUILD_SHARED_LIBRARY) 其中 BUILD_SHARED_LIBRARY 是指向生成的共享文件的脚本。 文件生成格式有以下三种 BUILD_STATIC_LIBRARY: 编译为静态库。

BUILD_SHARED_LIBRARY:编译为动态库 BUILD_EXECUTABLE:编译为 Native C 可执行程序。 这里就不展开展开了。 在android studio中编译原生项目,还需要配置module(app)目录下的build.gradle。 以下是需要添加的 android { defaultConfig { ndk{ abiFilters "armeabi","armeabi-v7a","x86" } } externalNativeBuild{ ndkBuild{ path "src/main/jni/Android.mk" } }} apk在不同的硬件平台运行时,需要根据CPU架构调用不同的共享文件。 ndk{ abiFilters "armeabi","armeabi-v7a","x86"} 会生成三个适合不同cpu架构的共享文件,

文章图片

如果不配置,系统默认生成所有支持的机架包。 如果ndk配置发生变化,需要清理项目

文章图片

externalNativeBuild{ ndkBuild{ path "src/main/jni/Android.mk" } }选择cmake或者ndk-build,这里需要写下脚本路径然后运行工程看看效果。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]