如果模块化开发中遇到

多模块的AndroidManifest.xml没有合并
or
多模块的资源文件没有合并
or
模块A include了模块B,而无法使用模块B内依赖的其他aar包中的类的时候
or
提示Support包版本不一致
这篇文章可能就是你要的解决方案~

举个栗子:

比如我们现在有一个App模块设计为:
主工程: app
模块: ui , framework

引入模块的方式:在settings.gradle中,指定正确的模块路径

include ':app', ':framework', ':ui'
project(':framework').projectDir = new File('../framework')
project(':ui').projectDir = new File('../ui')

如果现在framework引入了一些依赖库,假设如下:

// Retrofit 网络框架依赖
implementation "com.squareup.retrofit2:retrofit:2.5.0" // Gson 依赖
implementation 'com.google.code.gson:gson:2.8.5' // ARouter解耦框架
implementation 'com.alibaba:arouter-api:1.4.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

如果这样写的话,主工程app中将无法调用到这些依赖库中的类。
因为implementation声明的依赖只能在本module模块内使用,跨module使用就要使用api声明(其实就是曾经的compile,但是如果设置成compile,AS又要给你叫叫叫)!!改成如下即可

// Retrofit 网络框架依赖
api "com.squareup.retrofit2:retrofit:2.5.0" // Gson 依赖
api 'com.google.code.gson:gson:2.8.5' // ARouter解耦框架
api 'com.alibaba:arouter-api:1.4.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

同理,这是模块里引用别的aar,这样配置完了,那么紧接着需要在依赖framework的app模块中,
在build.gradle的依赖处加入对应的引入哈。

api project(":framework")

当然如果全部做完,由于很多aar里使用了不一样的support版本,一定会提示版本不兼容了(其他aar不兼容的解决方案一样哈),在主工程app的build.gradle中指定:

android {
.....
.....
//指定jdk版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
} // 如果提示多个重复文件,加这属性
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}
} // 用于指定所有aar引用同样版本的support包
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}

————————————————
版权声明:本文为CSDN博主「胖虎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ljphhj/article/details/86262031

Android 主Module引用依赖Module,却无法使用里面的依赖库的更多相关文章

  1. 解决Android Studio 3.0导入module依赖后unable to merge index

    解决Android Studio 3.0导入module依赖后unable to merge index 项目需要使用im, 在项目里导入了腾讯im的几个module依赖, 项目无法编译, 报错una ...

  2. Android Studio 添加引用Module项目

    新建Android项目,修改为Module 新建一个android项目 给项目命名,这里命名为MyLibrary,作为可引用的Module项目 点击下一步,选择一个Activity,点击ok 下面将这 ...

  3. Android Studio 生成aar包多Module引用问题

    问题描述: 有个arr文件被放到Module A中引用,现在Module B又依赖了Module A,则在编译过程中会发生错误,Module B找不到aar文件. 解决办法: 使用相对路径来找到这个a ...

  4. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  5. 【Android Studio安装部署系列】十三、Android studio添加和删除Module

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 新建.导入.删除Module是常见的操作,这里简单介绍下. 新建Module File——New——New Module... 选中 ...

  6. SpringMVC 项目中引用其他 Module 中的方法

    1. 将要引用的Module 引入项目中 2. 在主Module中添加依赖, 3. 被引用的类必须放在 Module 中/src/下的某个package中,否则引用不到(重要)

  7. 【Android Studio安装部署系列】十三、Android studio添加和删除Module 2

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 新建.导入.删除Module是常见的操作,这里简单介绍下. 新建Module File——New——New Module... 选中 ...

  8. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  9. Xamarin.Android模拟器提示HAX kernel module is not Installed

    Xamarin.Android模拟器提示HAX kernel module is not Installed 错误信息:emulator : ERROR : x86 emulation current ...

  10. Android Studio如何删除一个Module

    当你想在Android Studio中删除某个module时,大家习惯性的做法都是选中要删除的module,右键去找delete.但是在Android  Studio中你选中module,右键会发现没 ...

随机推荐

  1. STL函数适配器

    一:适配器简介 C++中有三类适配器,分别是容器适配器,迭代器适配器和函数适配器,这里主要介绍函数适配器. (一)函数适配器简介 STL中已经定义了大量的函数对象,但是有时候需要对函数返回值进行进一步 ...

  2. 123456---com.twoapp.huanYingMotro--- 幻影摩托

    123456---com.twoapp.huanYingMotro--- 幻影摩托

  3. dts reader

    package com.aliyun.dts.connect; import com.alibaba.fastjson.JSONObject; import com.aliyun.drc.client ...

  4. python基础之:九步认识装饰器

    step1. 先看个代码吧: def f(): ') f=lambda a:a +100 #覆盖上面的函数f print(f) #函数名指函数所在内存中的位置,入带后面括号表示执行函数 print(f ...

  5. jquery控制一个元素是否显示

    比如说我有一个id为dlg-buttons的div元素. 我可以通过 $('#dlg-buttons').show(); 让他显示出来: 可以通过 $('#dlg-buttons').hide(); ...

  6. 【Leetcode_easy】705. Design HashSet

    problem 705. Design HashSet 题意: solution1: class MyHashSet { public: /** Initialize your data struct ...

  7. 【动手学深度学习】Jupyter notebook中 import mxnet出错

    问题描述 打开d2l-zh目录,使用jupyter notebook打开文件运行,import mxnet 出现无法导入mxnet模块的问题, 但是命令行运行是可以导入mxnet模块的. 原因: 激活 ...

  8. Burpsuite—渗透测试神器

    Google浏览器插件---SwitchyOmega Firefox浏览器插件---SwitchyOmega hosts代理工具---SwitchHosts[右击使用管理员权限打开] 双击burp-l ...

  9. 使用自定义Comparator对TreeSet中的数据进行多条件排序

    代码记录(需求:根据店铺等级和店铺到某个点的距离进行排序,其中店铺等级由高到低,距离由近及远) 需要排序的对象Store,Store.java package com.zhipengs.work.te ...

  10. Memcached内存调优及建议

    一.Memcached调优 目标: 提高内存命中率 减少内存浪费 增加内存重复利用率 问题: 存不满Chunk 内存数据大量堆积 slab不能被page整除 page不能被Chunk整除 方向: 调整 ...