AS的那些坑---so库的依赖

写在前头

这篇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库拷贝到这个目录下面

接下来运行看看

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

project下的视图

android下的视图

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

Gradle是这样子的

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

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

那么问题就来了

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

很快,eclipse的做好了,上图

界面跟刚才AS的差不多

ES的工程目录比较简单

运行起来也是没问题

上图

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

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

接下来看看

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

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

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

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

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

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

所以有两种解决方法

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

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

sourceSets main jniLibs.srcDirs

这样运行起来就没问题了

时间: 2024-08-11 03:36:25

AS的那些坑---so库的依赖的相关文章

Linux 下动态库 / 静态库(依赖)

一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而main.exe又调用了libfun.so的函数int nothing(). 下面两种方式都能工作: 1> 常用的方式 g++ -shared -fPIC -o libtest.so test.cpp g++ -shared -fPIC -o libfun.so function.cpp  -L./ -I

Java 工程打包成库需要依赖其它外部库的打包方式

2019-06-14 关键字:Java 打包.jar 打包依赖 经常会有将 Java 工程打包成一个 jar 库的形式以供其它工程调用的需求.而我们需要被打包成 jar 库的工程中也难免会有需要依赖外部其它 jar 库的情况.比如,我们自己开发一个通过 HTTP 访问网络资源的工程,这个工程需要解析 XML 文件,我们通常不会自己从零开发 XML 解析的功能,网络上已经有很多现成的 XML 解析 jar 库,直接拿来用就好了.在这种情况下,我们自己的 HTTP 访问网络资源工程在开发好以后,如果

阿里规范 - 六、工程结构 - (二)二方库依赖 - 11.【参考】为避免应用二方库的依赖冲突问题,二方库发布者应当遵循以下原则:

11.[参考]为避免应用二方库的依赖冲突问题,二方库发布者应当遵循以下原则: 1)精简可控原则.移除一切不必要的 API 和依赖,只包含 Service API.必要的领域模型对象.Utils 类.常量.枚举等.如果依赖其它二方库,尽量是 provided 引入,让二方库使用者去依赖具体版本号: 无 log 具体实现,只依赖日志框架. 2)稳定可追溯原则.每个版本的变化应该被记录,二方库由谁维护,源码在哪里,都需要能方便查到. 除非用户主动升级版本,否则公共二方库的行为不应该发生变化. 补充学习

【原创】Linux下共享库嵌套依赖问题

问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 libevent_pthreads.so : 可执行程序 sa 依赖动态库 librabbitmq_r.so ; 在链接生成 sa 的时候希望只指定 librabbitmq_r.so 而不指定 libevent_core.so 和 libevent_pthreads.so . 错误信息: ... g++ ../source/authorisecfg.o ../source/bmcinst.

定位vc运行时库问题 依赖问题,屡试不爽的一招

用vc 菜单 文件| 打开|指定EXE或DLL,如有指定运行时库,则PE文件的资源中可以看到manifest 配置节 然后据此判断EXE依赖的运行时库, 再根据编译选项调整 运行时库设置

Qt编译时MinGW去掉对gcc动态库的依赖(去掉对libgcc_s_dw2-1.dll,libstdc++-6.dll的依赖)

用Qt写点东西,我一般是下载官方的MinGW编译工具包,它有个不好的地方,经常还会多一些除了Qt库以外的其它的依赖动态链接库,比如:libgcc_s_dw2-1.dll,libstdc++-6.dll这样的鬼东西,之前用CodeBlock的时候发现没有这样的现像,就感觉很奇怪,于是仔细查找了一此资料,原来这些东西可以通过设置编译器选项把它们去掉的,其实就是改成静态链接依赖库中的代码. 我这里是直接修改Qt编译后的配置,找到QTDIR/mkspec/win32-g++ /qmake.conf,QM

Gradle 编译多个project(包括多Library库project依赖)指导

Gradle Android最新自己主动化编译脚本教程(提供demo源代码) 这篇文章我简单写了基于Gradle2.1 进行的android project和android library的编译实例,随后有网友问我是否支持依赖多library编译.我的回复是肯定的,具体见以下的指导: 在实际开发中有非常多工程引用到了android-support-v4.jar或者其它的jar包资源: 有时候.在每一个library库的libs里都放进android-support-v4.jar 在eclpse里

Linux下共享库嵌套依赖问题 (转载)

转自:http://my.oschina.net/moooofly/blog/506466 问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 libevent_pthreads.so : 可执行程序 sa 依赖动态库 librabbitmq_r.so ; 在链接生成 sa 的时候希望只指定 librabbitmq_r.so 而不指定 libevent_core.so 和 libevent_pthreads.so . 错误信息: ... g

Gradle 编译多个工程(包含多Library库工程依赖)指导

Gradle Android最新自动化编译脚本教程(提供demo源码) 这篇文章我简单写了基于Gradle2.1 进行的android project和android library的编译实例,随后有网友问我是否支持依赖多library编译,我的回复是肯定的,详细见下面的指导: 在实际开发中有很多工程引用到了android-support-v4.jar或者其他的jar包资源: 有时候,在每个library库的libs里都放进android-support-v4.jar 在eclpse里编译运行是