Android studio 3.2 升级详解及Gradle配置

发布时间:2018-09-29 15:36,

浏览次数:618

, 标签:

Android

studio

Gradle

一直在使用Android studio

2.3.1版本,因为工作开发使用的都是这个版本,所以在经历了N次提示更新后,依旧还是没有升级,直到今天终于忍不住了,因为Android Studio

3.2版本在这个月发布了,增加了很多新特性,具体参见官方介绍吧:

https://android-developers.googleblog.com/2018/09/android-studio-32.html?linkId=57299773

<>一、下载并安装Android studio 3.2

<>1.1 下载:

Android studio 3.2官方下载页:

https://developer.android.com/studio/?utm_source=android-studio

Android studio 3.2 windows x64 下载直达

Windows(64-bit)

android-studio-ide-181.5014246-windows.exe

Recommended

923 MB

978673a7babf51a9dca67729213c178995c1039a496dc1dfccb4c095b842c753

https://dl.google.com/dl/android/studio/install/3.2.0.26/android-studio-ide-181.5014246-windows.exe

<>1.2 安装

双击下载好的android-studio-ide-181.5014246-windows.exe开始安装

提示删除旧版本 选择Next

警告要删除指定目录下的文件 选择是

等待安装完毕

提示你导入配置文件: 选择原来版本的配置文件即可

到此安装完毕,打开Android Studio 3.2版本后,会提示gradle或者build tool需要更新,按照提示更新即可。

<>二、Gradle 版本升级

Android studio 项目中需要更改配置的地方

<>2.1 repositories 节点配置

Gradle Plugin 升级到 3.0.0 及以上,修改 project/build.gradle 文件

buildscript { repositories { jcenter() google()//增加 } dependencies { ...

classpath'com.android.tools.build:gradle:3.2.0' ... } } allprojects {

repositories{ jcenter() google()//增加 } }

<>2.2 更新Gradle 版本

Gradle 需要升级到 4.1 及以上,我选择了最新的4.6

修改 project/gradle/gradle-wrapper.properties 文件:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

<>2.3 依赖关键字变化

在Moudel的build.grable的dependencies领域中

3.0之前:

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs')

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:26.+' compile

'com.android.support:support-v4:26.+' compile

'com.android.support:recyclerview-v7:26.+' compile

'com.android.support:cardview-v7:26.+' compile

'com.github.bumptech.glide:glide:3.7.0' testCompile 'junit:junit:4.12' compile

'ru.bartwell:exfilepicker:2.1' }

3.0之后:

dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs')

androidTestImplementation(

'com.android.support.test.espresso:espresso-core:2.2.2', { exclude group:

'com.android.support', module: 'support-annotations' }) implementation

'com.android.support:appcompat-v7:26.+' implementation

'com.android.support:support-v4:26.+' implementation

'com.android.support:recyclerview-v7:26.+' implementation

'com.android.support:cardview-v7:26.+' implementation

'com.github.bumptech.glide:glide:3.7.0' testImplementation 'junit:junit:4.12'

implementation'ru.bartwell:exfilepicker:2.1' }

注:需要将androidTestCompile 更改为androidTestImplementation,否则会报以下提示:

Configuration ‘androidTestCompile’ is obsolete and has been replaced

with ‘androidTestImplementation’ and ‘androidTestApi’. It will be

removed at the end of 2018. For more information see:

http://d.android.com/r/tools/update-dependency-configurations.html

api 对应之前的 compile 关键字,功能一模一样。会传递依赖,导致 gradle 编译的时候遍历整颗依赖树

implementation 对应之前的 compile ,与 api 类似,关键区别是不会有依赖传递

compileOnly 对应之前的 provided,依赖仅用于编译期不会打包进最终的 apk 中

runtimeOnly 对应之前的 apk,与上面的 compileOnly 相反(现在已弃用)

androidTestImplementation 对应之前的androidTestCompile

testImplementation 对应之前的testCompile

关于 implementation 与 api 的区别,主要在依赖是否会传递上。如:A 依赖 B,B 依赖 C,若使用api则 A 可以引用 C,而

implementation 则不能引用。

这里更推荐用 implementation,一是不会间接的暴露引用,清晰知道目前项目的依赖情况;二是可以提高编译时依赖树的查找速度,进而提升编译速度。

<>2.4 打包时重命名APK

def releaseTime() { return new Date().format("yyyy.MM.dd", TimeZone.getTimeZone

("UTC")) }

在Module的build.gradle的android领域中使用如下代码

3.0以前

applicationVariants.all{ variant -> variant.outputs.each{ output -> def

outputFile=output.outputFile if(outputFile!=null && outputFile.name.endsWith(

'.apk')) { def fileName="APP_NAME

v${defaultConfig.versionName}-${releaseTime()}.apk" output.outputFile=new File(

outputFile.parent,fileName) } } }

3.0以后

variant.outputs.each 更改为variant.outputs.all

由于 outputFile 属性变为只读,需要进行如下修改,直接对 outputFileName 属性赋值即可:

applicationVariants.all { variant -> variant.outputs.all { output -> def

outputFile=output.outputFile if(outputFile!=null && outputFile.name.endsWith(

'.apk')) { def fileName if(variant.buildType.name=="release"){ fileName =

"APP_NAME v${defaultConfig.versionName}-${releaseTime()}.apk" }else { fileName =

"APP_NAME v${variant.versionName}_debug.apk" } outputFileName = fileName } } }

<>2.5 多渠道打包

3.0 后 Gradle 添加了 flavorDimensions 属性(直译为风味纬度,可以理解为特点纬度),用来控制多个版本的代码和资源

如果说3.0以前的版本差异化打包更多的是为了厂商定制的,那么3.0以后的版本差异化打包就是在厂商的基础之上加入了机型,渠道等一些参数,变成了多个维度的产品。

也就是说之前的一个产品只有一个参数进行描述的话,现在就可以为其增加多个参数进行配置,比如A厂商的A渠道的A机型、A厂商的B渠道的C机型等,维度越多,产品的样式越发丰富。

官网提供的解决方式是:

在项目 app/build.gradle 文件的android领域中添加 flavorDimensions

// Specifies a flavor dimension. flavorDimensions "color" productFlavors { red

{ // Assigns this product flavor to the 'color' flavor dimension. // This step

is optional if you are using only one dimension. dimension "color" ... } blue {

dimension"color" ... } }

<>2.6 AAPT2

AAPT2 将默认启用,如果遇到离奇的问题,可以尝试禁用,只要在 gradle.properties 中加入:

android.enableAapt2=false

参考:Developers->迁移到 Android Plugin for Gradle 3.0.0

最后总结一下:工具才是提高生产力的根本,便捷高效的工具加上清晰严谨的代码方能制作出一个好的程序。

android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置相关推荐

  1. 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...

  2. android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...

    1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...

  3. android项目打包apk,Android Studio将程序打包成APK的步骤详解

    第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create ...

  4. Android异步处理三:Handler+Looper+MessageQueue深入详解

    本博文地址:http://blog.csdn.net/mylzc/article/details/6771331 转载请注明出处 Android异步处理系列文章索引 Android异步处理一:使用Th ...

  5. android setinputtype光标,Android屏蔽软键盘并且显示光标的实例详解

    Android屏蔽软键盘并且显示光标的实例详解 如果是android4.0以下,那么 editText.setInputType(InputType.TYPE_NULL); 就够了,android4. ...

  6. 关于android的4.2的0文件夹的详解

    关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...

  7. Android 系统(214)---Android 7.1.1时间更新NITZ和NTP详解

    Android 7.1.1时间更新NITZ和NTP详解 1.NTP和NITZ简介 最近在项目中遇到手机首次插上移动卡时不能自动更新时间的问题,就特意跟了下Android系统中手机时间更新有两种方式NT ...

  8. android PorterDuffXfermode ,PorterDuff.Mode 使用 以及Porter-Duff规则详解

    android PorterDuffXfermode ,PorterDuff.Mode 使用 以及Porter-Duff规则详解 1.下面的Xfermode子类可以改变这种行为: AvoidXferm ...

  9. android 4.2目录结构,关于android的4.2的0文件夹的详解(目录结构挂载分析)

    关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...

最新文章

  1. 计算机应用基础第三章操作步骤,最新江西三校生计算机应用基础模拟操作题集锦(超实用!)...
  2. Python字符串中含有某子字符串的个数
  3. java 默认字符集 iso_当服务器的默认字符集是UTF-8时,Perl并使用ISO-8859-1字符集...
  4. Git Issues
  5. Spring Boot Debug调试
  6. Java – JDK 8的远景
  7. java list 字段去重_如何实现java8 list按照元素的某个字段去重
  8. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  9. java中文乱码decode_JAVA中文字符乱码解决详解
  10. 在JavaScript中操作Cookie
  11. 对Photoshop高斯模糊滤镜的算法总结
  12. 原型模式(深克隆、浅克隆)
  13. 显示100以内的所有偶数php,vb100-急需vb编程求100以内所有奇数和及所有偶数和vb编程求100以 爱问知识人...
  14. python自带的pip版本过低 卸载pip重写安装V10
  15. 软件测试与软件调试的区别
  16. AngularJS orderBy 使用要点
  17. 服务器winsxs文件夹怎么清理工具,win10系统winsxs文件夹该如何删除?win10删除winsxs文件夹的两种方法...
  18. 什么是对称加密(对称加密简介)
  19. Android 开发2048 无法显示gameView、Card
  20. 不定积分公式 定积分公式

热门文章

  1. 视觉识别数字、十字路口和T字路口,巡线于一体的基于openmv的解决方案(2021年电赛f题)
  2. 行业分类参考-做所有事情都要归于行业
  3. 诺基亚3d贪吃蛇java版_诺基亚3D贪吃蛇游戏下载-游戏大玩家
  4. 我花了30天的时间去弄懂了一个网站的基础建站流程,其中真的是受益良多
  5. SQL Server与SQL Server Express的区别
  6. 【必须学好】字典、哈希与Map
  7. 昆明网站建设公司排名榜
  8. php shopping_PHP实现购物网站实例详解
  9. baocms伪静态_BAOcms7.0 O2O本地生活服务系统钻石版源码 无限制版 功能强大
  10. 2.1、水平对称天线双极性天线