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包的入门操作的更多相关文章

  1. 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)

    原文网址:http://blog.csdn.net/qiuxiaolong007/article/details/7860481 记于正文前:环境是ubuntu10.10,android 源码是2.0 ...

  2. 韩顺平细说Servlet视频系列意外收获之用命令行编译带有包的java类解决方案

    命令行编译带有包的java类 在命令行编译这一块,基本上都是新手入门时了解一下,然后就直奔IDE而去.这样固然没错,就怕那些--.然后今天在视频中看到了这种方法,觉得可能会用到,所以就记录下来了,以备 ...

  3. linux 中部署ant编译的包中缺少问题

    今天遇到在window上部署ant编译的包,能运行正常,但部署在linux中出现跳不进jsp中,出现404问题,后来经过排查在jsp中<%@taglib prefix="c" ...

  4. jad 反编译 jar包

    1.利用winrar解压缩jar包 或者CMD>jar -xvf test.jar -C classes 2.下载jad,利用jad反编译jar包 CMD>[jad_home]/jad.e ...

  5. jni编译non-numeric second argument to `wordlist' function错误

    在jni编译过程中,遇到non-numeric second argument to `wordlist' function错误,个人遇到这个错误的原因,是因为从windows中拷贝了Android. ...

  6. MySQL免编译二进制包安装简记

    相比较于MySQL的源代码安装来说.免编译二进制包的速度实在是快了太多,而且性能损失也不是很大,同时具有一定的定制性.所以,如果没有特殊的 需求,尽量用MySQL免编译二进制包来安装MySQL. 1. ...

  7. 编译APR包报错 rm: cannot remove `libtoolT': No such file or directory

    centos 6  编译APR包报错 在当前apr 目录 : #Vi configure +31880  ,注释掉此行 再次编译即可.

  8. MatLab 2014a编译jar包时mcc无法使用的问题

    http://blog.csdn.net/heroafei/article/details/43273373 MatLab 2014a编译jar包时mcc无法使用的问题 2015-01-29 16:5 ...

  9. Ubuntu 16.04 kinetic 编译指定包

    编译指定包 catkin_make -DCATKIN_WHITELIST_PACKAGES=baoming 使用上述命令后catkin_make会一直编译上面那个包,想要编译全部包,使用 catkin ...

随机推荐

  1. google云使用记录

    gcloud工具在win下安装十分不便,而且由于众所周知的原因,无法连接,我的解决办法就是安装另外一个vps(centos7系统),然后在那里安装gcloud工具,对google进行远程访问. 1.利 ...

  2. ssh转发

    ssh有3种转发:本地转发,远程转发,动态转发. 1.本地转发:当client和ssh-client的方向一致的时候,就是本地转发. 限制:1)client直接访问server被防火墙阻挡.2)ssh ...

  3. Shiro系列(1) - 权限管理的介绍与原理

    1. 什么是权限管理 一般来说,只要有用户参与,那么该系统都会需要权限管理,权限管理实现了对用户访问系统  指定功能的限制,按照管理员定义的安全规则或权限策略,限制用户只能访问自己被授权的那些资源路径 ...

  4. flexb布局图解

  5. 一分钟上手, 让 Golang 操作数据库成为一种享受

    gorose, 最风骚的 go orm, 拥有链式操作, 开箱即用, 一分钟上手等八大风骚, 让 golang 操作数据库成为一种享受, 妈妈再也看不到我处理数据的痛苦了, 下面就来为大家一一讲解 g ...

  6. /etc/sudoers 配置

    /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL #第一个root是用户账号 第二列的ALL是登陆者 ...

  7. VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射

    一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机) 4.主机不能ping通虚拟机 应 ...

  8. Linux下双网卡绑定bond0【转】

    一:原理: linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑 ...

  9. 【驱动】linux设备驱动·扫盲

    linux设备驱动 Linux系统把设备驱动分成字符设备.块设备和网络设备三种类型. 内核为设备驱动提供了注册和管理的接口,设备驱动还可以使用内核提供的其他功能以及访问内核资源. PCI局部总线 早期 ...

  10. 多媒体文件格式之MKV

    [时间:2016-07] [状态:Open] MKV是一种开源的多媒体封装格式,是Matroska中应用比较多的格式之一.常见的后缀格式是.mkv(视频,包括音频和字幕)..mka(纯音频)..mks ...