Android中的adle文件深入讲解

更新时间:2023-06-14 09:59:39 阅读: 评论:0

Android中的adle⽂件深⼊讲解
⼀、什么是Gradle
gradle是⼀个项⽬构建⼯具,java开发中有两个⼤名⿍⿍的项⽬构建Maven,Ant,其中maven简单易控深受开发者喜爱。
动漫情侣头像一左一右项⽬构建⼯具是什么?能⼲吗?
开发某些项⽬时,需要很多jar或者库的⽀持,还没开始开发就下载了n多个库,浪费了时间不说,这些库之间兼容性⼜⽆法保证。删了?⽩下载了。不删?⼜不兼容。此时就需要使⽤项⽬构建⼯具,简单的说就是⼀个可以根据简单的配置⽂件⾃动去下载相应包/库的软件。⾃动的还很简单,不⽤岂不亏了。多个项⽬构建⼯具各有特点,但是核⼼思想⼀样。
简单的说,Gradle是⼀个构建⼯具,它是⽤来帮助我们构建app的,构建包括编译、打包等过程。我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”⾃动为我们构建app。Android Studio中默认就使⽤Gradle来完成应⽤的构建。有些同学可能会有疑问:”我⽤AS不记得给Gradle指定过什么构建规则呀,最后不还是能搞出来个apk。“ 实际上,app的构建过程是⼤同⼩异的,有⼀些过程是”通⽤“的,也就是每个app的构建都要经历⼀些公共步骤。因此,在我们在创建⼯程时,Android Studio ⾃动帮我们⽣成了⼀些通⽤构建规则,很多时候我们甚⾄完全不⽤修改这些规则就能完成我们app的构建。
有些时候,我们会有⼀些个性化的构建需求,⽐如我们引⼊了第三⽅库,或者我们想要在通⽤构建过程中做⼀些其他的事情,这时我们就要⾃⼰在系统默认构建规则上做⼀些修改。这时候我们就要⾃⼰向Gradle”下命令“了,这时候我们就需要⽤Gradle 能听懂的话了,也就是Groovy。Groovy是⼀种基于JVM的动态语⾔,关于它的具体介绍,感兴趣的同学可以⽂末参考”延伸阅读“部分给出的链接。
我们在开头处提到“Gradle是⼀种构建⼯具”。实际上,当我们想要更灵活的构建过程时,Gradle就成为了⼀个编程框架——我们可以通过编程让构建过程按我们的意愿进⾏。也就是说,当我们把Gradle作为构建⼯具使⽤时,我们只需要掌握它的配置脚本的基本写法就OK了;⽽当我们需要对构建流程进⾏⾼度定制时,就务必要掌握Groovy等相关知识了。限于篇幅,本⽂只从构建⼯具使⽤者的⾓度来介绍Gradle的⼀些最佳实践,在⽂末“延伸阅读”部分给出了⼏篇⾼质量的深⼊介绍Gradle的⽂章,其中包含了Groovy等知识的介绍。
⼆、Gradle的基本组分
1.Project和Task
在Gradle中,每⼀个待构建的⼯程是⼀个Project,构建⼀个Project需要执⾏⼀系列Task,⽐如编译、打包这些构建过程的⼦过程都对应着⼀个Task。具体来说,⼀个apk⽂件的构建包含以下Task:Java源码编译、资源⽂件编译、Lint检查、打包以⽣成最终的apk⽂件等等。
2.插件
插件的核⼼⼯作有两个:⼀是定义Task;⽽是执⾏Task。也就是说,我们想让Gradle能正常⼯作,完成整个构建流程中的⼀系列Task的执⾏,必须导⼊合适的插件,这些插件中定义了构建Project中的⼀系列Task,并且负责执⾏相应的Task。
在新建⼯程的app模块的adle⽂件的第⼀⾏,往往都是如下这句:
apply plugin: 'com.android.application'
这句话的意思就是应⽤“com.android.application“这个插件来构建app模块,app模块就是Gradle中的⼀个Project。也就是说,这个插件负责定义并执⾏Java源码编译、资源⽂件编译、打包等⼀系列Task。实际上"com.android.application"整个插件中定义了如下4个顶级任务:
平菇怎么炒好吃又简单asmble: 构建项⽬的输出(apk)
check: 进⾏校验⼯作
build: 执⾏asmble任务与check任务
clean: 清除项⽬的输出
当我们执⾏⼀个任务时,会⾃动执⾏它所依赖的任务。⽐如,执⾏asmble任务会执⾏asmbleDebug任务和asmbleRelea任务,这是因为⼀个Android项⽬⾄少要有debug和relea这两个版本的输出。
3.Gradle配置⽂件
我们在Android Studio中新建⼀个⼯程,可以得到如下的⼯程结构图:
上⾯我们说过,Android Studio中的⼀个Module即为Gradle中的⼀个Project。上图的app⽬录下,存在⼀个adle⽂件,代表了app Module的构建脚本,它定义了应⽤于本模块的构建规则。我们可以看到,⼯程根⽬录下也存在⼀个adle⽂件,它代表了整个⼯程的构建,其中定义了适⽤于这个⼯程中所有模块的构建规则。
接下来我们介绍⼀下上图中其他⼏个Gradle配置⽂件:
gradle.properties: 从它的名字可以看出,这个⽂件中定义了⼀系列“属性”。实际上,这个⽂件中定义了⼀系列供adle使⽤的常量,⽐如keystore的存储路径、keyalias等等。
gradlew与gradlew.bat: gradlew为Linux下的shell脚本,gradlew.bat是Windows下的批处理⽂件。gradlew是gradle wrapper的缩写,也就是说它对gradle的命令进⾏了包装,⽐如我们进⼊到指定Modu
le⽬录并执⾏“gradlew.bat asmble”即可完成对当前Module的构建(Windows系统下)。
local.properties: 从名字就可以看出来,这个⽂件中定义了⼀些本地属性,⽐如SDK的路径。
4.构建脚本
⾸先我们来看⼀下⼯程⽬录下的adle,它指定了真个整个项⽬的构建规则,它的内容如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()//构建脚本中所依赖的库都在jcenter仓库下载
}
dependencies {
classpath 'ls.build:gradle:3.2.1'//指定了gradle插件的版本
// NOTE: Do not place your application dependencies here; they belong
// in the individual adle files
}
}
allprojects {
repositories {
google()
jcenter()//当前项⽬所有模块所依赖的库都在jcenter仓库下载
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
我们再来简单介绍下app模块的adle的内容:
apply plugin: 'com.android.application'//加载⽤于构建Android项⽬的插件
android {//构建Android项⽬使⽤的配置
compileSdkVersion 28 //指定编译项⽬时使⽤的SDK版本
defaultConfig {
applicationId "application"//包名
minSdkVersion 15//指定⽀持的最⼩SDK版本
targetSdkVersion 28//针对的⽬标SDK版本
versionCode 1
versionName "1.0"
testInstrumentationRunner "st.runner.AndroidJUnitRunner"
}
buildTypes {//针对不同的构建版本进⾏⼀些设置
relea {//对relea版本进⾏的设置
minifyEnabled fal//是否开启混淆
proguardFiles getDefaultProguardFile(''), 'proguard-rules.pro'//指定混淆⽂件的位置
}
}
}
dependencies {//指定当前模块的依赖
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.straint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.st:runner:1.0.2'
androidTestImplementation 'com.st.espresso:espresso-core:3.0.2'
}全国211大学排名名单
三、常见配置
整个⼯程的adle通常不需我们改动,这⾥我们介绍下⼀些对模块⽬录下adle⽂件的常见配置。
1.依赖第三⽅库
当我们的项⽬中⽤到了了⼀些第三⽅库时,我们就需要进⾏⼀些配置,以保证能正确导⼊相关依赖。设置⽅法很简单,⽐如我们在app模块中中⽤到了Fresco,只需要在adle⽂件中的dependencies块添加如下语句:
dependencies {
...
compile 'com.facebook.fresco:fresco:0.11.0'
}
这样⼀来,Gradle会⾃动从jcenter仓库下载我们所需的第三⽅库并导⼊到项⽬中。
2.导⼊本地jar包
值得我们学习
在使⽤第三⽅库时,除了像上⾯那样从jcenter仓库下载,我们还可以导⼊本地的jar包。配置⽅法也很简单,只需要先把jar⽂件添加到app\libs⽬录下,然后在相应jar⽂件上单击右键,选择“Ad As Library”。然后在adle的dependencies块下添加如下语句:
印堂发黑
compile files('libs/xxx.jar')
实际上我们可以看到,系统为我们创建的adle中就已经包含了如下语句:
compile fileTree(dir: 'libs', include: ['*.jar'])
这句话的意思是,将libs⽬录下的所有jar包都导⼊。所以实际上我们只需要把jar包添加到libs⽬录下并“Ad As Library"即可。
3.依赖其它模块
假设我们的项⽬包含了多个模块,并且app模块依赖other模块,那么我们只需adle的denpendencies块下添加如下语句:
compile project(':other')
4.构建输出为aar⽂件
通常我们构建的输出⽬标都是apk⽂件,但如果我们的当前项⽬时Android Library,我们的⽬标输出就是aar⽂件。要想达到这个⽬的也很容易,只需要把adle的第⼀句改为如下:
apply plugin:'com.android.library'
这话表⽰我们使⽤的插件不再是构建Android应⽤的插件,⽽是构建Android Library的插件,这个插件定义并执⾏⽤于构建Android Library的⼀系列Task。
5.⾃动移除不再使⽤的资源
只需进⾏如下配置:
android {
...
}
buildTypes {
relea {
...
shrinkResources true
...
}
}
}
6.忽略Lint错误
在我们构建Android项⽬的过程中,有时候会由于Lint错误⽽终⽌。当这些错误来⾃第三⽅库中时,我们往往想要忽略这些错误从⽽继续构建进程。这时候,我们可以只需进⾏如下配置:
七夕节的风俗习惯android {
...
劳动心得体会}
buildTypes {
relea {
...
shrinkResources true
...
}
}
}
7.集成签名配置
在构建relea版本的Android项⽬时,每次都⼿动导⼊签名⽂件,键⼊密码、keyalias等信息⼗分⿇烦。通过将签名配置集成到构建脚本中,我们就不必每次构建发⾏版本时都⼿动设置了。具体配置如下:
signingConfigs {
myConfig { //将"xx"替换为⾃⼰的签名⽂件信息
storeFile file("xx.jks")
storePassword "xx"
keyAlias "xx"
keyPassword "xx"
}
}
android {
buildTypes {
relea {
胡麻油
Config //在relea块中加⼊这⾏
...
}
}
...
}
真实开发中,我们不应该把密码等信息直接写到adle中,更好的做法是放在gradle.properties中设置:
RELEASE_STOREFILE=xxx.jks
RELEASE_STORE_PASSWORD = xxx
RELEASE_KEY_ALIAS=xxx
RELEASE_KEY_PASSWORD=xxx
然后在adle中直接引⽤即可:
signingConfigs {
myConfig {
storeFilefile(RELEASE_STOREFILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

本文发布于:2023-06-14 09:59:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/951674.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:构建   模块   规则   配置   过程   下载
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图