步骤可以分成如下步骤:
1、打开SDKManager
2、配置NDK环境
3、新建项目
4、自定义native方法
5、生成c++头文件
6、新建cpp文件实现native方法
7、配置CMakeLists.txt文件
8、调用native方法
9、编译工程生成so文件
运行结果如图

1、打开SDKManager
打开sdkManager下载CMake和LLDB

2、配置NDK环境

3、新建项目
建立项目的时候要勾选Include C++ support

项目建立完毕后,工程目录如下,cpp文件夹是系统自动生成的:

4、自定义native方法
接下来开始写自定义的一个native方法,新建一个Demo.java文件,里面写一个add求和的native方法,如下 所示。

5、生成c++头文件
然后在android studio控制台Terminal进入Demo.java所在的目录执行javac Demo.java,如下所示。(这里要注意配置windows端的java环境,具体可以在网上找一下配置方法)

执行完毕后Hello.java的同级目录下面会生成一个Demo.class文件,证明这一步成功

然后还是在Terminal控制台上面回退目录到app/src/main下面执行命令
javah -d jni -classpath ./java com.example.asus.myapplication.Demo,后面是包名+文件名不带后缀,请改成自己的包名,如图

命令执行完毕后会在app/src/main目录下面生成一个jni文件夹,文件夹下面有一个.h后缀文件,如图:

6、新建cpp文件实现native方法
同级目录下面新建一个c++ source文件去实现native方法,文件名随意起,如图:

把com_example_asus_myapplication_Demo.h中的内容复制一份到demojni.cpp中,并添加com_example_asus_myapplication_Demo.h的引用(引用要改成引号,不然下面的方法会报红),删掉其他代码,如图

7、配置CMakeLists.txt文件

接下来是关键,在android studio3.0以前是没有此步骤的,大家看工程目录里面有一个CMakeLists.txt文件,这个文件是新建项目是自动生成的,里面已经写好了系统自动生成的
cpp/native-lib.cpp文件的配置,打开CMakeLists.txt文件,如下,

上图中native-lib是编译后生成的so文件名字,可以自定义,我们也仿照系统格式自己添加一个,路径一定要写对,添加完成之后,如下:

然后还是在CMakeLists.txt中,target_link_libraries中添加上我们自己的so名字,如下图

到此我们基本上已经成功了,然后在Demo.java中添加代码如下,添加的library名字一定要和上图中添加的一样:

最后在activity中调用add方法

9、编译工程生成so文件

通过rebuild工程,会在build/intermediates/cmake/debug/obj下面生成各种cpu的so文件。


运行结果如图.

Android studio3.2学习开发JNI并且生成so库教程相关推荐

  1. Android新手如何学习开发一款app?

    毫无疑问,开发一款自己的App对于初学者来说,无论从技术学习,还是找工作(或者装x),都是一大利器.那么如何才能快速上手,开发一款属于自己的app.本篇文章仅以自己的一些经验给更多的Android新手 ...

  2. Android开发实例-自动生成题库的数独

    本系列文章主要介绍如何利用Android开发一个自动生成题目的数独游戏.涉及的知识和技术如下所示: 挖洞算法自动生成数独题目实现自定义View用于绘制数独盘数据库的基本操作 看着市场上千篇一律的数独应 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )

    文章目录 前言 一.加载 libnattive.so 动态库 二. libnattive.so 动态库启动 三. pthread_create 线程开发 四. 线程执行函数 前言 libbridge. ...

  4. linux mp4v2编译,Android 编译mp4 v2 2.0.0生成动态库

    6.最后在jni目录下的终端中输入ndk-build,结果如下: root@zhangjie:/home/zhangjie/mp4v2-2.0.0/jni# ndk-build Android NDK ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

    文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...

  6. Android版Cocos2d-X应用的AnySDK集成Admob管理库教程

    2019独角兽企业重金招聘Python工程师标准>>> 一:要求 1:Cocos2d-X的最新版本 2: AnySDK框架v1.2.3或更高版本 3:AnySDK程序包工具 二:将A ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  8. GCC生成静态库和动态库

    目录 1)阅读.理解和学习材料"用gcc生成静态库和动态库.pdf"和"静态库.a与.so库文件的生成与使用.pdf",请在Linux系统(Ubuntu)下如实 ...

  9. 安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo

    From:Android Studio 3.0 JNI 的实现:https://blog.csdn.net/ziyoutiankoong/article/details/79696279 Androi ...

  10. 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...

最新文章

  1. python中使用html前端页面显示图像预测结果(改进)
  2. 闲鱼发布:十大无用商品、创业雷区、塌房明星,内容劲爆与扎心...
  3. python爬虫爬图片教程_Python爬虫入门教程 5-100 27270图片爬取
  4. 告别.NET生成报表统计图的烦恼 (转)
  5. LLS战队高级软件工程第九次作业敏捷冲刺七
  6. InfluxDB 简介、安装和简单使用
  7. [root@dg1 ~]# su - grid ---切换到grid用户
  8. 有个地方叫做成都,有些菜叫川菜
  9. [收藏]Web创业的10条戒律
  10. R 语言之数据分析高级方法「GLM 广义线性模型」
  11. max导unity注意及解决
  12. C++学习笔记 —— 回合制小游戏案例
  13. 单片机c语言中断嵌套,关于单片机中断嵌套总结
  14. 查看当前python环境_python-环境
  15. 混合开发--vue之mand-mobile 框架引入,解决组件巨大问题
  16. 南京航空航天大学计算机组成原理,2017年南京航空航天大学计算机科学与技术学院829计算机专业基础之计算机组成原理考研题库...
  17. F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
  18. 计算机标准差的按键是什么,在计算器上用标准差键直接求离均差平方和的方法...
  19. 玛里苟斯[清华集训2014 Day1]
  20. “GANs”与“ODEs”:数学建模的终结?

热门文章

  1. C#条件编译,发布多平台和多种选择性的项目
  2. 怎么将后缀为.opt,.frm,.myd,.myi文件还原或者是导入mySQL中
  3. 郁闷的开始--8月21日
  4. Excel 如何使多组数据的饼状图大小一致
  5. ICLR'22 | 基于可微分提示的语言模型少样本微调方法
  6. step-by-step: 夕小瑶版神经网络调参指南
  7. 村上隆首场中国直播,火山同传打造“影院级字幕”
  8. 【每日算法Day 86】面试经典题:把数字翻译成字符串
  9. [TACL18]隐式句法树模型真的能学到句子中有意义的结构吗?
  10. NLP学习—23.基于Transformer的机器翻译实战