转自:http://blog.csdn.net/aplixy/article/details/51592035

先说前提条件,我的AndroidStudio版本是2.2 Preview 3,版本是2.1的同学应该也是一样的。

然后说结论吧,有些同学可能赶着做项目:

结论:

so包应该放在相应模块(比如app模块)下的src目录下的main目录下的jniLibs目录。

注意是jniLibs,最后边有个s,不是jniLib,并且L要大写。如果你在src/main目录中看不到jniLibs目录,那你只需要自己建一个这个目录就可以了,然后把你的so包按编译平台分类拷贝进去就可以了。然后呢?然后就完了,就这样就可以了,因为系统默认就会去这个目录中找对应的so包。如下图所示:

接下来有兴趣的同学可以了解下为什么是这样。

也许有人说,so包应该跟jar包一样呗,放在对应模块的libs目录下,eclipse就是这样的。有这么简单吗?答案是:NO

原理:

其实在AndroidStudio中,我们之所以可以把jar包放在对应模块的libs目录下,比如app模块(也就是通常意义下的主工程了)的libs目录中,而不需要再去配置build.gradle文件,就可以正常使用这些jar包,是因为在AndroidStudio中新建项目时,系统已经在默认为我们配置好了gradle,如果仔细看模块下的build.gradle文件的话,一般会有这么一句:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])}

看到了吧,这句就是告诉gradle,我们的第三方jar包在libs目录下,如果没有这一行配置,那么理论上我们把jar包直接放在libs目录下其实是不行的,只不过新建项目时系统已经为我们配好了。这里libs是个相对路径,因为我们的build.gradle文件本身就在app模块下,那么这里的libs当然也就是指app模块下的libs,其实build.gradle文件中所有的路径都可以写相对路径,我们下边讲的so包的路径也是只写相对路径就可以了。

OK,言归正传,现在知道jar包的引入原理了,那么so包为什么要放在那么奇怪的目录下?能不能放在任意一个自定义的目录呢?当然是可以的。

其实在build.gradle中,默认会有一些这样的配置:(默认的,如果有jniLibs目录就不需要设置,可以直接使用,否则会报错)

sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
aidl.srcDirs = ['src/main/aidl']
}
}

这些配置在你新建工程之后,在build.gradle文件中默认是没有的,因为默认就是这样的,当然也就不写也可以,当然你写出来也没错。意思是so包就去src/main/jniLibs目录下找,aidl文件默认就到src/main/aidl目录下找。。。当然还有许多其它的配置,你还可以配置你的AndroidManifest.xml文件在哪里,还可以配置你的java代码在哪里,如果你不配的话都会有一个默认值,这里只是以jniLibs和aidl为例而已。

看到这里你应该就明白了,为什么我们把so包直接放到src目录下的main目录下的jinLibs目录就可以了,而不需要配置gradle文件了,因为系统默认就会到这个目录下找,如果你想把so包放在一个你喜欢的地方,比如直接放在app目录下的myJniLibs目录下,那你只需要把上面内容改成:

sourceSets {
main {
jniLibs.srcDirs = ['myJniLibs']
aidl.srcDirs = ['src/main/aidl']
}
}

这样就可以了。明白了原理,似乎一切都明了了,同理,如果不想把aidl文件放在默认目录下,也可以改aidl.srcDirs的值,如果不想把java代码放在默认目录,就可以改java.srcDirs的值,如果不想把资源文件放在默认目录下,就可以改res.srcDirs的值。。。还有几个,同学们慢慢去研究吧,如果你想把目录结构改的跟eclipse下的工程一样,就改这里的值就可以,不一一细说了。

