记录第一次使用jni编译so包的入门操作
1、配置
下载自己相对应的ndk平台版本后配置到studio

在local.properties加入路径

在gradle.properties文件添加

2、创建工具类(注意方法都是native的)

3、生成.h文件
打开terminal,cd到app/scr/main/java下,然后执行javah –jni <包名+类名>,此时.h文件就生成了。

注意:jdk10后移除了javah的相关功能,使用javac -h代替
比如上面的javah -jni com.example.jni.NativeKit替代为javac -h . com\example\jni\NativeKit.java
(记住不要忽略-h后的那个小点)
4、创建jni目录

5、 实现native方法
将.h文件拷贝到jni目录下,并创建相应的.cpp文件,实现.h文件定义的方法。(方法名不要改动)
比如,这里是.h生成的方法:

然后在c++文件中实现

PS:
如果出现error: base operand of '->' has non-pointer type '_JNIEnv' 或者
Error:(15, 1) A problem occurred evaluating project ':app'.
> Could not find method ndk() for arguments [build_aw0o6zph0cbkllbghhznstzhf$_run_closure1$_closure4@4202656a]
on project ':app' of type org.gradle.api.Project.的错误时,请检查你使用的文件后缀。
如果你使用.c的后缀,就必须用C语言来写:
return (*env)->NewStringUTF(env, "返回值");
如果是.cpp的后缀,那么就必须用c++来写:
return env->NewStringUTF((char *)"这是square的方法");
6、添加moduleName(so文件名)
修改build.gradle文件,添加moduleName,值即为生成的.so文件名。

这里注意一定要确定把ndk这段声明放在了defaultConfig里,不要问我为什么强调这个,心子痛...
7、运行app,AS将自动编译so文件

可在工程目录下 app\build\intermediates\ndk\debug\obj\local目录查看各平台的so文件。

参考:http://blog.csdn.net/huangximin1990/article/details/50441400
记录第一次使用jni编译so包的入门操作的更多相关文章
- 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)
原文网址:http://blog.csdn.net/qiuxiaolong007/article/details/7860481 记于正文前:环境是ubuntu10.10,android 源码是2.0 ...
- 韩顺平细说Servlet视频系列意外收获之用命令行编译带有包的java类解决方案
命令行编译带有包的java类 在命令行编译这一块,基本上都是新手入门时了解一下,然后就直奔IDE而去.这样固然没错,就怕那些--.然后今天在视频中看到了这种方法,觉得可能会用到,所以就记录下来了,以备 ...
- linux 中部署ant编译的包中缺少问题
今天遇到在window上部署ant编译的包,能运行正常,但部署在linux中出现跳不进jsp中,出现404问题,后来经过排查在jsp中<%@taglib prefix="c" ...
- jad 反编译 jar包
1.利用winrar解压缩jar包 或者CMD>jar -xvf test.jar -C classes 2.下载jad,利用jad反编译jar包 CMD>[jad_home]/jad.e ...
- jni编译non-numeric second argument to `wordlist' function错误
在jni编译过程中,遇到non-numeric second argument to `wordlist' function错误,个人遇到这个错误的原因,是因为从windows中拷贝了Android. ...
- MySQL免编译二进制包安装简记
相比较于MySQL的源代码安装来说.免编译二进制包的速度实在是快了太多,而且性能损失也不是很大,同时具有一定的定制性.所以,如果没有特殊的 需求,尽量用MySQL免编译二进制包来安装MySQL. 1. ...
- 编译APR包报错 rm: cannot remove `libtoolT': No such file or directory
centos 6 编译APR包报错 在当前apr 目录 : #Vi configure +31880 ,注释掉此行 再次编译即可.
- MatLab 2014a编译jar包时mcc无法使用的问题
http://blog.csdn.net/heroafei/article/details/43273373 MatLab 2014a编译jar包时mcc无法使用的问题 2015-01-29 16:5 ...
- Ubuntu 16.04 kinetic 编译指定包
编译指定包 catkin_make -DCATKIN_WHITELIST_PACKAGES=baoming 使用上述命令后catkin_make会一直编译上面那个包,想要编译全部包,使用 catkin ...
随机推荐
- scala中json与对象的转换
遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换.如下 case class Book (author: Strin ...
- activiti工作流之Eclipse的Eclipse BPMN 2.0 Designer无法安装或者(安装后无法重复打开*.bpmn)
1.首先.既然学习activiti工作流,连官网和相应文件都没有下载就说不过去了 这是官网下载:http://www.activiti.org/download.html 2.对于下载后的activi ...
- Atitit 大龄软件工程师的出路attilax总结
Atitit 大龄软件工程师的出路attilax总结 1.1. 创业vs打工 联合创始人 合伙人1 1.2. 项目管理 架构师1 1.3. 软件培训 讲师2 1.4. 研究院研究员2 1.5. 继续博 ...
- Vivado下生成及烧写MCS文件
Jtag模式: 1.打开Open Hardware Manager 2. Tools ->Auto Connect 3.TCL输入: write_cfgmem -format MCS -size ...
- 2-7-集合运算(A-B)∪(B-A)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第2章 线性表 - 集合运算(A-B)∪(B-A) ——<数据结构>-严蔚敏.吴伟民版 ★有疑问先阅读★ 源码使用说明 链接☛☛☛ <数据结构-C语言 ...
- mysql++ Query
mysqlpp:: Query类存储了Connection的指针,可以用它进行SQL语句的增删改查. 连上数据库后,使用mysqlpp::Connection::query()获取Query对象 Qu ...
- [转] lua 获取本地当月天数
亲测,无误. 原文传送门:lua 获取本地当月天数 开发中有用到,记录一下. local year,month = os.date("%Y", os.time()), os.dat ...
- HTTP Basic Authentication认证
http://smalltalllong.iteye.com/blog/912046 ******************************************** 什么是HTTP Basi ...
- 【转】【MySQL报错】ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39.
之前在centos6.4系统安装的是自带的mysql 5.1版本,后来升级到了5.6版本,执行以下命令报错 在网上查找原因说说因为升级不当导致,执行以下命令即可正常执行命令 mysql_upgrade ...
- kkpager的改进,Ajax数据变化但是页码不变的有关问题
kkpager的改进,Ajax数据变化但是页码不变的问题kkpager 是一个简单分页展示插件,需要依赖jquery.下载地址:http://www.oschina.net/action/projec ...