之前一直没怎么注意,以为.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. 【动态规划】mr354-坐车看球

    [题目大意] 两个球队的支持者要一起坐车去看球,他们已经排成了一列.我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的.为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是D.有一 ...

  2. getDimension,getDimensionPixelOffset和getDimensionPixelSize

    dimens.xml里写上三个变量: <dimen name="activity_vertical_margin1">16dp</dimen> <di ...

  3. [JZOJ5425]数论

    题目大意: 给你$n,m$,求$\displaystyle{\sum_{i=1}^{n}\sum_{j=1}^{m}}\min(\lfloor\frac{n}{i}\rfloor,\lfloor\fr ...

  4. JDK源码学习笔记——TreeMap及红黑树

    找了几个分析比较到位的,不再重复写了…… Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例 [Java集合源码剖析]TreeMap源码剖析 java源码分析之TreeMap基础篇 ...

  5. Problem E: 深入浅出学算法019-求n的阶乘

    Problem E: 深入浅出学算法019-求n的阶乘 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 5077  Solved: 3148 Descrip ...

  6. 如何获取php错误

    今天把项目放在测试服务器,但是出现一个问题,用的TP5框架,我把入口文件放在了根目录,访问的时候报错了,框架引导文件引入不了,也不报错,就是说访问不了. 所以就用了一段代码把错误获取出来了,代码如下: ...

  7. TCP协议中的重传、慢启动、SACK、窗口的概念

    重传机制     慢启动相关的几个状态说明该     SACK机制     窗口在TCP传输机制中的作用

  8. __FILE__,__LINE__,FUNCTION__实现代码跟踪调试

    转:http://www.cnitblog.com/zouzheng/archive/2007/08/31/32691.aspx 先看下简单的初始代码:注意其编译运行后的结果. root@xuanfe ...

  9. Android Studio 之 NDK篇

    由于工作内容的关系,对于NDK的工作涉及比较广(保密性,安全性),所以本章内容讲述一下NDK的基本使用过程. 网上也有很多这样的教程或者描述,但描述的并不完全 开发工具:Android Studio ...

  10. windows下 memcached 和 redis 服务器安装

    memcached 安装: 1.下载memcached 文件: 2.拷贝到运行目录: 3.命令行进入到程序目录: 运行命令: memcached -d install 如果没有报错说明安装成功 4.打 ...