完成了对JNI的编译,有时候是使用aar包提供给其他同学使用;或者说在共同开发的一个项目中,并不是每个人都需要开发C、C++功能。所以没必须每台电脑都配置好NDK的编译环境,所以大多数还是以AAR包的方式放在项目中。我们接下来就是完成这个事件;

JNI部分抽象成Module

第一步,file->new->new module

第二步,创建Android Library

第四步,生成AAR文件

执行gradule任务assebleRelease

第五步,查看JAR以及AAR文件

JAR位于以下位置:

AAR位于以下位置:

这个usbrcvoicelib-release.aar就是我们需要的AAR文件,在需要项目中导入即可。

自定义gradle任务

但为更方便,我们需要新加一个自定义的gradle任务,用来把aar文件重命名并放到指定目录;

第一步,在module的android{}域里面写如下任务

//generateAar是任务名称,推荐通过mouldeName+actionName(考虑多模块问题)

//类型是copy操作

task generateAar(type: Copy) {

//指定来源文件夹

from('build/outputs/aar')

//指定目的文件夹(目的文件如果已经存在,不需要先执行删除,会执行覆盖.)

into('outputs')

//指定来源文件

include('*.aar')

}

第二步,在Terminal里面执行如下命令

C:\Users\koffuxu\02-sulab\aispeech-tools>gradlew generateAar

第三步,确认在模块的根目录有一个outputs目录

扩展

以上的应用场景就是由JAVA层提出来需要什么接口,再来实现C部分代码,还有一种情况,就是先有C的代码,来生成相应的JAVA代码,这就是使用swig插件的方式。接下来演示一下。

第一步,先下载swig,解压写入Path的环境变量,http://www.swig.org/download.html;

第二步,在main/jni下面,写一个swig_demo.i格式文件,这里面主要是接口定义,里面的格式参考swig文档;

%module swigDemo

%{

/* Put header files here or function declarations like below */

extern double My_variable;

extern int fact(int n);

extern int my_mod(int x, int y);

extern char *get_time();

%}

extern double My_variable;

extern int fact(int n);

extern int my_mod(int x, int y);

extern char *get_time();

第三步,配置一下生成swig的gradle任务

// Location of where to store the jni wrapped files

def coreWrapperDir = new File("${projectDir}/src/main/java/com/swig/test")

task createCoreWrapperDir {

coreWrapperDir.mkdirs()

}

// For this to work, it's assumed SWIG is installed

// TODO: This only works when called from Command Line (gradlew runSwig)

task runSwig(type:Exec, dependsOn: ['createCoreWrapperDir']) {

String osName = System.getProperty("os.name").toLowerCase();

if (osName.contains("windows")) {

workingDir '/src/main/jni' // This implicitly starts from $(projectDir) evidently

commandLine 'cmd', '/c', 'swig'

args '-java', '-package', 'com.swig.test', '-outdir', coreWrapperDir.absolutePath, 'swig_demo.i'//自己编写的.i文件

}

else {

commandLine 'swig'

args '-c++', '-java', '-package', 'com.swig.test', '-outdir', coreWrapperDir.absolutePath, "${projectDir}/src/main/jni/Unix.i"

}

}

第四步,执行runSwig任务,就会看到在/src/main/java/com/swig/test/生成相应的Java类

同步在jni里面会生成_wrap类,具体实现就可以在这里面来写。

