android so库、jar包生成和使用
搞了很久的Android开发了,一直在使用别人(第三方的sdk),所以今天突发奇想,自己搞一个NDK项目提供给其他app使用。本篇文章就从ndk环境到SDK生成、使用一起说说。废话 不多少开始动起来吧!!
一、Android studio ndk环境
点击SDKManager,如下图所示安装ndk。
文章图片
【android so库、jar包生成和使用】二、创建NDK项目
File->new-> new project 选择native c++
文章图片
如上图所示。next->next->finish 即可生成NDK示例项目。
三、生成jar及so库
完成上述两步之后,会看到如下的项目结构:
文章图片
MainActivity通过System.loadLibrary("nattive-lib")方法加载cpp下的natice-lib.cpp文件。打开natice-lib.cpp文件我们可以看到 Java_com_yan_ndkdemo_MainActivity_stringFromJNI,它的命名格式就是JAVA_包名_(调用的类名)_方法名。所以我们在其他的项目是不可以直接调用我们的cpp,so库就是cpp写的程序打包成的,也就是说我们如果直接这样打包成so库,那么别人在使用的时候必须建立一个和我们包名、类名、方法名一样的类才可以调用,为了让调用者开发便捷所以我们就得为我们的so库编写调用的sdk供别人使用。
1、新建我们的sdk程序类去实现和MainActivity一样的加载so库的方法 和调用cpp的方法,如下图 我新建了个module
文章图片
TestJni里面stringFromJNI方法报错是因为我们cpp里面调用的是MainActivity下stringFromJNI,换就话说就是没有cpp去实现TestJni下的stringFromJNI方法。 ndklib的包名须和主工程包名一致。
2、更改主工程中nattive-lib.cpp下的代码
文章图片
将类名改成TestJni
3、生成so库
在主项目build.gradle加入如下代码
文章图片
cmake {
cppFlags ""
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
}
build-》Rebuild project生成so库在下图所示位置
![android so库、jar包生成和使用](https://img.it610.com/image/info8/0c71ee4d711e4fc1939c7b46ca84d056.jpg)
文章图片
4.生成jar?
在ndklib下build.gradle加入如下代码
![android so库、jar包生成和使用](https://img.it610.com/image/info8/75f77814b0244ccdad1da003c01c8af1.jpg)
文章图片
task againMakeJar(type: Copy) {
def name = 'NdkLib' //Library名称
delete 'libs/' + name + '.jar' //删除之前的旧jar包
from('build/intermediates/packaged-classes/release/') //从这个目录下取出默认jar包
into('libs/') //将jar包输出到指定目录下
include('classes.jar')
rename('classes.jar', name + '.jar') //自定义jar包的名字
}
againMakeJar.dependsOn(build)
点击右侧Gradle找到ndklib下的other-》againMakeJar,生成jar
![android so库、jar包生成和使用](https://img.it610.com/image/info8/fa348e1ef098468f88d99c25ff03a39d.jpg)
文章图片
生成的jar文件就在ndklib下的libs文件夹下
最后把3、4生成的so库和jar 导入到其他项目就可以使用。如下图项目结构和使用:
![android so库、jar包生成和使用](https://img.it610.com/image/info8/eb3ebe22072a4659858f3b03cec5ea7e.jpg)
文章图片
![android so库、jar包生成和使用](https://img.it610.com/image/info8/a58d80b3b63c4edd92b52cc741b985ec.jpg)
文章图片
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- android第三方框架(五)ButterKnife
- 一个人的碎碎念
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 太平之莲
- Shell-Bash变量与运算符
- 清明,是追思、是传承、是感恩。
- 牛人进化+|牛人进化+ 按自己的意愿过一生
- 七老修复好敏感、角质层薄、红血丝
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!