走进AndroidStudio下的NDK(二)

AndroidStudio 工程添加NDK支持 Android studio 添加NDK支持的详细步骤 阅读详情

走进AndroidStudio下的NDK(二)

字数1118  阅读180  评论0 

http://www.jianshu.com/p/d9e9ba3312fc

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。

本文为走进AndroidStudio下的NDK(一)的续篇,主要介绍so包的编译以及如何进行使用,也就是平常我们集成三方SDK时导入的那些so包,最终达到我们能够提供给别人使用so包的程度,从而确保核心c代码的隐私性。接下来,我们就一步一步探索如何生成一个so包提供给别人使用。

项目创建

接着第一篇文章的项目,我们已经可以能够进行java到C的调用,算是已经初步打通了之间的桥梁,具体相互调用和高级的进行c开发,后续文章会陆续讲到,现在主要还是以helloword的项目进行演示。项目目录是这样的:


init project

其中gradle中配置了一个ndk moduleName,指定为hello


ndk moduleName

从目录中可以看到,还自动生成了mk文件,由于在gradle中对ndk就只配置了moduleName,其他都是用的默认配置,因此生成的也是默认mk文件配置,可以看得出mk文件和以前我们在Eclipse中开发NKD差不多一样的。


Android.mk

so包出现

在上面项目的基础上AndroidStudio生成so包是相当方便的,按照上面的配置Rebuild Project,然后找到目录 \app\build\intermediates\ndk\debug\lib 下,这个时候会生成各类ABI版本下的so包,这些so包都是以libhello为名称的,上篇有提到这个名称的格式是固定的,由lib+moduleName组成,在代码中loadlibrary时填写moduleName。


so dir

so使用

AndroidStudio中so包存放的目录默认是在main/jniLibs下面,如果没有这个目录可以创建并复制所有平台的so包到该目录下,一般情况我们比较倾向于把这些so包和jar包都放在app/libs下面,同样将so全部拷贝到libs下面,也是可以,不过需要在gradle中进行一项目录配置,如下


jniLibs srcDir

添加这个配置,就是将main下面的确实jnilibs目录指定为libs,在系统加载so的时候会去libs目录下加载。

然后,这个时候你可以删掉jni目录下的c文件,删掉gradle中的moduleName配置,就如平常集成三方SDK时一样,拷贝so包到libs下面,跑起来就可以了,不过这个时候java类中的native方法可能会报红,因为移除c文件,没有链接到,但是不影响的,忽略之即可。


PPPPPS

到上面那一步其实就已经完成so包的创建和使用了,在使用过程中我们基本都是使用的默认配置,当然我们可以进行在gradle中配置以致自己项目所需。在项目创建的基础上:

  • 添加需要支持的lib包: ldLibs("log")
  • 指定编译出所需的平台:abiFilters("armeabi", "armeabi-v7a", "x86") ,这里指定这三个
  • STL支持:stl = "system", STL目前可支持 system(系统默认的最小支持的C++运行时库);stlport_static(以静态链接的方式使用stlport版本的STL);stlport_shared(以动态链接的方式使用stlport版本的STL);gnustl_static(以静态链接的方式使用gnu版本的STL)
  • cFlags标记: cFlags("-std=c++11")

ndk external config

Rebuild Project之后,对应会生成我们知道的so包


so indicated

小小总结一下

使用AndroidStudio进行JNI开发相对来说比以前在Eclipse中开发更加简便了,也不需要Android.mk,Application.mk等文件,这些完全可以在gradle中进行配置,具体需要配置那些信息可以参考gradle中的NdkOptions类,这个类就是上面配置ndk节点的对应java类。我们只需要关系写c文件以及和java直接的相互调用即可,省去了很多的麻烦,接下来,就可以玩转JNI开发了,前提是你要擅长C哦~~~骚年,玩起来吧!!!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

手把手教你用Apollo Dreamview调试自动驾驶感知模块(附数据包下载) 本文详细介绍了如何使用百度Apollo平台的Dreamview工具调试自动驾驶感知模块,包括环境配置、数据加载、感知问题定位和多传感器融合调试等关键步骤。通过实战案例和参数调整技巧,帮助开发者快速掌握自动驾驶感知模块的调试方法,提升开发效率。 阅读详情

相关推荐

Android以太网开关流程分析

Android以太网开关流程分析 一、引言   在Android 以太网服务启动流程中我们启动了EthernetService(ES),NetworkManagementService(NMS)等服务,其中ES作为Binder的服务端,向客户端EthernetManger提供了调用接口的引用。因此,应用可以通过EthernetManger来访问以太网的相关接口。本篇文章将从APP调用以太网的使能和关闭的接口流程作为切入点来分析,以太网框架中,上层app是如何将指令传递到底层。图1-1所示为以太网使能和关闭

