Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置

Android开发避坑指南:Gradle版本与Android Gradle Plugin(AGP)的兼容性矩阵详解 本文详细解析了Android开发中Gradle版本与Android Gradle Plugin(AGP)的兼容性矩阵,帮助开发者避免常见的构建错误如'Unable to find method'。通过官方兼容性表格解读、项目配置检查和修正指南,以及多模块项目特殊考量,提供了一套完整的预防和解决方案,确保构建过程顺畅高效。 阅读详情

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup


4、Dependencies,Android Libraries and Multi-project setup(依赖关系,Android库和多项目设置)


Gradle项目可以依赖于其它组件。这些组件可以是外部二进制包,或者是其它的Gradle项目。


4.1 Dependencies on binary packages(依赖二进制包)


4.1.1 Local packages(本地包)


配置一个外部库的jar包依赖,你需要在compile配置中添加一个依赖。

dependencies {
        compile files('libs/foo.jar')
    }

    android {
        ...
    }


注意:这个dependencies DSL标签是标准Gradle API中的一部分,所以它不属于android标签。


这个compile配置将被用于编译main application。它里面的所有东西都被会被添加到编译的classpath中,同时也会被打包进最终的APK。

以下是添加依赖时可能用到的其它一些配置选项:

    * compile:main application(主module)。

    * androidTestCompile:test application(测试module)。

    * debugCompile:debug Build Type(debug类型的编译)。

    * releaseCompile:release Build Type(发布类型的编译)。

因为没有可能去构建一个没有关联任何Build Type(构建类型)的APK,APK默认配置了两个或两个以上的编译配置:compile和<buildtype>Compile.

创建一个新的Build Type将会自动创建一个基于它名字的新配置。


这对于debug版本需要使用一个自定义库(为了反馈实例化的崩溃信息等)但发布版本不需要,或者它们依赖于同一个库的不同版本时会非常有用。


4.2.2 Remote artifacts(远程文件)


Gradle支持从Maven或者Ivy仓库中拉取文件。


首先必须将仓库添加到列表中,然后必须在依赖中声明Maven或者Ivy声明的文件。

repositories {
        mavenCentral()
    }


    dependencies {
        compile 'com.google.guava:guava:11.0.2'
    }

    android {
        ...
    }

注意:mavenCentral()是指定仓库URL的简单方法。Gradle支持远程和本地仓库。

注意:Gradle会遵循依赖关系的传递性。这意味着如果一个依赖本身依赖于其它东西,这些东西也会一并被拉取回来。


更多关于设置依赖关系的信息,请参考Gradle用户指南和DSL文档。


4.2 Multi project setup(多项目设置)


Gradle项目也可以通过使用多项目配置依赖于其它Gradle项目。


多项目配置的实现通常是在一个根项目路径下将所有项目作为子文件夹包含进去。



例如,给定以下项目结构:

MyProject/
     + app/
     + libraries/
        + lib1/
        + lib2/


我们可以定义3个项目。Grand将会按照以下名字映射它们:

    :app

    :libraries:lib1

    :libraries:lib2


每一个项目都拥有自己的build.gradle文件来声明自己如何构建。

另外,在根目录下还有一个setting.gradle文件用于声明所有项目。

这些文件的结构如下:

MyProject/
     | settings.gradle
     + app/
        | build.gradle
     + libraries/
        + lib1/
           | build.gradle
        + lib2/
           | build.gradle

其中setting.gradle的内容非常简单:

include ':app', ':libraries:lib1', ':libraries:lib2'

这里定义了哪一个文件夹才是真正的Gradle项目。


其中:app项目可能依赖于这些库,这是通过以下依赖配置声明的:

dependencies {
        compile project(':libraries:lib1')
    }


更多关于多项目配置的信息请参考这里。


4.3 Library projects(库项目)


在上面的多项目配置中,:libraries:lib1和:libraries:lib2可能是一个Java项目,并且:app这个Android项目将会使用它们的jar包输出。


但是,如果你想要共享代码来访问Android API或者使用Android样式的资源,那么这些库就不能是通常的Java项目,而应该是Android库项目。


4.3.1 Creating a Library Project(创建一个库项目)


一个库项目与通常的Android项目非常类似,只是有一点小区别。


尽管构建库项目不同于构建应用程序,它们使用了不同的plugin。但是在内部这些plugin共享了大部分相同的代码,并且它们都由相同的com.android.tools.build.gradle.jar提供。

