创建so工程android studio,Android studio 3.0 JNI开发生成so详细教程

Android studio 3.0 JNI开发生成so详细教程

最近要实现jni的功能,因为新下载的Android studio是3.1.2版本的,按照以前的写法编译的时候发现so文件总是不出现,程序可以正常运行,但是一打开就报错,网上也有好多的教程,但是都有头没尾,互相抄袭,一直解决不了,最后花了一下午时间终于解决了问题,废话不多说,直接上小白教程。

Android studio 3.0 JNI开发生成so详细教程

打开SDKManager

配置NDK环境

新建项目

自定义native方法

生成c++头文件

新建cpp文件实现native方法

配置CMakeLists.txt文件

调用native方法

编译工程生成so文件

运行结果如图

由于是小白教程,为了尽可能让大家看明白流程,显得啰里啰嗦,大神勿喷!!

打开SDKManager

打开sdkManager下载CMake和LLDB

657c9e53af525044cb8741ff0fbcf6dc.png

配置NDK环境

e72680c333959740b08489747e3a154f.png

新建项目

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

bdcfaafcc90736c38c5f39af01345ee4.png

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

b75ab2298a054feef97cb3bc456e87dd.png

自定义native方法

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

724fcf8850f26ed4d3903ea45689cc0d.png

生成c++头文件

然后在android studio控制台Terminal进入Hello.java所在的目录执行javac Hello.java,如下

80d27b0dd25c71e75175b6bc0133bcc1.png

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

3273786a7bd064eef84882c1d64c3639.png

然后还是在Terminal控制台上面回退目录到app/src/main下面执行命令

javah -d jni -classpath ./java com.example.mayongheng.jnitest.Hello,后面是包名+文件名不带后缀,请改成自己的包名,如图:

0814c7d2961022dd32fe733af87b5f8c.png

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

fb77eb762daba890411774759b7b8c14.png

新建cpp文件实现native方法

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

383152.html

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

ddaf935874f114b54333be51ee6c0f08.png

配置CMakeLists.txt文件

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

cpp/native-lib.cpp文件的配置,打开CMakeLists.txt文件,如下,

4dbf883b15afd676a8ce78f4fff09db5.png

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

1d493714b918181fd6538db03739a798.png

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

323a4de1242fefc742ef24c37794536d.png

调用native方法

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

bf414ffa1e1072d70df1407cf0c34cd4.png

最后在activity中调用add方法,

9e4cb6ac80c602d5c35eab34a1b50da0.png

编译工程生成so文件

通过rebuild工程,会在build/intermediates/cmake/debug/obj下面生成各种cpu的so文件,如图,我们已经成功了

b7daf51867eb6226ee00eee1a9e3b282.png

运行结果如图

6f2e7e9aa41de7c21ef1acb6a377e3f1.png

OK!教程到此结束,是不是So easy??

由于是小白教程,为了尽可能让大家看明白流程,显得啰里啰嗦,大神勿喷!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值