详解Android studio中正确引入so文件的方法

发布时间 - 2026-01-11 03:13:57    点击率:

相信很多朋友在使用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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # studio引入so  # studio  # so  # studio导入so  # Android studio so库找不到问题解决办法  # Android Studio 报错“app:processDebugResources"解决方法  # 详解Android Studio如何导入第三方类库、jar包和so库  # 浅谈Android Studio JNI生成so库  # Android Studio打包.so库到apk中实例详解  # Android Studio工程引用第三方so文件的方法  # 放在  # 第三方  # 的是  # 是在  # 出了  # 那就  # 用了  # 很简单  # 自定义  # 为例  # 看一下  # 遇到过  # 大家多多  # 来写  # 有一个  # 其实很简单  # 运行库  # 目录下  # 在我们的  # 目录中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python制作简易注册登录系统  个人网站制作流程图片大全,个人网站如何注销?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  JS去除重复并统计数量的实现方法  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何快速搭建高效可靠的建站解决方案?  浅谈javascript alert和confirm的美化  如何用美橙互联一键搭建多站合一网站?  LinuxCD持续部署教程_自动发布与回滚机制  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何在IIS7上新建站点并设置安全权限?  如何快速生成ASP一键建站模板并优化安全性?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何在云主机上快速搭建多站点网站?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  WordPress 子目录安装中正确处理脚本路径的完整指南  Java类加载基本过程详细介绍  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  JavaScript中的标签模板是什么_它如何扩展字符串功能  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  微信推文制作网站有哪些,怎么做微信推文,急?  如何快速生成凡客建站的专业级图册?  青岛网站建设如何选择本地服务器?  如何自定义建站之星模板颜色并下载新样式?  千库网官网入口推荐 千库网设计创意平台入口  Java垃圾回收器的方法和原理总结  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  如何在建站之星绑定自定义域名?  如何用5美元大硬盘VPS安全高效搭建个人网站?  在Oracle关闭情况下如何修改spfile的参数  如何快速查询网站的真实建站时间?  Windows Hello人脸识别突然无法使用  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何在阿里云ECS服务器部署织梦CMS网站?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  北京企业网站设计制作公司,北京铁路集团官方网站?  iOS UIView常见属性方法小结  制作旅游网站html,怎样注册旅游网站?  如何在新浪SAE免费搭建个人博客?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Swift中循环语句中的转移语句 break 和 continue  如何快速搭建高效香港服务器网站?