Gradle详情以及代码讲解
来源:互联网 发布:婚礼vcr制作软件 编辑:程序博客网 时间:2024/05/22 00:07
安卓开发的都会知道Gradle是什么?但是只是知道它是做什么的。对于初学者更不会去管内部代码的意思。
想当初,自己也是那样,不知道Gradle里面的代码意义何在,在网上看大神的博客,也只能吸收三分之一,做过几个项目之后,不得不对Gradle进行解读了;
1.什么是Gradle?
Gradle是一种依赖管理工具,基于Groovy语言,面向java应用为主,它抛弃了基于xml的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言,as中新建项目成功后自动下载Gradle
2.编译过程分为三个阶段:
(1)初始化阶段:创建新的project对象,如果有多个build.gradle也会创建多个project
(2) 配置阶段:在这个阶段,会执行所有的编译脚本,同时还会创建project的所有的task,为最后一个阶段做准备
(3)执行阶段:在这个阶段,gradle会根据传入的参数决定如何执行这些task,真正action的执行代码就在这里;
下面根据我之前开发的一个项目中的Gradle文件进行讲解:(这个文件我有删除的地方,不能透漏给大家,不过知识点还是很全面的)
红色字体是代码,黑色字体是对代码的讲解(如果有不对的地方还是希望大神们多多提点)
代码如下:
//Library工程必须加载此插件。注意,加载了Android插件就不要加载Java插件了。因为Android
//插件本身就是拓展了Java插件
apply plugin: 'com.android.application'
android {
/*
*compileSdkVersion告诉gradle使用哪个版本Android SDK编译你的应用,
* 使用任何新添加的API就要使用对应level的Android SDK.
* 他们三者的关系
minSdkVersion <= targetSdkVersion <= compileSdkVersion
理想情况下应该是
minSdkVersion (lowest possible) <=targetSdkVersion == compileSdkVersion (latest SDK)
理想情况下:用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。
* */
compileSdkVersion 24 //是你sdk版本号,也就是你API的leavel 例如:API-19、API-20、API-21等等。
buildToolsVersion "24.0.1"//是你构建工具的版本 其中包括你的打包工具aapt,dx等
//默认配置
defaultConfig {
applicationId "你的包名"
/*
*minSdkVersion限制安装application所需要的系统最低版本,
* 低于该版本的系统都不可以安装该application。
* 同时不能使用该level版本SDK所不具备的API
* */
minSdkVersion 14
/*
*targetSdkVersion是Android提供向前兼容的主要依据
* ,表明该application已经兼容从minSdkVersion至tartgetSdkVersion之间所有api的变化。
* 在targetSdkVersion更新之前系统不会应用最新的行为变化。
* */
targetSdkVersion 23
versionCode 3
versionName "1.0.6"
renderscriptSupportModeEnabled true //系统自带图片的模糊效果
/*
* Android基于JAVA语言,JAVA语言在编译之后都会生成字节码文件.class,
* 在Android中,这些文件都被存储在一个.dex文件中。由于DEX文件的格式限制,
* 其中的Method、Field、Class的个数都不能超过short类型的最大值65535,
* 如果超过了这个值,就会报错误。
为了解决这个问题,Google - Android在API 21的时候为广大程序员提供了一个通用的解决方案,
就是今天要说的MultiDex方案。这个方案让Android系统可以在原始的DEX文件存满之后自动生成一个新的DEX文件,
从而解决这个DEX溢满的问题。
* */
multiDexEnabled = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
/*设置想兼容所有cpu的abi*/
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a','x86','x86_64'
}
/*
*manifestPlaceholders 可以替换androidmanifest文件中的标签,
* 可作为快速渠道打包替换渠道名的一种方式,
* 也可以自定义标签用来替换需要的文本,多作为不同环境不同key的修改。
* */
manifestPlaceholders = [
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "您的JPUSH_APPKEY ",
JPUSH_CHANNEL: "developer-default",
]
}
//签名信息配置
signingConfigs {
config {
keyAlias 'bluemodemo.keystore'
keyPassword 'bluemodemo'
storeFile file('D:签名文件目录')
storePassword 'bluemodemo'
}
}
//打包apk重命名
buildTypes {
release {//发布版本的签名设置
minifyEnabled false //是否启用Proguard 就是对代码进行混淆和压缩
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug { //调试版本的签名设置
signingConfig signingConfigs.config
}
}
}
//buildscript中的声明是gradle脚本自身需要使用的资源。
// 可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
// 而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。
buildscript {//这个属于在buildscript中的声明
repositories {
mavenCentral()
}
//利用Gradle配置ndk环境
dependencies {
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.0'
}
}
//依赖配置
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')//libs下的所有jar包引入
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
//
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:24.2.1'
compile project(':lib_litepal')//项目的引入
}
阅读全文
3 0
- Gradle详情以及代码讲解
- Android中Gradle使用详情
- bloom filter详细讲解以及代码分析
- bloom filter详细讲解以及代码分析
- leetcode:ExpressionAddOperators282 细致讲解 以及代码实现
- Gradle使用讲解
- android gradle 讲解
- android 通过lint以及android-resource-remover清楚不用的资源以及代码 支持gradle以及非gradle工程
- log4j详情 以及正确配置
- 支付宝支付接入详情讲解
- Spring讲解------------本专栏代码包以及word版
- 【JAVA实例】代码生成器的原理讲解以及实际使用
- 一些关于logging部分的代码笔记以及讲解
- [微信小程序]单选框以及多选框实例代码附讲解
- gradle基础讲解系列1
- xargs命令作用以及参数详情
- Android Studio下使用gradle 导出jar包,并打包assets目录,以及混淆代码
- android gradle + junit +jacoco +sonarscaner(sonarrunner) 获取单元测试覆盖率以及代码质量
- java实现动态规划求解矩阵连乘问题
- 如何在一台电脑上同时启动两台或者更多的tomcat
- CSS进阶2
- 设计模式学习(一)之策略模式
- localStorage 还能这么用
- Gradle详情以及代码讲解
- SQL语句
- uboot版本文件结构的更新改变
- c语言:字符串的连接,复制,长度
- c++中 gets(s)、scanf(%s) 、getline(s)、cin >> s 比较
- 自动化安装虚拟机
- C语言位操作中指定的某一位数置0、置1、取反
- HDU
- 深入浅出JMS(一)--JMS基本概念