android下载模块封装,AndroidStudio 3.0 NDK开发2-AAR模块封装相关推荐

  1. 学海无涯!如何在Android-Studio下进行NDK开发,全网疯传

    前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会热修复,懂不懂性能优化,火箭造得让你猝及不防,结果就是凉凉:现如今市场,热修复.性能优化.NDK.APP开发.架构.源码等可以 ...

  2. python如何离线安装第三方模块_扣丁学堂python开发之第三方模块pip离线安装

    扣丁学堂python开发之第三方模块pip离线安装 2018-08-14 14:02:22 747浏览 最近很多参加Python培训的同学说在学习过程中需要安装一些第三方的模块,今天小编就来给大家讲一 ...

  3. android cygwin离线安装包,Cygwin配合NDK开发Android程序

    一.NDK NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk.怎么在eclipse装这两个我就不多说了.大家按照以前装adt和sd ...

  4. apache 已经加载模块,但是不能解析出开发的rewrite模块功能

    例如  这样配置虚拟域名上正确的DocumentRoot与Directory是有顺序的 <VirtualHost *:80>     ServerAdmin webmaster@dummy ...

  5. Android Studio 4.0.+NDK项目开发详细教学

    JNI开发系列目录 JNI开发必学C++基础 JNI开发必学C++使用实践 Android Studio 4.0.+NDK项目开发详细教学 Android NDK与JNI的区别有何不同? Androi ...

  6. 使用ruby和python快速开发metasploit自定义模块

    使用ruby和python快速开发metasploit自定义模块 前言 本文的内容主要分为两个部分: 提供一个基本ruby模块代码框架,并快速开发自定义ruby模块 提供一个基本python模块代码框 ...

  7. Android NDK开发从0到1

    本文的开发环境为 Windows,其他平台操作类似 其实说到 NDK 就不得不提 JNI ( Java Native Interface ) ,JNI 是专门用来与本地代码进行交互而提供的一个接口.通 ...

  8. android ndk 界面开发教程,AndroidStudio NDK开发最佳入门实践

    AndroidStudio NDK开发最佳入门实践 网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学AndroidStudio NDK的同学们一些需要注 ...

  9. 细说Android 4.0 NDK编程pdf

    下载地址:网盘下载 <细说Android 4.0 NDK编程>内容简介:通过NDK,应用程序可以非常方便地实现Java与C∕C++代码的相互沟通.<细说Android 4.0 NDK ...

最新文章

  1. 1.数字图像获取:1.4图像的数据结构与特征
  2. [云炬python3玩转机器学习笔记] 1-1什么是机器学习
  3. IBM DW上关于SOA的规范归纳
  4. mysql-connector-mysql 8.0 (spring-boot-starter-parent 管理的版本) + Activiti 6.x 自动建表失败
  5. mysql 备份 索引_mysql-索引、导入、导出、备份、恢复
  6. efinance获取基金、股票、债券、期货K线数据
  7. 前端工程化(ES6模块化和webpack打包)
  8. Linux服务器SMB服务挂载目录
  9. 传奇服务器怎么修改背包金刚石显示,教你在服务器加自己的装备
  10. Tomcat官网下载旧版本
  11. 实现网站的国际化语言切换
  12. BugKu_MISC_(3)
  13. java将silk文件转换成MP3
  14. 工程项目影响项目进度的因素有哪些?
  15. 【python自动化办公】Python自动化之pdf——PyPDF2、pdfplumber、fitz、pdf2image库介绍
  16. 计算机及其应用专业自考停考,自考专业名称调整及停考 有你报名的专业吗?
  17. 户外导航软件OruxMaps及其相关地图资源_我是亲民_新浪博客
  18. 干货!考博英语,这样复习可以事半功倍
  19. 最美的精典爱情句子(转自mop)
  20. this的HXD“super”关键字

热门文章

  1. nvm切换node版本的命令
  2. 公钥和私钥的作用和区别
  3. vue 生成二维码:vue-qr插件
  4. 编辑画面,element-ui的单选框组选中值以及画面选择样式无法切换,但是绑定的v-model值已发生变化
  5. 【王道操作系统笔记】系统调用
  6. 蓝桥杯枚举+判断结果填空:猜年龄/奇妙数字
  7. Java 开源 CMS :magnolia
  8. LIRe 源代码分析 1:整体结构
  9. 视频客观质量评价工具:MSU Video Quality Measurement Tool
  10. linux中找到最耗CPU的那段Java代码