热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

AndroidStudio中的Gradle依赖深入讲解

AndroidStudio由于使用了gradle的进行项目构建,使我们开发app方便很多,下面这篇文章主要给大家介绍了关于AndroidStudio中Gradle依赖的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

Android studio依赖项目是使用gradle管理的,依赖一个项目、一个jar包、一个工程,都可以在这里进行配置,本文将给大家详细介绍关于Android Studio中Gradle依赖的相关内容,下面话不多说了,来一起看看详细的介绍吧

一、不同类型的library引入方案:

1、本地Module library依赖:

通过这种方式依赖的弊端是每次都需要构建module,当module比较多时构建非常耗时,建议控制module的依赖数量,避免构建耗时

//module需要在项目根目录下的settings.gradle中通过include引入
implementation project(':librarydict')

2、本地二进制library依赖:jar和aar:

本地的jar和aar需要放在module的libs文件夹下,通过这种方式依赖的弊端是不知道jar和aar的版本号,如果要按照这种方式依赖,建议将jar/aar的名字加上版本信息,方便确认版本

依赖jar:

// 可以一条依赖引入libs下所有的jar
implementation fileTree(dir: 'libs', include: ['*.jar'])

// 也可以指定依赖某一个或几个jar
implementation files('libs/dict-v120.jar', 'libs/download-v151.jar')

依赖aar:

// 在module的build.gradle中增加如下语句: 
repositories {
 flatDir {
  dirs 'libs'
 }
}

// 可以一条依赖引入libs下所有的aar
implementation fileTree(dir: 'libs', include: ['*.aar'])

// 也可以指定依赖某一个aar
implementation (name: 'library-download', ext: 'aar')

3、远程二进制library依赖:

为了安全起见,建议搭建公司内部的私有maven仓库,统一管理依赖的library,公司内部的公共library不要使用公共的maven仓库。通过这种方式依赖相比于前两种方案都要更优,且配置灵活,可以根据实际需求调整

// 依赖明确的版本,标明group、name和version
implementation group: 'com.android.demo', name: 'library-dict', version: '1.2.0'

// 通常按照如下方式简写即可
implementation 'com.android.demo:library-dict:1.2.0'

// 也可以不指定版本,将version改为"+",当远程仓库有更新的版本后,构建时会拉取最新的版本。
// 好处是可以始终依赖最新的library;弊端是有可能library的改动导致编译不过或者功能变更不
// 稳定,因为每次都需要检查是否有最新版本,所以构建效率会低一些
implementation 'com.android.demo:library-dict:+'
// 对于有多个APP,依赖内部统一SDK的情况时,可以将gradle文件放在服务器,远程控制统一依
// 赖版本,避免因为各个APP依赖的SDK版本不统一导致很难管理和维护
// 远程http://172.28.2.93/remote/library-config.gradle:
ext.libraryBuildCOnfig= [
 deps: [
  "dict-library"     : 'com.android.demo:library-dict:1.2.0',
  "download-library"    : 'com.android.demo:library-download:1.5.1',
 ]
]

// 项目根目录下的build.gradle全局引入:
apply "http://172.28.2.93/remote/library-config.gradle"

ext {
 dependencies = [
  "dict-library"  : libraryBuildConfig.deps.'dict-library',
  "download-library" : libraryBuildConfig.deps.'download-library',
 ]
}

// 在module的build.gradle中依赖:
implementation rootProject.ext.dependencies["dict-library"]
implementation rootProject.ext.dependencies["download-library"]

总结如下:

二、不同依赖配置方式的区别:compile、implementation、api

从Android Gradle plugin 3.0开始,对于依赖包的配置方式,引入了implementation和api,使用Android Studio新建项目时,原来用compile的地方全部默认被替换成了implementation 比如:

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 compile 'com.android.support:appcompat-v7:27.1.1'
 compile 'com.android.support.constraint:constraint-layout:1.1.3'
}

变成下面的样子:

dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implementation 'com.android.support:appcompat-v7:27.1.1'
  implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}

网上查资料时,依赖配置方式还有:provided、api、apk、compileOnly、runtimeOnly、渠道名+Compile,差异主要在于构建内容和参与构建的时机,多样的配置方式满足了开发者的花样需求,具体区别如下:

1、implementation:

依赖包中依赖的library只能在依赖包内部使用,主工程无法访问依赖包依赖的library中的类和方法。使用场景:SDK开发中对第三方library有依赖,希望控制SDK的大小、不想因为和宿主工程引用的同一个依赖包版本不同导致编译冲突时特别适合。

因为当依赖包依赖的library有改动时,只会重新编译library和依赖包,不需要重新编译宿主,所以构建速度会快一些。

对于各个渠道还可以单独依赖属于渠道特有的包,通过渠道名+implementation指定,比如debugImplementation、releaseImplementation、testImplementation。

2、api(原compile):

会将依赖包中依赖的其它library一同编译和打包到apk中,宿主工程可以使用依赖包中依赖的其它library的类和方法

对于各个渠道还可以单独依赖属于渠道特有的包,通过渠道名+api/compile指定,比如debugApi、releaseApi、testApi

3、compileOnly(provided):

主要是为了方便程序编译通过的,不会打包到apk中,使用场景:android系统有这个API,但编译时需要引入才能构建通过,比如系统的APK依赖framework.jar、gson库等

4、runtimeOnly(原apk):

只是打包到apk中,不参与编译,不能在代码中直接调用依赖包的代码,否则会在编译时出错。一般很少使用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
author-avatar
Aerotic
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有