详解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文件分别拷入,截图如下:

详解Android studio中正确引入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
0
投稿

猜你喜欢

  • HorizontalScrollView水平滚动控件使用方法详解

    2023-02-19 21:12:27
  • 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
  • Java中的this和super实例浅析

    2023-03-03 13:24:09
  • Android封装实现短信验证码的获取倒计时

    2023-06-28 22:57:23
  • 详解spring-boot集成elasticsearch及其简单应用

    2021-08-26 01:09:58
  • 详解Mybatis动态sql

    2023-09-16 15:41:38
  • C#数组中List, Dictionary的相互转换问题

    2022-11-03 00:10:37
  • tomcat部署java web项目遇到的问题及解决方法

    2023-08-04 23:44:27
  • 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
  • 2022编程语言需求排名出炉:第一不是Python,也不是Java

    2023-10-11 19:09:17
  • C#四舍五入用法实例

    2021-07-20 02:49:20
  • Java基于二叉查找树实现排序功能示例

    2022-09-04 21:50:52
  • 解析springboot整合谷歌开源缓存框架Guava Cache原理

    2023-11-07 13:24:23
  • spring装配bean的3种方式总结

    2023-01-05 07:01:47
  • asp之家 软件编程 m.aspxhome.com