AndroidStudio JNI开发:生成可调用jar

来源:互联网 发布:华为误删移动用户数据 编辑:程序博客网 时间:2024/06/07 18:27

      我们知道JNI开发无论是静态注册还是动态注册,都会有跟相关包名类名绑定的情况,因此无法在其他项目正确引用,解决此问题一般是采用编写一个对应的接口java类,将so一并打包成jar,即可供开发者正确使用。
      本文主要目的: 用于解决生成的.so库中,jni的方法名有包名的限制,导致其他项目工程引用时,包名不一致,出现jni层接口调用无效的问题。

1、新建Android Library
在project面板,项目名称右键–>new–>Android Library,输入名字(jniTest)即可生成对应的moudle
新建Android Library

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包

原创粉丝点击