写在前头

这篇blog是用来泄愤的,感觉没有写的话我今天自己受自己的那些气就白受了

因为so库的依赖问题,我把腾讯地图改成了百度地图

还是因为so的问题,改了百度地图差点又换成高德了

然而想想,肯定不是so的问题,绝逼是依赖的方式不对

因为Demo完全没问题

然后就懵逼了一天

网上找了各种方法,各种尝试都不见效

然而一个点子,就那么点一下,就都通了

--------------------废话分割线-----------------------


再废话一下,有时候技术就是差那么一点,一个地方没做好,他就是没办法跑起来,所以马虎不得

----------------------废话再次分割线-----------------------


废话说完,开始解决问题

本次要解决的问题是android studio的so库依赖问题


工具:Android Studio

场景:从es导过来的一个项目,然后手动更新so库跟jar包

问题:项目中总是找不到so库



1、基础版so库依赖

先说一下AS怎么依赖so库吧

用一个小例子来说明

界面很简单,就一个按钮点击,上面显示定位地址

接下来我们下载百度的Demo,依葫芦画瓢把百度定位集成上去


需要注意的是


将工程目录切换到project视图,将jar文件拷贝到libs目录下,并且选中全部,右键添加到库


在与java同级目录下新建一个jniLibs目录,将so库拷贝到这个目录下面



接下来运行看看

AS的那些坑---so库的依赖_第1张图片


很好,完全没问题,项目目录是这样的

project下的视图

AS的那些坑---so库的依赖_第2张图片

android下的视图


AS的那些坑---so库的依赖_第3张图片




需要注意的是我们的项目名称叫app

Gradle是这样子的

AS的那些坑---so库的依赖_第4张图片


好的,你如果是从AndroidStudio那边直接新建一个项目再做依赖的话,那完全没有问题,还挺简单


2 Es项目迁移过来版的so库依赖问题


那么问题就来了

我们先新建一个es项目吧,让问题重现


很快,eclipse的做好了,上图

界面跟刚才AS的差不多

AS的那些坑---so库的依赖_第5张图片



ES的工程目录比较简单

运行起来也是没问题

上图

AS的那些坑---so库的依赖_第6张图片




嗯,蛮快的,现在我们需要把ES的项目导入as

运行起来也是没问题的,我就不截图了

接下来看看

AS的那些坑---so库的依赖_第7张图片

嗯,完全没问题,但是因为项目太过简单,我们得做一些手脚

我们把项目名称由app--->esApp

因为很多时候我们的项目足够复杂或者你依赖的一些库包含一个完整的Demo的话,AS就不会将我们的主要应用自动识别并改名叫app


可惜这个场景没有再重现,后面看到再来补充

就是当你的项目名称不是app时就会出现找不到so库的情况

原因是因为AS默认的so库的路径是app\src\main\jniLibs,如果你的项目名称不是app的话就找不到so文件

所以有两种解决方法


一 将你的主项目名称改为app


二 将so库都放在libs目录下,然后再gradle那边配置


sourceSets main jniLibs.srcDirs







这样运行起来就没问题了