安卓模块化开发浅谈

2017-10-18  本文已影响48人  奋斗小青年Jerome
模块化开发适合于大型项目中多人协同开发,每个人独立开发某个模块,单独测试,单独维护,最终以library或者aar或者module的形式被应用层module依赖
image.png

这是一张模块化开发的分层图片

module.png

命名建议:
1.底层:Library
2.中间层:Module + 业务或功能名字
3.上层:App + 项目名字
建议分层进行

模块化开发最容易出现的就是依赖冲突,以下是解决依赖冲突的一些建议

1.例如上面的项目,moduleA和moduleB都被app层依赖,而moduleA和moduleB都有如下资源

<resources>
    ...
    <string name="confim">点击确认</string>
    ...
</resources>

app层中引用

// app模块
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="30dp"
    android:text="@string/confim"
    />

此时如果编译app,则app就会报资源名称冲突

解决办法比较容易,每个子模块给资源名添加前缀,具体做法是在每个子模块的build.gradle文件的android块内添加一行代码:resourcePrefix “资源名前缀”:

// moduleA模块的build.gradle文件
...
android {

    compileSdkVersion 25
    buildToolsVersion "25.0.3"

    resourcePrefix "module_A"

    ...

}
...
// moduleB模块的build.gradle文件
...
android {

    compileSdkVersion 25
    buildToolsVersion "25.0.3"

    resourcePrefix "module_B"

    ...

}
...

此时还不行,还需要我们手动去改一下资源名称,给前面加上前缀

// moduleA模块
<resources>
    ...
    <string name="moduleA">confim</string>
    ...
</resources>

// moduleB模块
<resources>
    ...
    <string name="moduleB">confim</string>
    ...
</resources>

2.重复依赖

Error:Module 'qsp_release:libLive:unspecified' depends on one or more Android Libraries but is a jar

1.方法一:
通过gradle配置
dependencies { provided fileTree(dir: 'libs', include: ['*.jar'])}
2.方式二:
右键module选择open module setting,选择要修改的module名,切换到dependencies页面,将要修改的jar的scope修改provided模式。

上一篇 下一篇

猜你喜欢

热点阅读