美文网首页
Gradle Dependency

Gradle Dependency

作者: Drew_MyINTYRE | 来源:发表于2020-10-13 09:22 被阅读0次

    dependencies和api 的区别:

    • implementation可以让module在编译时隐藏自己使用的依赖,但是在运行时这个依赖对所有模块是可见的。而api与compile一样,无法隐藏自己使用的依赖。

    使用这个配置,可以显著提升构建时间,因为它可以减少重新编译的 module 的数量。建议,尽量使用这个依赖配置,会将依赖输出到(aar或apk)

    • 如果使用api,一个module发生变化,这条依赖链上所有的module都需要重新编译,而使用implemention,只有直接依赖这个module需要重新编译。

    会将依赖打包到输出(aar 或a pk)

    • compileOnly

    不会打包到输出(aar 或 apk)。这可以减少输出的体积,只在编译时需要,在运行时可选的情况,很有用。

    • runtimeOnly

    Gradle添加依赖只打包到 apk,运行时使用,但不会添加到编译路径

    依赖的三种方式

    • 本地 library 模块依赖
    dependencies {
        implementation project(":mylibrary")
    }
    
    • 本地二进制依赖
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
    
         //如果只想依赖单个特定本地二进制库,可以如下配置:
        implementation files('libs/foo.jar', 'libs/bar.jar')
    }
    
    • 远程二进制依赖
    //等价于implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
    implementation 'com.example.android:app-magic:12.3'
    

    查看依赖树

    展开 AppName -> Tasks -> android,然后双击运行 androidDependencies。运行完,就会在 Run 窗口打出依赖树了。

    屏幕快照 2020-10-26 上午10.38.38.png

    强制使用某个版本

    如果某个依赖项是必需的,而又存在依赖冲突时,此时没必要逐个进行排除,可以使用force属性标识需要进行依赖统一。当然这也是可以全局配置的:

    dependencies { 
        compile('org.hibernate:hibernate:3.1') { 
            //如果出现冲突,gradle会选择目前版本作为最终版本 
            force = true 
        }
    }
    
    compile('com.zhyea:ar4j:1.0') {
        force = true
    }
    
    configurations.all {
        resolutionStrategy {
            force 'org.hamcrest:hamcrest-core:1.3'
        }
    }
    

    为某个变种的版本指定一个语言资源和屏幕密度

    android {
      ...
      productFlavors {
        dev {
            ...
    
            resConfigs "en", "xxhdpi"
        }
    }
    

    相关文章

      网友评论

          本文标题:Gradle Dependency

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