buildscript {

        repositories {

            mavenCentral()

        }


        dependencies {

            classpath 'com.android.tools.build:gradle:0.5.6'

        }

    }


    apply plugin: 'android-library'


    android {

        compileSdkVersion 15

    }

这里创建了一个使用API 15编译SourceSet的库项目,并且依赖关系的配置方法与应用程序项目的配置方法一样,同样也支持自定义配置。


4.3.2 Differences between a Project and a Library Project(普通项目和库项目之间的区别)


一个库项目的main输出是一个.aar包(它代表Android的归档文件)。它组合了编译代码(例如jar包或者是本地的.so文件)和资源(manifest,res,assets)。

一个库项目同样也可以独立于应用程序生成一个测试用的apk来测试。


标识Task同样适用于库项目(assembleDebug,assembleRelease),因此在命令行上与构建一个项目没有什么不同。


其余的部分,库项目与应用程序项目一样。它们都拥有build type和product flavor,也可以生成多个aar版本。

记住大部分Build Type的配置不适用于库项目。但是你可以根据库项目是否被其它项目使用或者是否用来测试来使用自定义的sourceSet改变库项目的内容。


4.3.3 Referencing a Library(引用一个库项目)


引用一个库项目的方法与引用其它项目的方法一样:

dependencies {

        compile project(':libraries:lib1')

        compile project(':libraries:lib2')

    }


注意:如果你要引用多个库,那么排序将非常重要。这类似于旧构建系统里面的project.properties文件中的依赖排序。


4.3.4 Library Publication(库项目发布)


一般情况下一个库只会发布它的release Variant(变种)版本。这个版本将会被所有引用它的项目使用,而不管它们本身自己构建了什么版本。这是由于Gradle的限制,我们正在努力消除这个问题,所以这只是临时的限制。


你可以控制哪一个Variant版本作为发行版:

android {

        defaultPublishConfig "debug"

    }

注意这里的发布配置名称引用的是完整的Variant版本名称.Relesae,debug只适用于项目中没有其它特性版本的时候使用。如果你想要使用其它Variant版本取代默认的发布版本,你可以:

android {

        defaultPublishConfig "flavor1Debug"

    }


将库项目的所有Variant版本都发布也是可能的。我们计划在一般的项目依赖项目(类似于上述所说的)情况下允许这种做法,但是由于Gradle的限制(我们也在努力修复这个问题)现在还不太可能。

默认情况下没有启用发布所有Variant版本。可以通过以下启用:

android {

        publishNonDefault true

    }


理解发布多个Variant版本意味着发布多个arr文件而不是一个arr文件包含所有Variant版本是非常重要的。每一个arr包都包含一个单一的Variant版本。

发布一个变种版本意味着构建一个可用的arr文件作为Gradle项目的输出文件。无论是发布到一个maven仓库,还是其它项目需要创建一个这个库项目的依赖都可以使用到这个文件。


Gradle有一个默认文件的概念。当添加以下配置后就会被使用到:

compile project(':libraries:lib2')


创建一个其它发布文件的依赖,你需要指定具体使用哪一个:

dependencies {

        flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')

        flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')

    }


重要:注意已发布的配置是一个完整的Variant版本,其中包括了build type,并且需要像以上一样被引用。

重要:当启用非默认发布,maven发布插件将会发布其它Variant版本作为扩展包(按分类器分类)。这意味着不能真正的兼容发布到maven仓库。你应该另外发布一个单一的Variant版本到仓库中,或者允许发布所有配置以支持跨项目依赖。

ComfyUI面部修复FaceDetailer保姆级教程:从模型选择到参数调优全解析 本文提供ComfyUI面部修复FaceDetailer的保姆级教程,深度解析从模型选择到参数调优的全过程。针对常见的五官模糊、肤色不均等问题,详细对比了BBox与Segm检测器的优劣,并给出SD1.5与SDXL模型的核心参数联动策略与实战方案,帮助用户精准掌控AI绘画中的面部修复效果。 阅读详情

相关推荐

华为服务器RAID配置避坑指南:如何通过iBMC快速识别阵列卡型号并完成初始化

本文详细解析华为服务器RAID配置全流程,重点介绍通过iBMC快速识别阵列卡型号、硬盘健康诊断及RAID级别选择的场景化策略。提供从iBMC登录到缓存策略调优的实战技巧,帮助工程师避免常见配置陷阱,提升服务器存储系统性能和稳定性。

