搞了很久的Android开发了,一直在使用别人(第三方的sdk),所以今天突发奇想,自己搞一个NDK项目提供给其他app使用。本篇文章就从ndk环境到SDK生成、使用一起说说。废话 不多少开始动起来吧!!

一、Android studio ndk环境

        点击SDK  Manager,如下图所示安装ndk。

二、创建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库在下图所示位置

4.生成jar

在ndklib下build.gradle加入如下代码

 

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

生成的jar文件就在ndklib下的libs文件夹下

最后把3、4生成的so库和jar 导入到其他项目就可以使用。如下图项目结构和使用:

更多相关文章

  1. Android(安卓)LruCache源码详解
  2. Android(安卓)multidex 使用 与 实现原理
  3. 转:教程:实现Android的不同精度的定位(基于网络和GPS)
  4. Android(安卓)GPRS的自动打开与关闭。
  5. Android(安卓)开发艺术探索笔记之八 -- 理解 Window 和 WindowMa
  6. Cordova自定义插件实战
  7. Android(安卓)中Dialog点击空白处會消失问题
  8. ANDROID 后台服务 service
  9. 【Android问题】Android导入一个工程时提示 Invalid project des

随机推荐

  1. android 修改AVD的存放位置
  2. 破解Android:谈谈Root与刷机
  3. Android(安卓)开发实录 (一) Ubuntu + An
  4. Android(安卓)浮动搜索框的使用
  5. 一些关于 Activity 的技巧
  6. Android(安卓)应用程序快速启动的秘诀
  7. Unity3D研究院之与Android相互传递消息(十
  8. Android(安卓)ROM研究---制作Nexus S上的
  9. 面向 x86 的 Android* 入门指南
  10. android播放swf文件