Android Studio 2.2 打包Jar调用.so动态链接库

一、 使用Android Studio 2.2 编译.so文件 (若已有编译好的.so文件继续下一步)
首先新建工程,使用CMake进行JNI编程,具体操作见下面的链接,工程相关内容如下图所示。
Android Studio 2.0+ 使用CMake编程: http://blog.csdn.net/auroraexecue/article/details/73350771
1,、定义native方法

2.编写.cpp文件

3、调用JNI检验native方法是否通过

4、运行效果

二、 新建Module,导入.so文件
1、右击工程目录app新建Module

2、选择Android Library,然后next,操作如下

3、填写Module名称时,一定要 保证包名和.so文件原包名一致,否则无法调用,然后Finish。

4、在以后的运行或者修改配置过程中,有时会提醒如下图这样的错误,虽然不知道是什么原因,只要按路径提示在工程中删掉报错文件,然后Make一下就好了。

5、新建Module工程目录入如下图所示,打开目录新建一个java类,并声明本地方法, 类名和类的路径必须和.so 文件原类名和路径一致,否则无法调用。也可以将原来的类直接复制过来,总之要保证类名和方法名与.so库一致。

6、在新建Module目录中新建jniLibs文件夹,和正常工程调用.so动态链接库一样,只不过是在新建Module目录中,在本工程中路径为“JNItoJarApplication\jnitojarapplication2\src\main\jniLibs”,并将.so文件的文件夹都拷入jniLibs文件夹下,如下图所示。

二、 配置新建Moudle的build.gradle文件,生成jar文件
1、由于新建的Moudle需要调用jniLibs下的文件,因此要在build.gradle(Module: jnitojarapplication2)中添加配置,代码及添加效果如下。
sourceSets.main.jniLibs.srcDirs = [ 'jniLibs']

2、继续配置build.gradle(Module: jnitojarapplication2)文件,指定包名,并配置生成文件目录
在最下面添加如下代码,效果如下图。
task exportJar( type: Copy) {
from( 'build/intermediates/bundles/release/') // 要生成的 .jar 文件来源
into( 'build/libs/') //jar 包的生成路径
include( 'classes.jar')
rename ( 'classes.jar', 'jnitest.jar') // 命名包为 “jnitest” ,名称可以自己定
}

task deleteOldJar( type: Delete) {
delete 'build/outputs/jnitest.jar' //“jnitest.jar” 为要生成的包名和后缀,这一句的意思是:如果包已经存在,则删除掉
}

exportJar.dependsOn(deleteOldJar, build)


3、生成jar文件
点击工程中右侧的”Gradle“按钮,按下图中的路径找到”exportJar“一项,然后双击,等待生成jar文件

4、生成成功后在Moudle工程目录build\libs中找到生成的名为jnitest.jar的包。


至此jar包的生成就完成了,下面是调用。

三、 任意工程通过jar包调用.so动态链接库中的方法
1、新建任意工程或者现有任意工程都可以,下面新建任意工程,工程名为MyJNItest。

2、将之前生成的jar文件拷到工程“app\libs”目录下,然后添加依赖,具体就不详细说了,效果如下图。

3、在工程目录中,“app\src\main”目录下新建“jniLibs”文件,并将所有.so文件文件夹拷入“jniLibs”中,具体操作同上面的操作,效果如图。

4、在工程中调用验证效果,代码如下。

5、运行效果



到此包的生成和调用就完成了。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio使用 Gradle 构建工具进行编译打包,生成 .so 动态链接库,可以按照以下步骤进行: 1. 在 Android Studio 中创建一个 C/C++ 模块,选择 File -> New -> New Module -> C/C++ Library,然后按照向导设置模块名称、语言类型和支持的 ABI。 2. 在模块的 build.gradle 文件中,添加以下配置: ```groovy android { // 指定支持的 ABI,包括 armeabi-v7a、arm64-v8a、x86、x86_64 等 ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } // 配置 CMakeLists.txt 文件路径 externalNativeBuild { cmake { path "CMakeLists.txt" } } } // 配置 CMake 版本 cmake { version "3.10.2" } ``` 3. 在模块的 src/main 目录下创建 jni 文件夹,并将 C/C++ 代码放入该文件夹中。 4. 在 jni 文件夹下创建 CMakeLists.txt 文件,并编写编译选项和链接选项,指定生成 .so 文件的名称和路径,以及引入其他依赖库等。例如: ```cmake # 设置编译选项 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # 设置源文件路径 file(GLOB_RECURSE SOURCE_FILES "*.cpp") # 设置头文件路径 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # 配置动态库输出路径和名称 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}) set(CMAKE_LIBRARY_OUTPUT_NAME "native-lib") # 引入其他依赖库 find_library(log-lib log) # 生成动态库 add_library(native-lib SHARED ${SOURCE_FILES}) target_link_libraries(native-lib ${log-lib}) ``` 5. 点击 Android Studio 工具栏中的 Build -> Make Project,进行编译打包,生成 .so 动态链接库。 6. 在模块的 build.gradle 文件中查看生成的 .so 文件路径,例如: ```groovy android { externalNativeBuild { cmake { path "CMakeLists.txt" } } sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } } ``` 以上就是在 Android Studio使用 Gradle 构建工具进行编译打包,生成 .so 动态链接库的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值