史上最全的Android build.gradle配置教程

前言

Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的。当我们创建一个Android项目时会包含两个Android build.gradle配置详解文件,如下图:

一、Project的build.gradle文件:

对应的build.gradle代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {//这里是gradle脚本执行所需依赖,分别是对应的maven库和插件

 repositories {
 google()//从Android Studio3.0后新增了google()配置,可以引用google上的开源项目
 jcenter()//是一个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引用 jcenter上的开源项目
 }
 dependencies {
 classpath 'com.android.tools.build:gradle:3.0.0'////此处是android的插件gradle,gradle是一个强大的项目构建工具

 // NOTE: Do not place your application dependencies here; they belong
 // in the individual module build.gradle files
 }
}

allprojects {//这里是项目本身需要的依赖,比如项目所需的maven库
 repositories {
 google()
 jcenter()
 }
}

// 运行gradle clean时,执行此处定义的task任务。
// 该任务继承自Delete,删除根目录中的build目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
 delete rootProject.buildDir
}
  • buildscript{}闭包里是gradle脚本执行所需依赖,分别是对应的maven库和插件。
  • allprojects{}闭包里是项目本身需要的依赖,比如项目所需的maven库。
  • task clean(type: Delete){}是运行gradle clean时,执行此处定义的task任务,该任务继承自Delete,删除根目录中的build目录。其中buildscript包含repositories闭包和dependencies闭包。

repositories{}闭包:配置远程仓库

该闭包中声明了jcenter()和google()的配置,其中jcenter是一个代码托管仓库,上面托管了很多Android开源项目,在这里配置了jcenter后我们可以在项目中方便引用jcenter上的开源项目,从Android Studio3.0后新增了google()配置,可以引用google上的开源项目。

dependencies{}闭包:配置构建工具

该闭包使用classpath声明了一个Gradle插件,由于Gradle并不只是用来构建Android项目,因此此处引入相关插件来构建Android项目,其中'3.3.3'为该插件的版本号,可以根据最新的版本号来调整。

二、Module的build.gradle文件:

从文件内容可以看出,主要分为三大部分,如下图所示:

1、apply plugin:

// 声明是Android程序,
//com.android.application 表示这是一个应用程序模块
//com.android.library 标识这是一个库模块
//而这区别:前者可以直接运行,后着是依附别的应用程序运行
apply plugin: 'com.android.application'

文件中第一行使用apply plugin表示应用了一个插件,该插件一般有两种值可选:

  • 'com.android.application',表示该模块为应用程序模块,可以直接运行,打包得到的是.apk文件
  • 'com.android.library',表示该模块为库模块,只能作为代码库依附于别的应用程序模块来运行,打包得到的是.aar文件

2、android{}闭包:

这个闭包主要为了配置项目构建的各种属性:

2.1、添加signingConfigs{}闭包:

 signingConfigs {// 自动化打包配置
 release {// 线上环境
  keyAlias 'test'
  keyPassword '123456'
  storeFile file('test.keystore')
  storePassword '123456'
 }
 debug {// 开发环境
  keyAlias 'test'
  keyPassword '123456'
  storeFile file('test.keystore')
  storePassword '123456'
 }
 }

可以手动添加签名配置,也可以通过Project Structure 选中app,点击Singing添加,具体步骤如下图所示:


配置Singing.png

签名配置完成后可以方便带签名打包,在module的Build Variants中有两个Type,分别是debug和release,可以选择任意一个类型进行打包,并且他们会利用各自配置的Key进行打包,执行 Run app或者Build->Build apk就会自动在module name/app/build/outputs/apk路径下生成Apk文件。另一种打包方式是Build->Generate Signed APK填写签名信息生成Apk。

2.2、compileSdkVersion:设置编译时用的Android版本

2.3、buildToolsVersion:设置编译时使用的构建工具的版本,Android Studio3.0后去除此项配置

