美文网首页
「NDK」四 项目生成jar包

「NDK」四 项目生成jar包

作者: 叨码 | 来源:发表于2019-07-11 16:16 被阅读0次

书接上文:CMake构建NDK项目生成so库
上文中我们创建了一个Android Studio默认CMake构建的NDK项目:NDKLearn

image0.png
  • 1 是生成的so库
  • 2 是java层调用类的包名和类名

接下来创建一个新的项目作为第三方应用来调用我们刚才生成的so库:


image.png

这里的【Include C++ support】可选可不选,这里我就不选了。一路next 创建,一个默认的android项目创建成功:

image.png

下面就是怎么使用以及调用so库了。

首先,将so文件拷贝到libs下,然后创建和so库编译时的类(NDKLibrary)类名和包名完全一致的类,最终成了:

image.png

另外因为so库放到了libs下,所以还需要在app 目录下build.gradle里配置一下:

android{
    ....
    ....
    // 引入so库
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

一切就绪,现在就可以在MainActivity里调用了:

image1.png

运行后结果:


image2.png

以上是一种调so+源码文件的方式来调用,完全可行,但最常用的还是将so库和调用类打包成一个Library提供给第三方调用者,调用者拿到Library后,直接调用其中的方法就可以了。
接下来就到了如何将此项目打成一个jar包
jar包的生成方式有很多,这里介绍下Android Studio不同版本下通过gradle task来打包的方式:

首先将你module下的build.gradle改造一下:

image10.png

1.改为library
2.注释掉applicationId

在Android2.0时代,jar输出到build - intermediates - bundles下:

task makeJar(type: Copy) {
    //删除存在的
    delete'build/libs/name.jar'
    //设置拷贝的文件
    from('build/intermediates/bundles/default/')
    //打进jar包后的文件目录
    into('build/libs/')
    //将classes.jar放入build/libs/目录下
    //include ,exclude参数来设置过滤
    include('classes.jar')
    //重命名
    rename ('classes.jar','name.jar')
    }
makeJar.dependsOn(build)

Android studio3.1.2的时候,bundles目录不存在了,已改为packaged-classes. 没有的话选中你的module,然后build选项- make module 一下就有了:

image11.png

然后重写下Task,修改下输出路径 :

task makeJar(type: Copy) {
//删除存在的
   delete'build/libs/name.jar'
//设置拷贝的文件
   from('build/intermediates/packaged-classes/release/')
//打进jar包后的文件目录
   into('build/libs/')
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
//(我们只关心classes.jar这个文件)
   include('classes.jar')
//重命名
   rename ('classes.jar','name.jar')
}
makeJar.dependsOn(build)

放置到module build.gradle的最外层:


image12.png

然后右侧-gradle 下的makeJar选项:

image13.png

即可看到jar包了--class.jar ,图中是我重名后的jar包:

image14.png

有了so库和jar文件,后续怎么用,其实跟平时你集成第三方sdk一样,有so有jar扔到libs下即可,基本一个用法,这里就不再详述了...
jar~小弟回家吃饭啦。

题外话

以上几篇的文章,足以让我们对NDK开发有个初步的理解和使用,但想要真的做到深入的理解,还得是上手真正的项目去实践出真知,说道此类项目的话,我个人觉得开源的ffmpeg for android是首选,既可以用到NDK开发,同时还能学习到音视频以及c/c++语言的知识,一举多得~后续我也会将自己的学习过程以及经验教训分享出来,欢迎大家加入一起学习进步。

相关文章

网友评论

      本文标题:「NDK」四 项目生成jar包

      本文链接:https://www.haomeiwen.com/subject/ucydkctx.html