之前一直没怎么注意,以为.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. dump备份mysql库

    Auth: Jin Date: 20140403 Content: #!/bin/bash - ### auth: Jin ### ### Desc: 根据配置文件里的ip,端口(dblist文件格式 ...

  2. mysql-proxy使用中的问题

    Auth: Jin 1.session问题 Date: 20140328问题描述:基于openx 的广告系统,将数据从单点,迁移到mmm集群,前端无法访问报错信息如下:MDB2 Error: Arra ...

  3. Unity3d通用工具类之定时触发器

    时隔多日,好不容易挤出点时间来写写博文.不容易,请送我几朵红花,点个赞也行. 今天呢,我们主要来扩展下通用工具类==>定时触发器. 顾名思义,所谓的定时触发器,就是告诉程序在过多长时间后,我要执 ...

  4. [Android Memory] Linux下malloc函数和OOM Killer

    http://www.linuxidc.com/Linux/2010-09/28364.htm Linux下malloc函数主要用来在用户空间从heap申请内存,申请成功返回指向所分配内存的指针,申请 ...

  5. 《Go语言实战》笔记之第三章 ----包

    原文地址: http://www.niu12.com/article/10 ####包 所有的.go 文件,除了空行和注释,都应该在第一行声明自己所属的包. 每个包都在一个单独的目录里. 不能把多个包 ...

  6. 创建maven web项目无法创建sec目录

    创建maven web项目无法创建sec目录 解决方法:-DarchetypeCatalog=internal

  7. [转]SSIS error DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER when connecting to Oracle data source

    本文转自:http://blogs.msdn.com/b/jorgepc/archive/2008/02/12/ssis-error-dts-e-cannotacquireconnectionfrom ...

  8. 兄弟连新版Linux视频教程

    兄弟连新版Linux视频教程目录:F:\linux\兄弟连新版Linux视频教程├(1)云计算是什么东西集群又是嘛玩意?.mp4├(2)兄弟连新版Linux教程 1.1.1 Linux系统简介-UNI ...

  9. HashMap、LinkedHashMap和TreeMap对比

    共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...

  10. C# http Post 方法

    摘自: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx Http Post in C# Searched out on t ...