美文网首页
Android Module引用另一个Module,却无法使用里

Android Module引用另一个Module,却无法使用里

作者: 提莫熊猫侠 | 来源:发表于2020-05-04 10:27 被阅读0次

    如果模块化开发中遇到

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

    相关文章

      网友评论

          本文标题:Android Module引用另一个Module,却无法使用里

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