2.4、defaultConfig{}闭包:

 compileSdkVersion 27//设置编译时用的Android版本
 defaultConfig {
 applicationId "com.billy.myapplication"//项目的包名
 minSdkVersion 16//项目最低兼容的版本
 targetSdkVersion 27//项目的目标版本
 versionCode 1//版本号
 versionName "1.0"//版本名称
 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"//表明要使用AndroidJUnitRunner进行单元测试
 }
  • applicationId:指定了项目的包名。
  • minSdkVersion:指定项目最低兼容的版本,如果设备小于这个版本或者大于maxSdkVersion(一般不用)将无法安装这个应用,这里指定为16,表示最低兼容到Android 4.1系统。
  • targetSdkVersion:指定项目的目标版本,表示在该目标版本上已经做过充分测试,系统会为该应用启动一些对应该目标系统的最新功能特性,Android系统平台的行为变更,只有targetSdkVersion的属性值被设置为大于或等于该系统平台的API版本时,才会生效。例如,若指定targetSdkVersion值为22,则表示该程序最高只在Android5.1版本上做过充分测试,在Android6.0系统上(对应targetSdkVersion为23)拥有的新特性如系统运行时权限等功能就不会被启用。
  • versionCode:表示版本号,一般每次打包上线时该值只能增加,打包后看不见。
  • versionName:表示版本名称,展示在应用市场上。
  • testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"表明要使用AndroidJUnitRunner进行单元测试。

2.5、 buildTypes{}闭包:

这个闭包主要指定生成安装文件的主要配置,一般包含两个子闭包,一个是debug闭包,用于指定生成测试版安装文件的配置,可以忽略不写;另一个是release闭包,用于指定生成正式版安装文件的配置。两者能配置的参数相同,最大的区别默认属性配置不一样,两种模式支持的属性配置如下图:


buildTypes配置.png

 buildTypes {// 生产/测试环境配置
  release {// 生产环境
   buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
   buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前缀
   minifyEnabled false//是否对代码进行混淆
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件
   signingConfig signingConfigs.release//设置签名信息
   pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
   zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
   applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
   versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
  }
  debug {// 测试环境
   buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志
   buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前缀
   minifyEnabled false//是否对代码进行混淆
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件
   signingConfig signingConfigs.debug//设置签名信息
   debuggable false//是否支持断点调试
   jniDebuggable false//是否可以调试NDK代码
   renderscriptDebuggable false//是否开启渲染脚本就是一些c写的渲染方法
   zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
   pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
   applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
   versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
  }
 }

release{}闭包和debug{}闭包两者能配置的参数相同,最大的区别默认属性配置不一样:

  • minifyEnabled:表明是否对代码进行混淆,true表示对代码进行混淆,false表示对代码不进行混淆,默认的是false。
  • proguardFiles:指定混淆的规则文件,这里指定了proguard-android.txt文件和proguard-rules.pro文件两个文件,proguard-android.txt文件为默认的混淆文件,里面定义了一些通用的混淆规则。proguard-rules.pro文件位于当前项目的根目录下,可以在该文件中定义一些项目特有的混淆规则。
  • buildConfigField:用于解决Beta版本服务和Release版本服务地址不同或者一些Log打印需求控制的。例如:配置buildConfigField("boolean", "LOG_DEBUG", "true"),这个方法接收三个非空的参数,第一个:确定值的类型,第二个:指定key的名字,第三个:传值,调用的时候BuildConfig.LOG_DEBUG即可调用。
  • debuggable:表示是否支持断点调试,release默认为false,debug默认为true。
  • jniDebuggable:表示是否可以调试NDK代码,使用lldb进行c和c++代码调试,release默认为false
  • signingConfig:设置签名信息,通过signingConfigs.release或者signingConfigs.debug,配置相应的签名,但是添加此配置前必须先添加signingConfigs闭包,添加相应的签名信息。
  • renderscriptDebuggable:表示是否开启渲染脚本就是一些c写的渲染方法,默认为false。
  • renderscriptOptimLevel:表示渲染等级,默认是3。
  • pseudoLocalesEnabled:是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多。
  • applicationIdSuffix:和defaultConfig中配置是一的,这里是在applicationId 中添加了一个后缀,一般使用的不多。
  • versionNameSuffix:表示添加版本名称的后缀,一般使用的不多。
  • zipAlignEnabled:表示是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率,release和debug默认都为true。

2.6、sourceSets{}闭包:配置目录指向

 sourceSets {//目录指向配置
  main {
   jniLibs.srcDirs = ['libs']//指定lib库目录
  }
 }

