![ccf263be01525a475729f4a318766604.png](https://i-blog.csdnimg.cn/blog_migrate/bcd6350f613925d67462c0078a17097a.jpeg)
把大象装进冰箱需要几步?
其实,如果顺利的话,AS 生成 so 的步骤还是比较清晰的。
但是,随着我升级到了 AS 最新版 「3.3.1 稳定版」
而且我也不再想使用下面两种方法解决
Your project contains C++ files but it is not using a supported native build
这个问题。
一、使用 「老版本 NDK」进行兼容:
把 android.useDeprecatedNdk=true 添加进 gradle.properties 中
二、隐藏 cpp 文件:
在 app 的 build.gradle 中添加
sourceSets { main { jni.srcDirs = [] } }
那么,步骤就多了几步了,不过没关系,只要跟着我填坑的姿势 一步一步走 还是能成功的,而且花费的时间也不是很多哟,一起来看看吧。
开始啦
一、先配置 NDK 环境
![486499918cf27ffd2c0c22191b26951d.png](https://i-blog.csdnimg.cn/blog_migrate/4c0480af932989014cf9530d7c58f6e0.jpeg)
说明:创建项目完成之后,点击图片右上角的 项目结构,然后选择 SDK Location 就能看到 NDK 配置出现了,直接点击让 AS 自己下载、配置就可以了
二、配置好之后,创建 JNI 文件夹
看图就会啦
![1765043083359a9b219113c43ae8070d.png](https://i-blog.csdnimg.cn/blog_migrate/b1586fd8f2be437cdb9525623341b4e6.jpeg)
三、创建好之后,通过 javah 命令生成「头文件」
![230ca1a3ab53f6cecdca3877431a5732.png](https://i-blog.csdnimg.cn/blog_migrate/97781e4c9f689211b43710a08fc22fbb.jpeg)
命令:
javah com.example.ndktest.MainActivity
即 javah 后边跟着 我们的 MainActivity 的「引用名」,没有 .class 后缀的哦
复制引用名方法:复制好之后,把 .class 后缀去掉
![1bbd054a27d0d993cd65e874e009b301.png](https://i-blog.csdnimg.cn/blog_migrate/e6ca7cc27397b6943b1c27b3254fe9ab.jpeg)
注意我是先进入的java目录,然后开始执行的呦,生成之后,记得将这个头文件移动到 jni目录中
![b8cb43ec0adcba7ef0a600866a7cca69.png](https://i-blog.csdnimg.cn/blog_migrate/0c24c49856ce54bdaf4fe1477f36462e.jpeg)
四、配置 build.gradle,然后构建项目
![2127df3f10b2dc1ec9094d1b7f8e8961.png](https://i-blog.csdnimg.cn/blog_migrate/0dbf7c2b4dd53805cf9b09e4a5ba81d3.jpeg)
按照图片方式执行完后,报错了
![6b5046c41ad9f02f25c995ba794cd4e8.png](https://i-blog.csdnimg.cn/blog_migrate/a48eb4aad6a1fbb9b860d1f865f2dd43.jpeg)
这个时候,你可以按照我 开头说的那两个方法解决一下,是可以通过的,可是现在我有点倔,就不用那两种方法,我决定听一听 android studio 善意的提醒 Consider using CMake or ndk-build integration.
五、按照 Android Studio 的提示,使用 CMake 或者 ndk-build 去生成
![ac5d239825e5b836fa4d4abbba20a457.png](https://i-blog.csdnimg.cn/blog_migrate/041cdd0bef948907c81329a40790aa18.jpeg)
module 处右键 选择 Link C++ Project with Gradle
![8ec5a3703c52927ed29c5c2b3df9a8d2.png](https://i-blog.csdnimg.cn/blog_migrate/1c282e76950a3bf34ded2e7914a79056.jpeg)
选择哪个都可以,这里我选择是 ndk-build,因为 CMake 对应的 CMakeLists.txt 文件懒得写
而ndk-build对应的 Android.mk文件却有现成的,位置在:app/build/intermediates/ndk/debug如下图所示:
![3eaebeecc9425bb12d7ab8cf8b82a55d.png](https://i-blog.csdnimg.cn/blog_migrate/c2c804131e264e323ec14ee6b388e9d2.jpeg)
复制路径,然后指定一下即可,如图
![5400125fb411711fe54879067ec33748.png](https://i-blog.csdnimg.cn/blog_migrate/30ff9f33e00ba9affd67987ac81ec73c.jpeg)
最后,点下小锤子
![38c36a869d0857d79f8df34ed903f906.png](https://i-blog.csdnimg.cn/blog_migrate/e1d391ff78a510eeaeccb0244282a1ba.jpeg)
这样就成功生成了,生成的位置见下图
![54e1373436b4176e22fb81d702203742.png](https://i-blog.csdnimg.cn/blog_migrate/389c02960ee9ea3a272080c2df15a4fa.jpeg)
六、复制 so 文件到 libs 目录即可
![2c743a5fad7e5a037b5c20623bc77651.png](https://i-blog.csdnimg.cn/blog_migrate/9d51464cceb8d3a4edd78bba559f4788.jpeg)