android ndk简单,android studio NDK简单使用

首先集成ndk编译环境

790bb56d7d32

image.png

配置

1.gradle.properties中加入android.useDeprecatedNdk=true开启项目支持

2.在模块的build.gradle中加入

ndk { moduleName "huazict" //生成的so名字,即你要System.loadLibrary的名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。 }

790bb56d7d32

image.png

其中moduleName是你加载静态lib时的名字

网上ndk的介绍有很多,这里说下自己遇到的坑,

在src\main下新建文件夹jni

790bb56d7d32

image.png

生成.h文件

先进到debug目录下

790bb56d7d32

image.png

然后执行 javah 包名+类名。

javah com.example.admin.myapplication.ndkclass.MyNdkClass

然后生成c文件,名字随便取(用于实现.h文件中的方法)

千万记得别写错c文件里面的东西

790bb56d7d32

image.png

最后使用别人的.so文件

原理:so文件是由.c和.h文件编译出来的,而.h文件又是由我们自定义的native方法的类编译出来的,所以我们要使用别人的.so。那么必须用别人的native方法,即将别人的有native方法的类全部拷贝过来,包名类名都不能变。(第三方的so都会跟上自己的jar)

遗留bug

我在我项目里面使用ndk怎么都编译不出.so文件出来,新建一个项目(单模块和多模块,支持C++和不支持c++的都试了,都可以)后就能成功编译出来。

后来多写了几遍就好了,估计是c文件那里写的有问题,又没有提示,很烦。

总结

1集成ndk编译环境,(ndk编译工具,gradle.properties中开启项目支持,在模块* build.gradle中添加生成的so文件名)

2生成.h文件

3生成.c文件(千万别写错c文件了,不然编译不出so文件,但是编译又通的过)

4rebuild

使用别人的so记得把别人的native方法的类考过来,包名类名都不要修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值