AndroidStudio JNI开发:生成可调用jar
来源:互联网 发布:华为误删移动用户数据 编辑:程序博客网 时间:2024/06/07 18:27
我们知道JNI开发无论是静态注册还是动态注册,都会有跟相关包名类名绑定的情况,因此无法在其他项目正确引用,解决此问题一般是采用编写一个对应的接口java类,将so一并打包成jar,即可供开发者正确使用。
本文主要目的: 用于解决生成的.so库中,jni的方法名有包名的限制,导致其他项目工程引用时,包名不一致,出现jni层接口调用无效的问题。
1、新建Android Library
在project面板,项目名称右键–>new–>Android Library,输入名字(jniTest)即可生成对应的moudle
2、然后到路径jniTest/src/main/java下可找到刚才创建的项目,如上图中的com.example.mylibrary,然后创建自己的接口类,右键new–>java class
3、导入jni文件,指定android.mk文件,然后build moudle一下
以上具体步骤可参考:
Android Studio jni动态注册步骤
4、配置并生成jar文件
在jniTest这个module下的build.gradle的末尾添加如下配置信息:
def SDK_NAME = "JniUtil"; //sdk的名字def SDK_VERSION = "_V1.0"; //版本def sdkDestinationPath = "build";def zipFile = file('build/intermediates/bundles/release/classes.jar')//注意这里的release可能是debug或者是defaulttask deleteBuild(type: Delete) { //最终生成的jar的名字 delete sdkDestinationPath + SDK_NAME + SDK_VERSION + ".jar"}task makeJar(type: Jar) { from zipTree(zipFile) from fileTree(dir: 'src/main',includes: ['assets/**']) baseName = SDK_NAME + SDK_VERSION destinationDir = file(sdkDestinationPath)}makeJar.dependsOn(deleteBuild, build)
添加完后 点击右上角的Sync Now,没有报错即可
5、接下来在Android Srudio的Gradle窗口(右侧),找到项目名称–>module名称–>Tasks–>other–>makeJar(Gradle窗口左上角的刷新按钮进行刷新),双击
全是绿色的话,即可生成对应的jar文件,路径为:moduleName/build/下
此时打开jar文件,可以看到已经包含了我们的接口类,但是没有包含我们生成的so文件。
6、打包so文件进入jar
在路径moduleName/src/main下新建Folder–>Assets Folder,然后将jni/lib/下的架构文件copy到刚才创建的assets文件夹中,再次点击makeJar,同样的路径下,我们可以看到生成的jar已经包含了我们的so
参考文章
AndroidStudio2.2.3 JNI与NDK开发之二:生成可调用jar包
- AndroidStudio JNI开发:生成可调用jar
- AndroidStudio2.2.3 JNI与NDK开发之二:生成可调用jar包
- AndroidStudio2.2.3 JNI与NDK开发之一:生成可调用.so库
- AndroidStudio生成.jar
- androidStudio 生成jar 文件
- AndroidStudio NDK开发 之 jni生成so文件
- AndroidStudio开发jni调用第三方SO库
- AndroidStudio下jni开发
- AndroidStudio使用jni开发
- AndroidStudio Jni 开发初识
- AndroidStudio jni 开发
- AndroidStudio建立完整JNI开发工程流程及Java通过JNI调用C函数
- AndroidStudio集成ndk、开发JNI
- AndroidStudio JNI 开发哪些事儿
- Androidstudio中JNI开发初探
- JNI开发流程(androidstudio)
- Androidstudio中JNI基本开发
- AndroidStudio 生成jar包 生成arr包
- 线程池初探(二)
- <五>Linux文件权限与属性详解--su & sudo
- Java day9
- 基于OpenCV 2.4.93.1的汉字显示(FreeType 2.6.2)
- 正则验证固话和手机号
- AndroidStudio JNI开发:生成可调用jar
- sudo adduser XXX sudo XXX 用户不在 sudoers 文件中
- css input[type=file] input[type=radio] input[type=checkbox]样式美化,input上传按钮美化
- jeesite框架学习——对查询结果为Map的集合进行分页显示
- react-native 生命周期
- 谷歌浏览器,该站点安全证书的吊销信息不可用
- [队内测试Day10.26][P97]T1 字符串+前缀和
- 框架和设计模式的区别
- ES6中promise(摘自吕大豹大话讲解Promise)