配置 jniLibs.srcDirs = ['libs'],可以在Android studio的Android视图下生成jniLibs文件夹,可以方便我们存放jar包和库文件,其中Android视图下的jniLibs和project视图下的libs指向同一文件夹(app→libs),如下图所示:

2.7、packagingOptions{}闭包:打包时的相关配置

当项目中依赖的第三方库越来越多时,有可能会出现两个依赖库中存在同一个(名称)文件。如果这样,Gradle在打包时就会提示错误(警告)。那么就可以根据提示,然后使用以下方法将重复的文件剔除,比较常用的是通过exclude去除重复的文件,例如:

 packagingOptions{
  //pickFirsts做用是 当有重复文件时 打包会报错 这样配置会使用第一个匹配的文件打包进入apk
  // 表示当apk中有重复的META-INF目录下有重复的LICENSE文件时 只用第一个 这样打包就不会报错
  pickFirsts = ['META-INF/LICENSE']

  //merges何必 当出现重复文件时 合并重复的文件 然后打包入apk
  //这个是有默认值得 merges = [] 这样会把默默认值去掉 所以我们用下面这种方式 在默认值后添加
  merge 'META-INF/LICENSE'

  //这个是在同时使用butterknife、dagger2做的一个处理。同理,遇到类似的问题,只要根据gradle的提示,做类似处理即可。
  exclude 'META-INF/services/javax.annotation.processing.Processor'
 }

2.8、productFlavors{}闭包:多个渠道配置

这个配置是经常会使用到的,通常在适配多个渠道的时候,需要为特定的渠道做部分特殊的处理,比如设置不同的包名、应用名等。场景:当我们使用友盟统计时,通常需要设置一个渠道ID,那么我们就可以利用productFlavors来生成对应渠道信息的包,如:

android {
 productFlavors {
  wandoujia {
   //豌豆荚渠道包配置
   manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
   //manifestPlaceholders的使用在后续章节(AndroidManifest里的占位符)中介绍
  }
  xiaomi {
   manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
   applicationId "com.wiky.gradle.xiaomi" //配置包名

  }
  _360 {
   manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
  }
  //...
 }
}

当然也有更简洁的方式:

android {
 productFlavors {
  wandoujia {}
  xiaomi {}
  _360 {}
  //...
 } 

 productFlavors.all {
  //批量修改,类似一个循序遍历
  flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
 }
}

配置完之后,在命令行窗口中(Terminal)中输入gradlew assembleRelease(windows)即可开始打包,在Mac系统中对应指令应该是./gradlew assembleRelease。当然,如果想要debug版本的包,将指令中assembleRelease改为assembleDebug即可。最后生成的包还是在app/build/outputs/apk中,默认命名格式如app-wandoujia-release-unsigned.apk,在module的Build Variants中可以选择相应的渠道。

注:Android Studio3.0需在主app的build.gradle里面的

defaultConfig {
targetSdkVersion:***
minSdkVersion :***
versionCode:***
versionName :***
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
flavorDimensions "versionCode"
}

2.9、lintOptions{}闭包:代码扫描分析

Lint 是Android Studio 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例。

Lint 发现的每个问题都有描述信息和等级(和测试发现 bug 很相似),我们可以很方便地定位问题,同时按照严重程度进行解决。

 //程序在编译的时候会检查lint,有任何错误提示会停止build,我们可以关闭这个开关
 lintOptions {
  abortOnError false //即使报错也不会停止打包
  checkReleaseBuilds false //打包release版本的时候进行检测
 }

3、dependencies{}闭包:

该闭包定义了项目的依赖关系,一般项目都有三种依赖方式:本地依赖、库依赖和远程依赖。本地依赖可以对本地的jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖可以对jcener库上的开源项目添加依赖关系。从Android Studio3.0后compile引入库不在使用,而是通过api和implementation,api完全等同于以前的compile,用api引入的库整个项目都可以使用,用implementation引入的库只有对应的Module能使用,其他Module不能使用,由于之前的项目统一用compile依赖,导致的情况就是模块耦合性太高,不利于项目拆解,使用implementation之后虽然使用起来复杂了但是做到降低偶合兴提高安全性。

