AndroidStudio如何引入so包

简介: AndroidStudio如何引入so包

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

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

结论:

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

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

image.png

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

也许有人说,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中,默认会有一些这样的配置:

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下的工程一样,就改这里的值就可以,不一一细说了。

相关文章
|
3月前
|
Java 开发者
javafx jlink 遇到的非模块化的依赖打包报错“模块异常”的问题和处理
【9月更文挑战第18天】在使用JavaFX的jlink进行应用打包时,非模块化依赖可能导致“模块异常”报错。此文档详细分析了该问题的原因,并提供了四种解决方案:模块化依赖、自动模块转换、手动创建模块描述符及检查模块依赖关系。通过这些方法,可以有效解决此类问题,提高项目的可维护性和扩展性。建议开发者优先选用模块化设计。
306 1
|
7月前
|
XML Java Maven
深入探讨Maven打包:打造精致的Zip包
本文介绍了如何使用Maven将Spring Boot项目打包并部署。首先,利用Maven Assembly Plugin创建包含JAR的ZIP文件,以便于部署和修改配置文件。该插件允许自定义打包内容和格式。在`package.xml`中定义了打包格式、依赖、脚本和资源文件的规则。接着,在POM.xml中配置插件,排除配置文件和静态资源以保持外部。最后,执行`mvn package`命令生成分发包,简化了项目的部署流程。
444 2
|
7月前
|
Java Maven
maven引入本地jar不能打入部署包的问题解决
maven引入本地jar不能打入部署包的问题解决
75 0
|
Java Android开发
AndroidStudio导入httpmime jar编译不通过的解决办法
AndroidStudio导入httpmime jar编译不通过的解决办法
166 0
|
Ubuntu
AndroidStudio 导入项目模块失败
AndroidStudio 导入项目模块失败
107 0
AndroidStudio 导入项目模块失败
|
Java Android开发
Android如何通过Gradle发布java依赖库(jar)到 jitpack 公共仓库(—)
Android如何通过Gradle发布java依赖库(jar)到 jitpack 公共仓库(—)
341 0
|
Java 编译器 Linux
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)
321 0
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)
|
Java Android开发 C++
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(一)
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(一)
341 0
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(一)
|
安全 算法 Java
【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )(一)
【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )(一)
250 0
【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )(一)