franc521的博客 6112

NDK笔记一 20160225

解决Type ‘JNIEnv’ could not be resolved 右键点击 工程名 ,选择菜单 [Properties], 弹出 “Properties for 工程名” 窗口, 在窗口左窗栏中选择 C/C++ General -> Paths and Symbols , 在窗口右窗栏中选择 Includes 选项页, 在 Language 栏中的 GNU

a346492443的博客 677

嵌入式开源项目哪里找

对比产生的伤害是经验思考积累下的差距,知道自己不知道什么然后前进去追寻。

quanquanxiaobu的博客 3938

Android NDK开发入门

接触Android有一段时间了,NDK算是一道坎,因为对c语言不熟悉,所以也没怎么去接触这一块,但是最近的学习,越发的觉得,如果想让app能有更高的效率,比如在图像的处理方面,游戏开发方面,甚至于要做一些涉及系统层面的操作时,不可避免的要去用到NDK。通过利用c/c++的能力来弥补java的缺点。 NDK的好处: 1. 提高程序的执行效率 2. 代码保护,java层容易被反编译,但是ndk层

徒步行走于未知,爱上呼吸空气 860

56-FMC连接器电路设计

FMC连接器电路设计

weixin_66510961的博客 4722

量化交易新手必看:如何用vnpy+Tushare轻松获取A股历史数据(附完整代码)

本文为量化交易新手提供了使用vnpy和Tushare构建A股历史数据获取系统的完整指南。通过详细的代码示例,手把手教你搭建环境、封装数据获取引擎,并实现日线等数据的格式转换与本地存储,为策略回测与分析奠定坚实的数据基础。

weixin_29098117的博客 378

走进AndroidStudio下的NDK(一)

走进AndroidStudio下的NDK(一) 字数208 阅读325 评论6 喜欢1 http://www.jianshu.com/p/9aff422204eb 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。 这一篇文章主要介绍在AndroidStudio环境如何搭建JNI开发环境,并通过一个helloword的方式了解进行JN

Kodulf的专栏 832

mybaits-plus通用CRUD详解及代码案例

文章目录mybaitsplus通用CRUD插入操作方法定义测试用例mybaitsplus主键生成策略设置自增主键设置输入主键:UUID:ID_WORKER_STR:ID_WORKER:更新操作根据id更新方法定义:方法步骤根据条件更新方法定义:更新步骤:根据条件更新(可以更新NULL)删除操作根据id删除方法定义:删除步骤:根据 entity 条件删除方法定义:删除步骤:根据ID 批量删除方法定义:删除步骤:查询操作根据id查询方法定义:查询步骤:根据id批量查询方法定义:查询步骤:根据 entity 条件

流楚丶格念的博客 3405

Android-Studio下的JNI开发:NDK的配置,kotlin数组长度

● 在菜单栏找到"File"-“Settings”,打开设置界面; ● 找到"Appearance & Behavior"-“System Settings”-"Android SDK"选项,然后切换到"SDK Tool"选项卡; ● 然后找到NDK打钩; ● 点击"Apply"按钮,然后在弹出窗口中点击"OK",即可自动下载; ● 等待自动下载安装完成,点击"Finish"按钮完成安装。 如下图所示: Android Studio默认安装ND

sa3221sa的博客 3681

深入浅出块I/O子系统(四)请求处理过程

BIO请求处理的流程 函数scsi_request_fn()代码(摘自文件drivers/scsi/scsi_lib.c) (1)static void scsi_request_fn(struct request_queue *q) (2)int scsi_dispatch_cmd(struct scsi_cmnd *cmd) { host->hostt->queuecommand(host, cmd) } (3)struct sas_internal *i sas_queuec

sinat_37817094的博客 1347

笔试题-2023-大疆-数字IC设计【纯净题目版】

笔试题-2023-大疆-数字IC设计【纯净题目版】

w0shishabi的博客 2511

Android-studio的ndk

本篇介绍Android-studio下的ndk的配置教程

k393393的博客 1616

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

AndroidStudio NDK开发环境配置及示例

AndroidStudio NDK开发环境配置及示例 版本说明 版本 作者 日期 备注 0.1 loon 2020.8.26 初稿 目录 文章目录AndroidStudio NDK开发环境配置及示例版本说明目录一、Android Studio NDK环境配置1、下载ndk和工具:2、配置项目的sdk和ndk二、NDK示例工程及简单分析三、最后 首先安装好AndroidStudio及SDk环境配置,这个我之前已经总结过了: https://blog.youkuaiyun.com/weixin_395

