美文网首页Android
Module相互依赖问题(2018.9.29)

Module相互依赖问题(2018.9.29)

作者: 瑟闻风倾 | 来源:发表于2018-09-29 16:16 被阅读54次

1、描述:

以电商项目为例 ,项目ModuleA依赖于功能业务ModuleB,业务ModuleB又依赖于核心ModuleC。依赖关系如图所示:


dependence.PNG

2、步骤操作:

2.1. File ——->Project Structure——->Module A(你的module工程)
2.2. 在右边的页签上点击Dependencies,点击右边的“+”添加要导入的工程Module B(这里选择你要导入的module),如图:


dependenceExample.png

3、验证导入成功:

先查看Module A的build.gradle中的文件来确认导入是否成功,通常导入成功在
build.gradle中的dependencies中会有compile project(‘:module B’)的字样,如果没有则代表导入不成功。

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation project(':latte-core')
}

3.1、确认导入成功,编译通常会报如下错误:

unspecified on project autolayouttest resolves to an APK archive which is not supported as a compilation dependency XXX等,原因是因为被依赖的ModuleB的此时还是一个Application,从Module B的build.gradle文件里面可以看到:
apply plugin: 'com.android.application'
所以这里要将application改成依赖库的属性,具体如下:
apply plugin: 'com.android.library''

3.2、 继续编译,然后继续报错:Error:Library projects cannot set applicationId. applicationId is set to ‘package_name’ in default config 。因为被依赖的库Module B,此时是作为一个库存在的,而ModuleB的applicationId是仍然存在的:

defaultConfig {
        applicationId "comi.example.liy.latte"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

作为一个库不允许设置applicationId,需要将builde.gradle — android — defaultConfig中的applicationId删除:

defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

这时,Module工程的相互依赖导入基本完成,最关键的是,这样比单独导出jar包来用稍微方便点。

相关文章

网友评论

    本文标题:Module相互依赖问题(2018.9.29)

    本文链接:https://www.haomeiwen.com/subject/vfcboftx.html