室内定位APP--使用Library--Android Studio 之导入Module / Library

简书:https://www.jianshu.com/p/a0e90bed6a47

转载:Android添加library/moudle踩坑总结
https://www.2cto.com/kf/201712/708739.html
Android添加library/moudle踩坑总结,最近需要将我之前开发的一个功能模块以library的形式集成到公司的项目中,由于本人小菜鸟一个,之前项目也从未涉及过library相关。搜集了一些资料后感觉挺简单就开始了我的集成之路,没想到是山路十八弯,经历了九九八十一坑之后,纠结了三天的心情豁然开朗,最最重要的是我这老男人也恋爱了!哈哈哈!满怀着春光得意之情,待我将降魔伏妖的故事娓娓道来!

第一回合 新建或者引入library

我们有两种方式新建或者引入,具体操作流程网上一大堆。(上述便是)

注意:1、新的library的buid.gradle 文件第一行确保是apply plugin: ‘com.android.library’,而非apply plugin: ‘com.android.application’,如图:
在这里插入图片描述

2、注意若是引入的library,需要将引入前library(还是个工程)下的build.gradle中的相关配置复制到新工程下的build.gradle中,如在我的项目中新的library有mpAndroidchart 依赖库,引入前需要在工程下的build.gradle中做如下配置,
在这里插入图片描述
当我引入为library后,只包含app下的build.gradle,这样就需要在新工程下的build.gradle中做相同的配置。

第二回合 sdk匹配

新的library中的各种sdk版本需要和主工程的一致,打开library的build.gradle文件参考主工程中build.gradle文件进行一一对应,各种sdk版本如图所示:
在这里插入图片描述

第三回合 各种第三方依赖版本的“匹配”问题

确切的来说,应该是第三方依赖版本的“限制”,而非“匹配”。为什么这样说呢?因为对于library可以说是一个独立的模块,即便是主工程和library分别引用了某个第三方库,比如同时引用了图片加载框架 Glide3.7 和Glide4.0,按道理是可以编译运行的,只要你的compile sdk version 的版本支持即可。可偏偏这种问题会被我们忽略掉,因为我们的主工程很有可能是以前开发的由于历史原因没有来得及匹配最新的sdk版本,而我们新建或最新添加的library默认是高版本的 “各种sdk版本”,通常在第二回合匹配的过程中需要手动降低版本,这就有可能出现编译不通过。
拿我来说刚进公司,项目经理要求我写个功能模块,我已迅雷不及掩耳之势写完后,又给了哥公司以前的项目,要我将该模块以library的形式添加到项目中,起初我提过有无版本要求,被告诉无所谓啊!无所谓啊无所谓! 望着满屏的错误,我很崩溃,关键是还未意识到是低版本限制了我library第三方库。开始我是直接导入,后来我新建,然后是一点点的复制,还是报错,我绝望之下,将build.gradle中的代码复制一句编译一下,终于排查出来 原来是 compile ‘pub.devrel:easypermissions:1.0.1’ 要求的是高版本的SDK,当我降低版本之后,里面的一些资源文件找不到了或者是所依赖的appCompact库版本太低,类似的还有compile ‘com.jwenfeng.pulltorefresh:library:1.2.7’,还有compile ‘com.android.support:appcompat-v7:26.+’等等。
错误代码如:error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light’.

第四回合 greenDao的问题

我刚集成那会报了个错 ,错误的地方在之前已有library中greenDAO的实体类中,如下:
Constructor (see ExampleEntity:21) has been changed after generation.
Please either mark it with @Keep annotation instead of @Generated to keep it untouched,
or use @Generated (without hash) to allow to replace it.
对于这个错误有两种解决方案:一是找到报错的bean类,将greendao自动生成的get set 以及构造方法删掉重新make project生成。二是上面的提示将构造方法的注解@Generated 替换为@keep即可; 我采用的是第一种方法。
注意:这个错误可能会持续好几个回合,耐心一点就好。

第五回合 butterknife的问题
集成前:看看自己用的butterknife,看看公司项目中的findviewbyid ,我感觉自己很牛B!集成后:看着自己library中所有butterknife找不到ID我很忧伤!当我发现ID明明存在,我的butterknife就是不识别 瞬间感觉自己很SB。

第六回合 总结
其实在我的集成路上,当初只顾降妖除魔,还有好多的问题没有记录下来,也有点想不起来了,包括一些错误代码也没有记录。以上只是我现在能回想起来印象比较深刻的几个大坑。 所以以后遇到问题要及时记录问题所在,错误代码及解决方案!希望我这还是菜鸟的老男人能在程序猿的道路上修成正果

猜你喜欢

转载自blog.csdn.net/qq_28686157/article/details/84140560