weixin_28475533的博客 492

Android安卓中多个Dependencies依赖引用了相同的“包”Multiple dex files define错误解决方案

Multiple dex files define (重复引用) 原因:在自己的项目中引用了某个“包”,而被你作为library的项目也引用了同一个“包”,引起编译错误。“包”是指类库里面出现了相同类名,不仅局限于jar包。android进行dex时会对字节码文件进行优化合并, 如果两个class完全一致, 合并以后就是一个。 但是如果两个类的类名一致但内部确有细微差别, 那么就不能合并。 背景:...

快乐李同学的博客 2094

基于Unidbg的小红书加密协议动态分析与算法还原实战

在移动应用安全领域,加密协议与签名机制是保障数据传输安全、实现客户端身份验证的核心技术。其原理通常涉及哈希算法、对称/非对称加密以及自定义的混淆逻辑,旨在防止请求被篡改或重放。理解这些协议对于安全研究、风控策略制定及合规的数据交互分析具有重要价值。在实际的工程实践中,面对高度混淆和加固的Native代码(SO库),传统的静态分析往往难以深入。此时,沙盒模拟执行技术提供了一种动态、可控的分析方案。通过搭建一个虚拟的移动应用运行环境,研究人员可以在无需真机、规避反调试机制的情况下,完整地追踪和观察加密算法的执行

weixin_29315091的博客 327

android 程序分包,彻底掌握Android多分包技术(二)

原标题:彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(二)在上一篇博客中,我给大家详细介绍了ant实现Android多分包技术,具体可以点击查看:彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(一);接下来的这篇博客我将带领大家一起学习使用Gradle构建Android项目多分包。增加多分包配置说到Gradle,就不得不提到使用...

weixin_39575054的博客 539

基于STM32的便携式心率血氧监测系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了便携式心率血氧监测系统的全功能开发,覆盖MAX30102光电传感器驱动、PPG信号处理、心率血氧解算算法、人机交互、数据存储、报警保护、低功耗管理等核心功能,全程采用无跳步保姆式教学,从硬件选型、接线、CubeMX配置、代码开发、调试优化全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 768

2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--下篇

我们可以看到,目前配置基本完成了,现在有两个错,一个是Chrome没安装,这个自己安装就可以了,如果不需要WEB测试也不影响开发,另一个是Simulator还没安装,这个主要是安装的时间太长了,也就是上面的这一步。这里要注意,这个下载安装会比较慢,有的载会特别卡造成安装失败,最好的办法是挂一个VPN,保证安装完成,不过这个可以在以后单独进行安装。至此,基本的安装完毕,好多人会以为Xcode就OK了,其实还没有,我们还缺少命令行工具包,这个在安装完Flutter以后进行设置。

weixin_48803304的博客 1412

Gradle Plugin 和 Dependencies 管理详解

在Gradle中,插件和依赖管理是开发过程中不可或缺的一部分。通过合理利用不同的依赖管理方式,如ext和,可以显著提高项目的可维护性和一致性。特别是Version Catalogs,它通过统一的配置管理,使得大型项目的依赖管理更加简洁、可靠。在实际项目中,选择适合自己团队和项目的方式尤为重要。

weixin_37600397的博客 4857

Android 13.0仿ios的hotseat效果修改hotseat样式

在13.0系统产品rom定制化开发中,在项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了

安卓兼职framework和app工程师的博客 1144

解决Gradle Sync报错 Plugin [id: ‘com.android.application‘, version: ‘8.5.1‘] was not found

其实dependencies、repositories这些配置是不是在 build.gradle 和 settings.gradle配置的效果是一样的呢?Android Studio 新建项目时默认.gradle 文件的版本差异。提供本地系统变量 GRADLE_HOME 和GRADLE_USER_HOME 配置方法。

。 1万+

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 642

YOLOv8交通监控全方案:精准车辆计数+违章(闯红灯/压线)识别,拿来就落地!

作为深耕计算机视觉落地的开发者,我见过太多交通监控的“伪智能”——传统系统要么车辆计数不准(漏计/重复计数),要么违章识别滞后(靠人工回看录像),甚至连“闯红灯、压线”这类常见违章都无法实时判定,完全满足不了实际交通管理需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 646

Android Gradle和Gradle插件区别

