Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

  • tool

    • mac
    • mac tool
    • c tool
    • platform
    • dev tool
    • java tool
    • IDEA
    • vscode
    • Docker 使用指南
    • unbuntuOnWindows
    • oh-my-zsh
    • github
    • lldb
    • ripgrep 高性能文本搜索工具使用指南
    • appium
    • mvn
    • ffmpeg
    • gradle
      • common
      • AGP
        • AGP 升级
        • prefab
      • Controlling Transitives
        • share versions
        • 解决版本号冲突
      • other
        • 缓存问题
        • debug
    • git 使用指南
    • jenv
    • php-fpm
    • raycast
    • Vim 编辑器入门指南
    • jadx
    • excalidraw
  • 网络

  • algo

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • tool
Jacky
2023-05-23
目录

gradle

Gradle is an open-source build automation tool flexible enough to build almost any type of software. Gradle makes few assumptions about what you’re trying to build or how to build it. This makes Gradle particularly flexible. link (opens new window)

# common

  • ./gradlew :<module>:dependencies: 打印依赖
    • ./gradlew :<module>:dependencies --configuration releaseCompileClasspath: 打印指定变体 releaseCompileClasspath 依赖

# AGP

# AGP 升级

# prefab

在过去进行 native 开发的时候, 如果想要依赖其他的 native 库时一般需要将头文件和.so/.a 拷贝一份到当前仓库内。这种方式不仅更新 native 库版本不容易, 还会因为存放二进制文件导致仓库变大。Google 为了解决这个问题, 提出了一个格式叫做 Prefab | prefab (google.github.io)。简单来说, Prefab 是一种为预构建 C/C++ 库生成构建系统集成的工具, Prefab 包由少量元数据和它所描述的预构建库组成 Google 在新版本的安卓打包插件(AGP)内会识别和生成 prefab, 现在可以从应用的 AAR 依赖项导入 C/C++ 库头文件, 也可以在发布 AAR 时携带自己的头文件:

  • AGP4.0 时提供了识别 prefab 功能: https://developer.android.com/studio/releases/gradle-plugin?buildsystem=cmake#native-dependencies (opens new window)
  • AGP4.1 时提供了发布 prefab 功能: https://developer.android.com/studio/releases/gradle-plugin?buildsystem=cmake#4.1-prefab-publish (opens new window)

# Controlling Transitives

# share versions

在 Gradle 构建中, 有两种常见的方式来管理依赖的共享版本: 平台(platform)方式和目录(catalog)方式 要知道更多详情可见官网 share version (opens new window)

  1. 平台方式(Platform-based Approach):

    • 平台方式通过定义一个称为"平台"(platform)的依赖项来管理共享版本
    • 平台定义了一个版本, 而不是具体的依赖项。它充当一个版本约束, 可以在多个子项目中共享
    • 平台可以包含多个相关联的依赖项, 并确保它们使用相同的版本
    • 子项目可以声明对平台的依赖, 而不需要指定具体的版本号
    • 平台方式适用于具有多个子项目, 并且需要确保这些子项目使用相同版本的依赖项
  2. 目录方式(Catalog-based Approach):

    • 目录方式通过定义一个称为"目录"(catalog)的依赖项来管理共享版本
    • 目录是一个定义了多个依赖项及其相应版本的集合
    • 目录中的依赖项可以按组织结构或其他自定义规则进行组织
    • 子项目可以引用目录中的依赖项, 并指定相应的版本号
    • 目录方式适用于需要在一个中心位置管理多个依赖项及其版本的场景

选择使用平台方式还是目录方式取决于项目的需求和组织结构。以下是一些考虑因素:

  • 如果您的项目有多个子项目, 并且您希望确保它们使用相同版本的依赖项, 那么平台方式是一个不错的选择
  • 如果您希望在一个中心位置定义和管理依赖项及其版本, 以便供多个项目使用, 那么目录方式可能更适合
  • 平台方式更适合于管理大型项目的版本依赖关系, 而目录方式则更适合于组织结构较简单的项目

要在 Gradle 项目中选择使用平台方式还是目录方式, 您需要根据项目的具体需求进行评估, 并在构建脚本中进行相应的配置。您可以使用 Gradle 的相关插件或功能来定义和管理平台或目录

# 解决版本号冲突

Customizing resolution of a dependency directly (opens new window)

示例

subprojects {
    group = 'xxx'
    configurations.all { Configuration configuration ->
        configuration.resolutionStrategy {
            preferProjectModules()
            force('<group>:<artifact>:<version>')
        }
    }
}
1
2
3
4
5
6
7
8
9

【注】发布到 maven 的话不要用 force 关键字, 会导致其他依赖你的库 也锁死了相关库的版本号

# other

# 缓存问题

  1. gradlew clean & ./gradlew --stop: 命令行使用此命令尝试
  2. IDE invalid cache & restart
  3. 删除 ~/.gradle/cache

# debug

方案一: 利用 gradle 的参数让其等待我们的调试进程 attach 上去

gradle :app:clean -Dorg.gradle.debug=true  --no-daemon
1

后续操作可以参考: 断点调试 (opens new window)

方案二: 用环境变量

export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
1

而后执行跟正常的命令是一样的

上次更新: 2025/10/09, 23:53:03
ffmpeg
git 使用指南

← ffmpeg git 使用指南→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式