AndroidStudio如何引入so包的更多相关文章

  1. Maven工程引入jar包

    Maven项目引入jar包的方法 法一.手动导入:项目右键—>Build Path—>Configure Build Path—>选中Libraries—>点击Add Exte ...

  2. 基于注解整合struts2与spring的时候如果不引入struts2-spring-plugin包自动装配无效

    基于注解整合struts2与spring的时候如果不引入struts2-spring-plugin包,自动装配将无效,需要spring注入的对象使用时将抛出空指针异常(NullPointerExcep ...

  3. [转]myeclipse 生成JAR包并引入第三方包

    myeclipse 生成JAR包并引入第三方包 我用的是myeclipse8.0 首先用myeclipse生成JAR 一.生成JAR包 1.点选项目右键—>Export 2.Java—>J ...

  4. Maven工程引入jar包(转)

    Maven项目引入jar包的方法,希望能帮助有需要的朋友们 法一.手动导入:项目右键—>Build Path—>Configure Build Path—>选中Libraries—& ...

  5. 关于常用的编码工具如何引入jar包

    myeclipse和eclipse(差不多)引入jar包: 普通项目: 1.对准你的项目创建一个文件夹名字尽量命名成lib(注意要和src平级,不要在src下创建文件夹). 2.将下载好的依赖放到li ...

  6. Spark-shell引入第三方包

    Spark-shell引入第三方包 如何引入 spark-shell --jars path/nscala-time_2.10-2.12.0.jar 若有多个jar包需要导入,中间用逗号隔开即可. s ...

  7. Eclipse中的工程引入jar包后没有整合到一个文件夹而是全部在根目录下显示

    Eclipse中的工程引入jar包后没有整合到一个文件夹而是全部在根目录下显示 解决方案: 1,在Eclipse中,点击window-->Preferences-->Java-->B ...

  8. Eclipse引入jar包的三种方式

    引用自 http://chenxu.wo.blog.163.com/blog/static/50239687201162310620634/ 使用Eclipse开发应用程序,少不了使用第三方jar包, ...

  9. javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题

     引言:很多人用ide集成开发环境用的多了,对dos命令编译多个java文件或引入jar包都变得陌生了,java不同于其他解释语言,如ruby.php 都有require,直接引入即可运行代码,但ja ...

随机推荐

  1. LoadRunner常用函数汇总

    LoadRunner命令汇总 . 命令行分析函数 (1)lr_get_attrib_double() 检索脚本命令行中使用的double类型变量 (2)lr_get_attrib_string() 检 ...

  2. 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?

    使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...

  3. JavaScript最全编码规范

    转载: JavaScript最全编码规范 类型 ●基本类型:访问基本类型时,应该直接操作类型值 ●string ●number ●boolean ●null ●undefined var foo = ...

  4. thinkphp5.0配置作用域

    作用域 配置参数支持作用域的概念,默认情况下,所有参数都在同一个系统默认作用域下面.如果你的配置参数需要用于不同的项目或者相互隔离,那么就可以使用作用域功能,作用域的作用好比是配置参数的命名空间一样. ...

  5. windbg调试相关命令

    windbg 查找函数:x exe!main* 条件断点打印字符:bp 7199a2b0 ".printf \"message:%ma\", poi(@esp+8);.e ...

  6. RecyclerView悬浮标题

    效果图:        1.顶部会悬浮章的部分 2.第二章上滑会推挤第一章 3.第二章下拉会带出第一章 4.并不是所有时候都有悬浮部分(为什么这条标红,因为市面上几乎所有的悬浮都是必须存在且在顶部,害 ...

  7. DateFormat 线程安全

    SimpleDateformat 线程不安全 SimpleDateFormat 继承自 DateFormat, SimpleDateFormat中的parse方法override父类DateForma ...

  8. java getenv getProperties区别

    网上很多使用的是getProperties.说获得系统变量,但是其实不正确.getProperties中所谓的"system properties"其实是指"java s ...

  9. vagrant 常用命令以及常用操作

    列出这些命令,主要是防止脑内存不足.目前这些命令是我常用的,以后其他命令用的多,我再继续添加... 分享些本人用的百度网盘box,国外的太坑... 本人分享的百度网盘:http://pan.baidu ...

  10. Markdown---锚点使用

    Markdown目前还没有支持文内锚点的标记语法:但是支持html,所以锚点可以通过html语法来实现 使用方法 <a href='#jump'>第一个题目</a> 带有锚点的 ...