dependencies {//项目的依赖关系
 implementation fileTree(include: ['*.jar'], dir: 'libs')//本地jar包依赖
 implementation 'com.android.support:appcompat-v7:27.1.1'//远程依赖
 implementation 'com.android.support.constraint:constraint-layout:1.1.2'
 testImplementation 'junit:junit:4.12'//声明测试用例库
 androidTestImplementation 'com.android.support.test:runner:1.0.2'
 androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
  • implementation fileTree(include: ['*.jar'], dir: 'libs'):implementation fileTree是一个本地依赖声明,表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中。
  • implementation 'com.android.support:appcompat-v7:27.1.1':implementation语句为 远程依赖声明,'com.android.support:appcompat-v7:27.1.1'为一个标准的远程依赖库格式,其中com.android.support为域名部分,用于区分不同公司的库;appcompat-v7为组件名称,用于区分同一个公司的不同库;27.1.1为版本号,用于区分同一个库的不同版本。加上这句声明后,Gradle在构建项目时会先检查一下本地是否已经缓存过该库,若没有缓存则自动联网下载,下载后自动添加到项目的构建路径中去。
  • testImplementation和androidTestImplementation:表示声明测试用例库。

Module完整的build.gradle配置如下:

// 声明是Android程序,
//com.android.application 表示这是一个应用程序模块
//com.android.library 标识这是一个库模块
//而这区别:前者可以直接运行,后着是依附别的应用程序运行
apply plugin: 'com.android.application'

android {
 signingConfigs {// 自动化打包配置
  release {// 线上环境
   keyAlias 'test'
   keyPassword '123456'
   storeFile file('test.jks')
   storePassword '123456'
  }
  debug {// 开发环境
   keyAlias 'test'
   keyPassword '123456'
   storeFile file('test.jks')
   storePassword '123456'
  }
 }
 compileSdkVersion 27//设置编译时用的Android版本
 defaultConfig {
  applicationId "com.billy.myapplication"//项目的包名
  minSdkVersion 16//项目最低兼容的版本
  targetSdkVersion 27//项目的目标版本
  versionCode 1//版本号
  versionName "1.0"//版本名称
  flavorDimensions "versionCode"
  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"//表明要使用AndroidJUnitRunner进行单元测试
 }
 buildTypes {// 生产/测试环境配置
  release {// 生产环境
   buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
   buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前缀
   minifyEnabled false//是否对代码进行混淆
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件
   signingConfig signingConfigs.release//设置签名信息
   pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
   zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
   applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
   versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
  }
  debug {// 测试环境
   buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志
   buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前缀
   minifyEnabled false//是否对代码进行混淆
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的规则文件
   signingConfig signingConfigs.debug//设置签名信息
   debuggable false//是否支持断点调试
   jniDebuggable false//是否可以调试NDK代码
   renderscriptDebuggable false//是否开启渲染脚本就是一些c写的渲染方法
   zipAlignEnabled true//是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
   pseudoLocalesEnabled false//是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
   applicationIdSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
   versionNameSuffix 'test'//在applicationId 中添加了一个后缀,一般使用的不多
  }
 }

 sourceSets {//目录指向配置
  main {
   jniLibs.srcDirs = ['libs']//指定lib库目录
  }
 }

 packagingOptions{//打包时的相关配置
  //pickFirsts做用是 当有重复文件时 打包会报错 这样配置会使用第一个匹配的文件打包进入apk
  // 表示当apk中有重复的META-INF目录下有重复的LICENSE文件时 只用第一个 这样打包就不会报错
  pickFirsts = ['META-INF/LICENSE']

  //merges何必 当出现重复文件时 合并重复的文件 然后打包入apk
  //这个是有默认值得 merges = [] 这样会把默默认值去掉 所以我们用下面这种方式 在默认值后添加
  merge 'META-INF/LICENSE'

  //这个是在同时使用butterknife、dagger2做的一个处理。同理,遇到类似的问题,只要根据gradle的提示,做类似处理即可。
  exclude 'META-INF/services/javax.annotation.processing.Processor'
 }

 productFlavors {
  wandoujia {}
  xiaomi {}
  _360 {}
 }

 productFlavors.all {
   //批量修改,类似一个循序遍历
  flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name]
 }

 //程序在编译的时候会检查lint,有任何错误提示会停止build,我们可以关闭这个开关
 lintOptions {
  abortOnError false
  //即使报错也不会停止打包
  checkReleaseBuilds false
  //打包release版本的时候进行检测
 }

}

