转载——Android Module引用另一个Module,却无法使用里面的依赖库

如果模块化开发中遇到

多模块的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')

    
    
    
    
  • 1
  • 2
  • 3

如果现在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'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果这样写的话,主工程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'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

api project(":framework")

   
   
   
   
  • 1

当然如果全部做完,由于很多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’
}
}
}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
      

你可能感兴趣的:(转载——Android Module引用另一个Module,却无法使用里面的依赖库)