之前一直没怎么注意,以为.so文件android为像eclipse一样直接加载,但是直到昨天我在android studio上调试公司项目推送消息的时候,才发现,.so文件原来没有加载成功.

可能之前  Android studio 使用心得(三)—从Eclipse迁移到Android这篇文章我是用Demo4来做例子,里面并没有引用.so文件,所以大家按照这篇文章去迁移项目的时候,会遇到问题。昨天我网上找了一下关于android studio gradle 加载.so文件的文章,发现大多还停留在gradle 低版本的时候的解决方法,看上去都好复杂,现在android studio1.0以后解决这个问题就很简单啦!如果大家还在用1.0以前的版本那我就要喷你一脸啦。。

我先提一点,就是如果从android studio上直接创建一个项目和从eclipse迁移过来的项目其实目录结构会稍微有区别的。

1.  我先讲一下,怎么解决从eclipse迁移过来的代码加载.so文件.直接以我的项目为例。

先看一下目录结构

大家会注意到,我们从eclipse迁移过来的项目,会默认给我们创建一个文件夹jniLibs,然后把eclipse里面libs文件夹里的内容都复制过来,如果直接在android studio 里面创建项目是不会有这个文件夹的,这是区别一。从eclipse迁移过来的项目上,会在build.gradle配置文件里面加上一段配置

sourceSets {
main {
 manifest.srcFile ‘AndroidManifest.xml’
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']//这一行是没有的,如果我们有.so文件就需要加上这一行代码
}

// Move the tests to tests/java, tests/res, etc…
instrumentTest.setRoot(‘tests’)

// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, …
// This moves them out of them default location under src/<type>/… which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot(‘build-types/debug’)
release.setRoot(‘build-types/release’)
}

再看一下图。之前我一直认为  compile fileTree(dir: ‘libs’, include: ‘*.jar’)这样就会全部加载.jar和.so文件,其实我错了,如果没有在sourceSets main里面加上一句 jniLibs.srcDirs = ['libs'],是不会加载.so文件的。

2.如果我们创建项目就是在android studio上创建的

默认没有jniLibs文件夹。所以需要我们自己创建。目录  src—>main—>jniLibs

以加载加载信鸽sdk为例子

我们先把.so文件全部复制到jniLibs文件。目录不变,

最后添加成功

然后,再说一下添加.jar包。跟eclipse一样,先把.jar文件放到libs目录下,然后add asLibrary.就可以了。

运行项目,就Ok了。这时也不需要再去配置

jniLibs.srcDirs = ['libs']

Android studio 使用心得(六)—android studio 如何加载.so文件的更多相关文章

  1. Android studio 使用心得(四)—android studio 多渠道打包(二)

    Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式.是直接在android studio 里面可视化操作,结合配置文件.我个人觉得严格上来 ...

  2. Android studio 使用心得(一)—android studio快速掌握快捷键

    大家都是从eclipse转过来了,所以早就熟悉了eclipse那一套快捷键. File—>settings—>keymap–>选择eclipse就搞定 话是这么说,但是自动化提示的变 ...

  3. cordova程序加载pdf文件的2种方法(ios/android)

    前言 公司目前的前端架构是微信端由vue全家桶负责h5网站的单页应用,android端和ios端则选择cordova打包成apk和app.其中,有一个业务逻辑是点击某个链接进入pdf的展示,h5的方案 ...

  4. Android UI--自定义ListView(实现下拉刷新+加载更多)

    Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...

  5. Visual Studio 2008 Package Load Failure:未能正确加载包“Microsoft.VisualStudio.Xaml”

    在安装好Visual Studio 2008后,启动Visual Studio 2008 发现如下提示: 包加载失败 未能正确加载包“Microsoft.VisualStudio.Xaml”( GUI ...

  6. Android应用安全之外部动态加载DEX文件风险

    1. 外部动态加载DEX文件风险描述 Android 系统提供了一种类加载器DexClassLoader,其可以在运行时动态加载并解释执行包含在JAR或APK文件内的DEX文件.外部动态加载DEX文件 ...

  7. android loadlibrary 更改libPath 路径,指定路径加载.so

    http://www.jianshu.com/p/f751be55d1fb 字数549 阅读177 评论0 喜欢0 需求很简单 ,就是加载指定文件夹下的.so. 原因:android在程序运行的状态下 ...

  8. Android动态加载so文件

    在Android中调用动态库文件(*.so)都是通过jni的方式,而且往往在apk或jar包中调用so文件时,都要将对应so文件打包进apk或jar包,工程目录下图: 以上方式的存在的问题: 1.缺少 ...

  9. Android 如何本地加载pdf文件

    大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上 ...

随机推荐

  1. 忘记原来的myql的root的密码;

    修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...

  2. linux安装Node(Centos)

    步骤 1.打开node官网,找到node版本的下载地址 这里我找到的地址是: https://npm.taobao.org/mirrors/node/v8.2.1/node-v8.2.1-linux- ...

  3. segmentfault hackthon比赛感悟

    之前本来是打算用node好好系统的写下程序,写下博客. 这两天因为segmentfault hackthon比赛,所以就没更新.写这篇博客的目的,是为了说明自己參赛的感悟. 今天比赛,能够说自己特别失 ...

  4. 使用SQL_TRACE进行数据库诊断

    SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法.本文就SQL_TRACE的使用作简单探讨,并 ...

  5. [Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常

    转载:http://blog.csdn.net/winson_jason/article/details/20357435 下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题,今天时 ...

  6. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...

  7. RawCap抓取本地回环接口数据包

    RawCap.exe --help ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 D: ...

  8. RTP/RTCP、TCP、UDP、RTMP、RTSP

    OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,FTP,HTTP,SNMP,SMTP,DNS,RIP,Telnet 表示层 数据格式化,代码转换,数据 ...

  9. 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法

    在使用  sessio_destroy() 销毁session文件的时候,必须要先使用session_start()   来开启session 后才能删除session文件

  10. 转: 学ppt的网址与素材

    转:http://www.jianshu.com/p/89b261e0b8f6 你说你要学ppt,可你知道这些吗?   之前身边的同学总说做PPT很难,每次做ppt都头疼,我都对此很不屑,直到前一段开 ...