zoukankan      html  css  js  c++  java
  • 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')


    如果现在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

  • 相关阅读:
    IOC基础
    spring ioc原理
    spring ioc原理
    2014年度辛星css教程夏季版第一节
    2014年度辛星html教程夏季版第八节
    2014年度辛星html教程夏季版第七节
    2014年度辛星html教程夏季版第六节
    2014年度辛星html教程夏季版第五节
    2014年度辛星html教程夏季版第四节
    2014年度辛星html教程夏季版第三节
  • 原文地址:https://www.cnblogs.com/fuyaozhishang/p/11888916.html
Copyright © 2011-2022 走看看