dependencies {
 //项目的依赖关系
 implementation fileTree(include: ['*.jar'], dir: 'libs')
 //本地jar包依赖
 implementation 'com.android.support:appcompat-v7:27.1.1'
 //远程依赖
 implementation 'com.android.support.constraint:constraint-layout:1.1.2'
 testImplementation 'junit:junit:4.12'
 //声明测试用例库
 androidTestImplementation 'com.android.support.test:runner:1.0.2'
 androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

总结

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

(0)

相关推荐

  • gradle+shell实现自动系统签名

     前言 有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包apk,解压apk,删除META-INF中CERT.RSA和 CERT.SF,然后压缩,用系统签名工具签名,一顿操作后可能十分钟过去了,实在太过繁琐,因此我们做了一些简化,用gradle+shell帮我们实现自动化. 准备 1.android studio 2.系统签名文件(signapk.jar.platform.x509.pem.platform.pk8) 3.如果是mac系统,还

  • Gradle构建多模块项目的方法步骤

    通常我在使用Maven构建项目的时候是将应用项目划分为多个更小的模块. Gradle 项目也拥有多于一个组件,我们也将其称之为多项目构建(multi-project build). 我们首先创建一个多项目构建: mkdir cmdGradleProj && cd cmdGradleProj gradle init 这时候 D:\cmdGradleProj> 目录下执行:tree /f 的项目结构如下: │ build.gradle │ gradlew │ gradlew.bat │

  • Android studio gradle环境变量配置教程

    本文实例为大家分享了Android studio gradle环境变量配置的教程,供大家参考,具体内容如下 我的gradle 下载自动解压到了这个目录  C:\Users\jacli\.gradle\wrapper\dists\gradle-2.10-all\a4w5fzrkeut1ox71xslb49gst\gradle-2.10 1.右击"计算机"点击"属性"点击"高级系统设置" 你会看到系统属性 2.点击"环境变量"在弹

  • springboot+gradle 构建多模块项目的步骤

    springboot用以进行web项目开发的便捷性,本文不再赘述,主要是想将工作中基于springboot与gradle的多模块项目的构建经验进行总结与归纳. 1.创建项目 首先安装java和gradle,本文选用的java版本为1.8.0_40,gradle版本为2.10,安装过程本文不再赘述. 其次创建项目,名称为 springboot-mm: mkdir springboot-mm cd springboot-mm gradle init 此时的项目结构如下: 接下来,创建多个模块,这里以

  • Powershell 脚本数字签名实现方法

    脚本很容易被冒名顶替或者更改,因为它们是由纯文本构成的.数字签名为脚本提供了更高的安全性,因为它能确定脚本和脚本的编辑者的唯一性,并且不能被更改.作为脚本的发布者,你能确定你的脚本没有被恶意篡改.即使专家也无能为力,因为这种机制是基于复杂逻辑的.幸运的是,在实际应用中,你不需要深究这些细节,只需要掌握Powershell脚本签名的机制和过程. 准备一个合适的证书 因为不能使用传统的纸质签名给Powershell脚本进行签名,你需要另一个工具"证书".证书就像一把私有并且安全的钥匙.证书

  • PowerShell 未经数字签名 系统将不执行该脚本

    一句话解决方法: 设置一下可以运行未签名的脚本或者为你的脚本签名. set-executionpolicy Bypass PowerShell因为在此系统中禁止执行脚本的解决方法 http://www.jb51.net/article/95022.htm Powershell 脚本数字签名实现方法

  • 史上最全的Android build.gradle配置教程

    前言 Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项目时会包含两个Android build.gradle配置详解文件,如下图: 一.Project的build.gradle文件: 对应的build.gradle代码如下: // Top-level build file where you can add configuration optio

  • 史上最全Android build.gradle配置详解(小结)

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项目时会包含两个Android build.gradle配置详解文件,如下图: 一.Project的build.gradle文件: 对应的build.gradle代码如下: // Top-level build file where you can add configuration options

  • 史上最全的PHP正则表达式(手机号需要加上177-***)

    首先看下正则表达式思维导图: 一.校验数字的表达式  1 数字: ^[0-9]*$ 2 n位的数字: ^\d{n}$ 3 至少n位的数字: ^\d{n,}$ 4 m-n位的数字: ^\d{m,n}$ 5 零和非零开头的数字: ^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字: ^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数: ^(\-)?\d+(\.\d{1,2})?$ 8 正数.负数.和小数: ^(\-|\+)?\d+(\.\

  • Selenium元素定位的30种方式(史上最全)

    Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度首页(www.baidu.com)进行示例,f12可以查看具体前端代码. WebDriver8种基本元素定位方式 find_element_by_id() 采用id属性进行定位.例如在百度页面中输入关键字 Selenium 进行搜索.百度部分关键源码如下: <span class="bg s_

  • 2020史上最全IDEA插件总结(推荐收藏)

    IDEA 插件安装 步骤 IDEA里面,选择打开 File --> Settings --> Plugins 在Plugins里面, 可以搜索需要的插件 (下面的标题),然后安装 如下图: AceJump 全栈必备,作为一个全能的程序员 ,用鼠标,太伤自尊了,他就可以帮到你 AceJump其实是一款能够代替鼠标的软件,只要安装了这款插件,可以在代码中跳转到任意位置.按快捷键进入 AceJump 模式后(默认是 Ctrl+J),再按任一个字符,插件就会在屏幕中这个字符的所有出现位置都打上标签,你

  • 史上最全Java8日期时间工具类(分享)

    这是我总结的Java8日期工具类,应该是比较全面的,满足日常开发绝大部分需求,分享给大家,有错误之处,还望大神指教. /** * Java8日期时间工具类 * * @author JourWon * @date 2020/12/13 */ public class LocalDateUtils { /** * 显示年月日时分秒,例如 2015-08-11 09:51:53. */ public static final String DATETIME_PATTERN = "yyyy-MM-dd

  • 推荐史上最全的IDEA好用插件

    经过很多查看在巨人的肩膀上写完这篇博客,如有雷同纯属巧合,虽然自己也查了些文章才总结的,但是站在巨人肩膀上不敢搞原创! 学习使用一些插件,可以提高平常工作中的开发效率.对于我们开发人员很有帮助! 插件安装 IDEA里面,依次选择打开 File → Settings → Plugins,在Plugins里面可以搜索需要的插件,然后安装(安装完插件,一定要重启Idea,不然插件不生效) 1. Alibaba Java Coding Guidelines [阿里巴巴代码规范检查插件] ① 功能: 代码

  • Docker安装Oracle19c史上最全步骤

    目录 介绍 前期准备 Docker安装 Oracle 19c安装 第一步:下载镜像 第二步:创建挂载文件 第三步:安装Oracle 第四步:连接Oracle 介绍 Oracle Database 19c ,也就是12.2.0.3,最初在livesql.oracle.com上发布,是Oracle Database 12c和18c系列产品的最终版本,因此也是“长期支持”版本(以前称为“终端版本”). “长期支持”意味着Oracle Database 19c提供4年的高级支持(截止到2023年1月底)

  • Android Studio gradle配置packagingOptions打包so库重复

    目录 正文 pickFirst 匹配 doNotStrip 设置 merge 将匹配的文件都添加到APK中 exclude 过滤 正文 在安卓开发中,通常会使用到gradle来编译,在安卓项目的app目录下的build.gradle中是用来对编译进行配置的,packagingOptions 是其中的一个打包配置,常见的设置项有exclude.pickFirst.doNotStrip.merge. 在日常代码开发中,我们需要知其然,而知其所以然,本文章知识也是Android日常瘦身的的必备知识.

  • 史上最强C语言分支和循环教程详解

    目录 3.3 do...while()循环 3.3.1 do语句的语法: 3.3.2 执行流程 3.3.3 do语句的特点 3.3.4 do while循环中的break和continue 3.4 练习 3.4.1. 计算 n的阶乘. 3.4.2. 计算 1!+2!+3!+--+10! 3.4.3. 在一个有序数组中查找具体的某个数字n. 3.4.4. 编写代码,演示多个字符从两端移动,向中间汇聚. 3.4.5. 编写代码实现,模拟用户登录情景,并且只能登录三次. 3.4.6.猜数字游戏实现 4

随机推荐