逍遥游的博客 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android studio ndk 目录,走进AndroidStudio下的NDK(一)

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。这一篇文章主要介绍在AndroidStudio环境如何搭建JNI开发环境,并通过一个helloword的方式了解进行JNI开发的步骤。开发编译环境AndroidStudio 2.1.2SDK 23.0.3NDK 12.1.2977051NDK安装与配置首先创建一个Android项目工程,File-->New...

weixin_36450592的博客 2770

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

AndroidStudio中的NDK开发初探

前段时间由于做比赛的事,一直都没时间写博客,现在终于可以补上一篇了,一直想学习一点NDK开发的知识,但是迟迟没有动手,正好有一个NDK相关的项目机会,便查阅了一些资料,遂将学习的一些心得方法记录于此。

写代码的林克 1万+

走进AndroidStudio下的NDK

这一篇文章主要介绍在AndroidStudio环境如何搭建JNI开发环境,并通过一个helloword的方式了解进行JNI开发的步骤。 开发编译环境 AndroidStudio 2.1.2SDK 23.0.3NDK 12.1.2977051 NDK安装与配置 首先创建一个Android项目工程,File-->New-->New Project,一路下一步就好,最后finish创建完

Liyunlong 3555

AndroidStudio NDK环境3种搭建方式

AndroidStudio NDK环境3种搭建方式 转载。 https://blog.youkuaiyun.com/zhang_jun_ling/article/details/85621427 一、前言 如今Android开发IDE都是使用的AndroidStudio,之前我写过一篇文章介绍的是如何在Eclipse中搭建NDK环境 ...

weixin_30348519的博客 610

AndroidStudio使用NDK配置方法

配置Gradle生成so 编译多个模块 关联Androidmk到Gradle 使用cmake 配置Gradle生成so在AndroidStudio2.1及以前我是通过下面的方式配置NDK的,不知道是从哪个版本开始的,我第一次在AS上使用NDK的时候用的就是AndroidStudio2.1了。首先在gradle.properties里面添加android.useDeprecatedNDK = true

weiersyuan的专栏 1万+

Android NDK学习笔记15-配置AndroidStudio

现在大家越来越多的使用AndroidStudio进行Android开发,那么今天就和大家一起交流一下AndroidStudio开发NDK的配置方法。 AndroidStudio配置NDK 通常我们有两种方法实现配置 1手动方式配置: 1.在Google的官方网站下...

112

AndroidStudio搭建NDK开发环境

两年前在公司电脑上搭建过NDK开发环境,很久没有使用过了。最近,闲来无事,在笔记本上搭一下Ndk开发环境,记录一下AndroidStudio搭建DNK开发环境的过程。 一、下载NDK 去开发者网站下载ndk。地址:https://developer.android.google.cn/ndk/downloads/index.html。如下图所示,下载对应版本的ndk。 二、解压NDK到S...

zhaojun的博客 2万+

AndroidStudio 配置NDK

获取NDK方式 1.网站上下载NDK安装包 地址:https://developer.android.google.cn/ndk/downloads/ 2.利用AndroidStudio下载 按步骤选择NDK包,然后进行下载 配置NDK的环境变量 桌面 - 我的电脑 右键 - 属性,然后按照下面步骤,添加系统变量 这里新创建的系统变量是 变量名:NDK-ROOT 变量值:即NDK下载安装后的路径 点击确定后,在系统变量中找到Path,选择编辑 选择新建,然后添加内容 .

木头小颖的博客 3897

NDK 编译(二)—— NDK 编译与集成 FFmpeg

在使用 NDK 进行音视频开发时,势必会用到 FFmpeg,因此我们要知道如何编译 FFmpeg 并将其集成到 Android 项目中。

tmacfrank 3390

如何在AndroidStudio中使用cmake编译NDK

一、概述      之前由于AS没有强制,所以也就守旧一直沿用以前的NDK开发方法,在gradle.properties添加android.useDeprecatedNdk=true的属性。可是AS3.0以后被强制必须使用Cmake编译了,不得已才来学学,终于发现了这东东的好处。Cmake是AS在2.2中提出的更加方便的JNI开发的构建工具,相当于之前使用是NDK-BUILDE,。 Cm

伊苏Smoyan的博客 6604
上一篇: 走进AndroidStudio下的NDK(一)
下一篇: Android Studio:正确引入so文件的方法
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值