You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:如何让Gradle指定依赖离线获取其余依赖在线获取?

解决Gradle部分依赖强制用本地缓存、其余依赖在线更新的问题

我之前也碰到过完全一样的需求:想让某些依赖直接用本地缓存(和离线模式一样快),但其他依赖还能正常从线上拉取最新版本。调缓存时长、设changing属性确实没达到预期效果,后来靠这几个方案搞定了,分享给你:

方案1:用依赖锁定(Dependency Locking)——最推荐的方式

这是Gradle官方提供的精准控制依赖版本的功能,能强制指定的依赖完全使用本地已缓存的版本,不会去线上做任何校验或更新请求,效率和离线模式一致,同时不影响其他依赖的在线更新。

步骤很简单:

  1. 首先在项目根目录的settings.gradle里启用依赖锁定(Groovy示例):
    dependencyLocking {
        // 可以选择锁定所有配置,也可以只锁定特定配置(比如implementation)
        lockAllConfigurations()
    }
    
  2. 先运行一次正常的Gradle Sync,确保你要锁定的依赖(比如support-v4)已经下载到本地缓存里。
  3. 执行命令生成锁定文件:
    ./gradlew dependencies --write-locks
    
    这会在每个模块的gradle/dependency-locks目录下生成对应配置的锁定文件,里面记录了依赖的精确版本和哈希值。
  4. 如果你只想锁定特定依赖(比如只锁support-v4),可以编辑生成的锁定文件,删掉其他不需要锁定的条目;或者更精准地在模块的build.gradle里只给特定配置启用锁定:
    configurations {
        implementation {
            resolutionStrategy.activateDependencyLocking()
        }
        // 比如debugImplementation不启用锁定,依然可以在线更新
    }
    
    这样设置后,被锁定的依赖会直接从本地缓存读取,完全不碰远程仓库,未锁定的依赖则正常拉取最新版。

方案2:手动引用本地Jar包——极端场景备选

如果依赖锁定满足不了你的特殊需求,还可以直接把本地缓存里的依赖Jar包复制到项目里,作为本地依赖引用:

  1. 找到本地Gradle缓存中support-v4的Jar包,路径一般是~/.gradle/caches/modules-2/files-2.1/com.android.support/support-v4/[你的版本号]/[哈希值]/support-v4-[版本号].jar
  2. 把这个Jar包复制到项目的libs目录(比如app/libs)
  3. 在模块的build.gradle里调整依赖配置:
    dependencies {
        // 先排除其他依赖里引入的线上support-v4
        implementation('com.android.support:appcompat-v7:28.0.0') {
            exclude group: 'com.android.support', module: 'support-v4'
        }
        // 引用本地的support-v4 Jar包
        implementation files('libs/support-v4-28.0.0.jar')
    }
    
    这种方式完全不会去线上请求该依赖,但缺点是需要手动维护版本,不够灵活,适合临时应急。

方案3:自定义解析策略——精准控制单依赖

通过resolutionStrategy强制指定依赖的版本,并禁用远程检查:

configurations.all {
    resolutionStrategy.eachDependency { details ->
        // 匹配你要强制用缓存的依赖
        if (details.requested.group == 'com.android.support' && details.requested.name == 'support-v4') {
            // 指定本地已缓存的版本
            details.useVersion '28.0.0'
            details.because "Force use cached version to speed up sync"
        }
    }
    // 禁用该依赖的动态版本和变更模块缓存检查
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
    resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
}

注意:必须确保本地已经有这个版本的缓存,否则Gradle还是会尝试去线上下载。

总结

优先用依赖锁定,它既灵活又能精准控制,比手动复制Jar包好维护,也比单纯调缓存时长靠谱,完全能实现你要的“部分依赖离线、其余在线”的效果。

内容的提问来源于stack exchange,提问作者Hazem Madkour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:46:18