引言 什么是Gradle?什么是Gradle插件? build.gradle中依赖的classpath 'com.android.tools.build:gradle:2.1.2'和gradle-wrapper.properties中的distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip有什

jinrall的专栏 1万+

Imagenet数据集1000类别中英文

英文 {0: 'tench, Tinca tinca', 1: 'goldfish, Carassius auratus', 2: 'great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias', 3: 'tiger shark, Galeocerdo cuvieri', 4: 'hammerhead, hammerhead shark', 5: 'electric ray, cram.

识物专栏 1800

Gradle和Android Gradle Plugin

目录一、下表列出每个版本的Gradle plugin所需的Gradle版本:二、什么是GradleGradle集成方式Gradle作用三、什么是Gradle pluginAndroid Gradle Plugin DSLGradle plugin集成方式 一、下表列出每个版本的Gradle plugin所需的Gradle版本: 为了能有更好的体验,我们应该尽可能使用最新版的gradle和gradle plugin。 更新Gradle点这里 Plugin version Required Gradle

开发笔记 3383

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android Gradle - Gradle、Gradle plugin 基础认知

起由 :因为开发中build项目失败,提示了Gradle相关问题;所以在好奇心的驱使之下,抽时间好好梳理了一下Gradle方面的知识 - -~

Android、前端、小程序、后端 5864

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android Gradle Plugin版本和Gradle版本对应关系

对应关系 Android Studio 的Gradle Plugin版本和Gradle间有个对应关系,如下图所示,若版本不对,可能会报各种异常 以下是目前官网上的对应关系表,若后续有新的版本,可以查阅Android Gradle plugin release notes Plugin version Required Gradle version 1.0.0 - 1.1.3 ...

野猿新一 3587

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android-gradle plugin

agp   大家常说的agp其实就是Android-Gradle-Plugin的缩写,在项目中的配置就是在根目录下的build.gradle文件中的dependencies中配置的classpath “com.android.tools.build:gradle:xxx”,在根目录build.gradle的dependencies中配置好agp后就能在任意module的build.gradle文件中apply Android提供的各种plugin,常见的就有com.android.application和c

Benson的博客 3327

Android Gradle Plugin指南(三)----依赖关系,Android库和多项目设置

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup 4、Dependencies,Android Libraries and Multi-project setup(依赖关系,Andr

OyangYujun的专栏 1844

android 项目build.gradle,Android build.gradle 配置详解

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Gradle 简介Android Studio 是采用 Gradle 来构建项目的。Gradle 是一个非常先进的项目构建工具,若想用 Gradle 构建 Android 项目,需要创建一个脚本,此脚本被称为 build.gradle。Gradle 构建脚本并非基于传统的 XML 文件(如Ant和Maven),而是 Gr...

weixin_36269724的博客 6160

Lint Cleaner Plugin完全指南:从安装到高级配置,提升Android项目性能

Lint Cleaner Plugin是一款专为Android项目设计的Gradle插件,能够自动移除Android Lint报告中标记的未使用资源,包括字符串、颜色和尺寸等,有效精简项目体积并提升构建效率。 ## 📌 什么是Lint Cleaner Plugin? Lint Cleaner Plugin通过分析Android Lint生成的报告,智能识别并删除项目中未被引用的资源文件。这一

gitblog_00035的博客 1004

Android Gradle Plugin源码分析

gradle

QG 1113

expo-gradle-plugin 完全指南:Expo 模块自动链接的 Android 构建管线

`expo-gradle-plugin` 是 Expo 模块自动链接(autolinking)体系在 Android 侧的构建基础设施。它以三个 Gradle 插件加一个共享代码库的形式,把 Expo 模块从 `node_modules` 无缝接入 Android 工程:`expo-autolinking-settings-plugin` 负责在 `settings.gradle` 阶段解析模块清

gitblog_00333的博客 896

android gradle配置_【Android 修炼手册】Android Gradle Plugin 插件主要流程

预备知识理解 gradle 的基本开发了解 gradle task 和 plugin 使用及开发了解 android gradle plugin 的使用看完本文可以达到什么程度了解 android gradle plugin 的构建流程了解 android gradle plugin 的主要 task 的实现学会 hook android 构建流程,添加自己想要的功能阅读前准备工作1.项目添加 a...

weixin_31931045的博客 667
上一篇: Android Gradle Plugin指南(二)——基本项目
下一篇: Android Gradle Plugin指南(四)——测试
spring5555
博客等级 码龄12年 7粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值