详解Android studio中正确引入so文件的方法
作者:wulianghuan 时间:2022-06-17 23:21:32
相信很多朋友在使用Android studio开发中,遇到过如何引入第三方so文件的问题,然而第三方官方仅仅给出了ADT环境下的集成方式。
Android studio中默认使用的是gradle编译方式,与ADT编辑方式不一样,那么so文件应当如何引入呢?
其实很简单。这里以集成JPUSH为例,看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。
首先,在我们的Module的根目录中建立libs目录,将jpush集成SDK中的so文件分别拷入,截图如下:
然后就是编写我们的build.gradle文件。
关于so文件引入的配置很简单,代码配置如下:
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into "lib",那么动态运行库就被拷入到lib目录中。
完整的build.gradle文件如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
applicationId "com.wujay.footerballstar"
minSdkVersion 8
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
destinationDir file("$projectDir/libs")
baseName "Native_Libs2"
extension "jar"
from fileTree(dir: "libs", include: "**/*.so")
into "lib"
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
compile files('libs/jpush-sdk-release1.7.2.jar')
compile files('libs/umeng_sdk.jar')
compile files('libs/libammsdk.jar')
}
基于有人在评论区提问,这里补充一下,有一个更为快捷轻快的配置方法
那就是在build.gradle配置中,配置如下的信息:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
你的so包可以放在lib目录下,跟jar包放在同样的目录,如lib/armeabi/libjpush172.so。
来源:http://blog.csdn.net/wulianghuan/article/details/44567001
标签:android,studio,so
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
HorizontalScrollView水平滚动控件使用方法详解
2023-02-19 21:12:27
![](https://img.aspxhome.com/file/2023/2/111712_0s.jpg)
SpringFramework应用接入Apollo配置中心过程解析
2021-08-30 09:03:50
基于JDK动态代理原理解析
2022-07-24 19:43:33
Android开发之基于DialogFragment创建对话框的方法示例
2023-10-03 21:17:12
RxJava加Retrofit文件分段上传实现详解
2022-03-02 05:36:10
![](https://img.aspxhome.com/file/2023/3/138843_0s.png)
Java中的this和super实例浅析
2023-03-03 13:24:09
Android封装实现短信验证码的获取倒计时
2023-06-28 22:57:23
![](https://img.aspxhome.com/file/2023/9/82399_0s.gif)
详解spring-boot集成elasticsearch及其简单应用
2021-08-26 01:09:58
![](https://img.aspxhome.com/file/2023/4/60594_0s.png)
详解Mybatis动态sql
2023-09-16 15:41:38
![](https://img.aspxhome.com/file/2023/4/69924_0s.png)
C#数组中List, Dictionary的相互转换问题
2022-11-03 00:10:37
![](https://img.aspxhome.com/file/2023/0/111080_0s.png)
tomcat部署java web项目遇到的问题及解决方法
2023-08-04 23:44:27
![](https://img.aspxhome.com/file/2023/2/58032_0s.jpg)
shiro多验证登录代码实例及问题解决
2023-11-30 07:20:00
Android开发ThreadPoolExecutor与自定义线程池详解
2022-03-17 18:16:22
C++时间戳转换成日期时间的步骤和示例代码
2021-05-27 18:50:07
Flutter有状态组件StatefulWidget生命周期详解
2023-09-25 23:56:50
![](https://img.aspxhome.com/file/2023/3/137373_0s.png)
2022编程语言需求排名出炉:第一不是Python,也不是Java
2023-10-11 19:09:17
![](https://img.aspxhome.com/file/2023/2/107152_0s.png)
C#四舍五入用法实例
2021-07-20 02:49:20
Java基于二叉查找树实现排序功能示例
2022-09-04 21:50:52
解析springboot整合谷歌开源缓存框架Guava Cache原理
2023-11-07 13:24:23
![](https://img.aspxhome.com/file/2023/0/62030_0s.png)
spring装配bean的3种方式总结
2023-01-05 07:01:47