项目组件化之遇到的坑

gnlt9447 7年前
   <p>需要做的事情很简单,就是将业务解耦模块化,让这个模块在debug下作为application单独运行,而在release下就作为library。</p>    <p>这篇其实只是写一下我碰到的问题,记录一下。</p>    <h2><strong>组件化套壳思路</strong></h2>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/70dce38b3a26cc6d5a98434cf28cd299.jpg"></p>    <p>和 <strong>main</strong> 同级下有一个 <strong>debug</strong> 和 <strong>release</strong> 目录,在用命令行 gradle assembleDebug 就会把main中的manifest和debug中的manifest合并。</p>    <p>当debug的时候就会使用debug的manifest中的activity作为入口启动,这样在开发的时候只需要在当前模块编译开发即可。</p>    <p>release的时候module就是library了,而入口就是app。</p>    <h2><strong>组件化遇到的坑</strong></h2>    <p>因为我们项目重度依赖apt以及一些编译中生成的库,像 <strong>databinding</strong> 、 <strong>dagger</strong> 、 <strong>retrolambda</strong> 。</p>    <p>我们把dagger一些公用的component以及module都随着业务module一起抽离了出来。</p>    <h2><strong>填坑之databinding</strong></h2>    <p>之后抽离databinding的时候遇到了蛋疼的问题,我们使用databinding直接get之前set进去的variable,结果这样会导致在databidning在library中编译出错,其中缘由可以另外移驾至 → http://blog.zhaiyifan.cn/2016/10/11/data-binding-in-library-module/</p>    <h3>查错</h3>    <p>databinding生成出错后,会连带dagger报错,这个时候报错又毫无头绪。</p>    <p>需要使用命令行,将编译的log输出到文件中,因为console输出log有行数限制的。</p>    <p>gradle assembleDebug --debug --info > log.txt 2>&1</p>    <h3>xml</h3>    <p>在抽离module的时候用的AndroidStudio(大坑)的refactor,但是不支持对xml的修改,所以databinding涉及的xml中的依赖都要手动修改过来。</p>    <h3><strong>生成的BR</strong></h3>    <p>有多个module都是使用了databinding,那么这个时候会有对于BR依赖的问题,你要自己区分你使用的是依赖module的BR还是当前module的BR</p>    <p>databinding组件化总结:只要一处没修改好,所有编译都是红的,反正都是泪~</p>    <h2><strong>retrolambda</strong></h2>    <p>db填完后,发现retrolambda提示生成class出错,但是它又不是apt的,根据错误提示找了许久,提示升级版本,之前是3.2.5,升级到3.3.0之后编译OK,然后在阿翟那边编译失败,又降了回来,现在又可以编译了,没有复现问题,推测是dagger依赖出现编译失败,导致了retrolambda生成失败。</p>    <p>升级到3.3.0后提示的错反而是 <strong>NoSuchMethodError</strong> ,真是扯犊子。</p>    <h2><strong>dagger</strong></h2>    <p>这位大哥,只要有一个地方错,满屏幕都是它报错,所有该生成的都没生成。而且错误提示还不友好,看错误日志的最上面,有没有提示什么。如果没有,那么就恭喜了,是不是什么地方写漏了回去慢慢看吧。</p>    <h2><strong>AndroidStudio</strong></h2>    <p>升级到2.2后,在module中开发,经常会智能提示失败,然后莫名其妙标红,命令行编译又是通过的,反正我就是关闭再重启,其他东西点了都没什么用,都是大爷MD!。</p>    <p> </p>    <p> </p>    <p>来自:http://mp.weixin.qq.com/s?__biz=MzIwOTQ1MjAwMg==&mid=2247483776&idx=1&sn=df3160bf0e88c3cbb2a651ef38a1de8d&chksm=9772ef0da005661b7e01c63decdb413662990d3b2e385cef9f1ed86eac4843d000681522d3fd&scene=0#rd</p>    <p> </p>