Android Studio 3.0正式版填坑之路
原文:https://www.jianshu.com/p/9b25087a5d7d

序言
总看别人的文章,今天尝试着自己来写一篇。在逛论坛时候,无意间发现Android Studio 3.0正式版本推送更新了,早听说AS 3.0添加了许多新功能,然后手贱迫不及待地想先睹为快,结果正中下怀。下载和更新Gradle,半天无响应,只好结束进程强制关闭AS,手动离线下载安装。本以为不会有太大问题,谁知太高估了,进来各种的报错,各种的配置问题,填坑之路就此开始。
更新内容
Ver:v1.3.171031
- Gradle关键字依赖变化
- AAPT2编译报错
- 相关下载地址
Ver:v2.2.171111
- 图片错误
- 输入法中文状态下无法选词
Ver:v3.2.171231
- 完善中文输入问题
- AS 3.0.1资源问题
Ver:v4.3.180416
- AS 3.1.1配置问题
- 完善相关问题
- AS更新升级问题
正文
下面就来看看升级到 Android Studio 3.x(Stable 3.0 ~ 3.1.3)之后,遇到的一些问题:
1. Gradle版本不匹配
修改项目下 gradle/wrapper/gradle-wrapper.propertie 文件中的distributionUrl
AS 3.0 ~ 3.0.1改为:distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
AS 3.1.1 ~3.1.3 改为:distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
2. Gradle插件不匹配
1)项目根目录下的 build.gradle文件中两个repositories
节点都添加google()
- E.G
buildscript{
repositories {
google() //新增
}
dependencies {
classpath'com.android.tools.build:gradle:3.0'//与AS版本一致
//classpath'com.android.tools.build:gradle:3.1.1'
}
}
allprojects {
repositories{
google() //新增
}
}
2)项目app下 build.gradle文件中,修改相关支持库版本
AS 3.0 ~ 3.0.1:
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
...
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
testImplementation 'junit:junit:4.12'
...
}
AS 3.1.1 ~ 3.1.3:
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
...
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
testImplementation 'junit:junit:4.12'
...
}
3. Gradle编译报flaovr配置错误
- Error
Error:A problem occurred configuring project ':app'.> All flavors must now belong to a named flavor dimension.
- Solution
AS 3.0后Gradle添加了flavorDimensions
属性,用来控制多个版本的代码和资源,缺失就会报错。在项目app下build.gradle文件中,添加flavorDimensions
:
android {
...
flavorDimensions "tier","minApi"
productFlavors{
fees{
dimension"tier"
...
}
minApi23{
dimension"minApi"
...
}
}
}
如果不需要多版本控制只需添加:flavorDimensions "code"
(随意定义)
android {
...
defaultConfig {
...
flavorDimensions "code"
}
...
}
4. Gradle自定义apk名称报错(Cannot set the value of read-only property 'outputFile' )
- E.G
AS 3.0之前自定义apk名称:
applicationVariants.all { variant ->
variant.outputs.each { output ->
def fileName = "${variant.versionName}_release.apk"
def outFile = output.outputFile
if (outFile != null && outFile.name.endsWith('.apk')) {
output.outputFile =newFile(outFile.parent, fileName)
}
}
AS 3.0之后,同样代码自定义apk名称却会报错:
- Error
Error:(56, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
- Solution
outputFile
变为只读,不能修改输出的名称所以报错。修改为:
applicationVariants.all { variant ->
variant.outputs.all { output -> // each 改为 all
def fileName = "${variant.versionName}_release.apk"
def outFile = output.outputFile
if (outFile != null && outFile.name.endsWith('.apk')) {
outputFileName = fileName // output.outputFile 改为 outputFileName
}
}
把each
修改为all
,然后通过outputFileName
修改生成apk的名称。此外,AS 3.0后打包完,除了apk包文件,还会多一个 output.json 参数文件。
5. AS 3.0后关键字依赖变化
- E.G
AS 3.0之前依赖关键字:compile
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:26.1.0'
compile files('libs/gson-2.3.1.jar')
compile project(':mylibrary')
...
}
AS 3.0之后依赖关键字:implementation
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation files('libs/gson-2.3.1.jar')
implementation project(':mylibrary')
...
}
AS 3.0后Gradle关键字依赖发生变化:compile(implementation/api)
,provided(compileOnly)
,apk(runtimeOnly)
AS 3.0后,在使用新依赖配置项时,引用本地库使用
implementation
指令时,若出现找不到导包或资源问题报错,可以更换依赖指令为api
重新编译。关于implementation
和api
的区别,请移驾:AS Gradle依赖项配置
6. AAPT2编译报错
- Error
Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
- Solution
在项目根目录下gradle.properties文件中关闭APPT2编译:
...
android.enableAapt2 = false
7. PNG 图片错误,AAPT err(Facade for):Unable to open PNG file
- Error
AAPT err(Facade for):……Unable to open PNG file
- Solution
项目app下build.gradle文件中添加下面属性:
android{
...
aaptOptions{
cruncherEnabled = false
useNewCruncher = false
}
...
}
用来关闭AS图片PNG合法性检查的,直接不让它检查。
- Note
如果还是有错误,请检查:
1 ) .9.png图片放在
res/drawable
文件夹下
2 ) .9.png图片四边都要有黑线,确保图片是标准的.9.png
图片
8. 输入法中文状态下无法选词
- Question
AS 3.0后在输入中文时候会出现键盘不显示,无法筛选词输入中文 - Solution
首先要说不是你的输入法问题,而是AS 3.0后的一个BUG,下面提供几种解决方案:
1 ) 如果你还在2.3.x的环境下开发,为了避免输入法问题,建议你暂时不要升级到3.x;
2 ) 如果你想2.3.x升级使用3.x,那么不建议你使用2.x的jre替换3.x的jre方式去处理输入法问题,虽然暂时可以解决输入问题,但是后面升级的时候你还得把2.x 的jre换回3.x的jre,否则升级后将无法正常使用AS;
3 ) 最简单最有效的解决办法就是在使用 AS的时候,切换到 windows自带的中文输入法就可以正常输入中文筛选词语了,相对而言,这样方便很多。虽然没有第三方输入法用起来那么顺手,但是可以有效解决输入法问题和避免以后升级的问题;
4 ) 终极方案:升级到 AS 3.1.1即可解决,AS 3.1.1已经修复了输入法中文状态下无法选词的BUG。
9. 移除无用资源问题
- Error
Error: Removing unused resources requires unused code shrinking to be turned on.
- Solution
android {
...
buildTypes {
debug {
signingConfig signingConfigs.release
debuggable true
zipAlignEnabled true
minifyEnabled true //是否混淆
shrinkResources true //是否去除无效的资源文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
signingConfig signingConfigs.release
zipAlignEnabled true
debuggable true
minifyEnabled true //是否混淆
shrinkResources true //是否去除无效的资源文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
...
}
AS 3.0.1后,如果使用shrinkResources
来移除未引用资源,必须要先开启混淆minifyEnabled
,才能通过资源压缩器将它们移除,否则编译会报错。
10. 软件升级安装冲突
Error
AS在线升级后,安装重启软件时会出现部分文件安装冲突。如下图所示:更新问题图Solution
方法一:
1)找到 AS 安装目录下的 uninstall.exe 卸载文件,运行卸载当前旧版本AS(卸载前记得备份代码和配置文件);
2)下载最新版本的AS安装包,运行安装并导入配置文件和项目。
方法二:
1)点击 Cancel 取消安装并关闭AS;
2)找到 AS 安装目录下的 studio64.exe 启动文件,右键 —— 以管理员身份运行 打开AS(提高AS的权限);
3)点击 Help —— Checkout for Updates —— Update and Restart 重新更新下载安装。
参考
Google官方文档
https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration
https://developer.android.com/studio/releases/
下载
Android Studio下载
https://developer.android.google.cn/studio/archive.html
Android Gradle下载
http://services.gradle.org/distributions
结语
上述就是AS 2.x升级AS 3.x所遇到的问题,可能每个人情况不一样,遇到的问题也不尽相同。希望有类似经历和问题的小伙伴,可以帮助你们少走一些弯路。
初次写,如有不对和欠妥当地方,请大家帮忙指正,有疑问和补充的小伙伴请留言告知,万分感谢!文章会持续更新。
Android Studio 3.0正式版填坑之路的更多相关文章
- Android Studio 2.0 正式版公布啦 (首次中文翻译)
Android Studio 2.0 公布了,添加了一些新特性: 1. 更加完好的 Instant Run 2. 更快的 Android Emulator 3.GPU Debugger Preview ...
- Android Studio 2.3 正式版新功能,你不来看看?!
2017.3.3 Google老大发布了Android Studio 2.3正式版. 在许多2.3beta版本的基础上修复了bug然后推出了正式版.提供了一些新特性,和对部分已有功能的修改完善. Bu ...
- Android Studio 3.6 正式版终于发布了
Google 下载地址 百度云 下载地址 密码:epl9 如题,Android Studio 3.6 正式版终于发布了,值得兴奋呀,毕竟 3.5 大版本更新也已经差不多半年了,撒花撒花!这次更新又更新 ...
- Android Studio 1.0 (稳定版) 完全攻略
这篇博文中主要从以下几点进行叙述: 1.Android Studio安装与使用 2.Android Studio特性 3.Android Studio优点 Android Studio 安装与使用 A ...
- Android Studio 3.1 正式版
欢迎大家推荐自己在Android开发过程中用的好用的工具.学习开发教程.用到设计素材.如果你觉得本站对你有用,你可以点击底部的分享按钮,把本站分享到社交网络让你的小伙伴和更多的人知道. 或者可以考虑捐 ...
- Android Studio 2.0 稳定版新特性介绍
Android Studio 2.0 最终迎来了稳定版本号,喜大普奔. 以下这篇文章是2.0新特性的一些简介. 假设想看具体内容请看这里<Android Studio有用指南> 文章转自这 ...
- [Android] 环境配置之正式版Android Studio 1.0
昨天看见 Android Studio 1.0 正式版本发布了:心里挺高兴的. 算是忠实用户了吧,从去年开发者大会一开始出现 AS 后就开始使用了:也是从那时开始就基本没有用过 Eclipse 了:一 ...
- Android环境配置之正式版AndroidStudio1.0
昨天看见 Android Studio 1.0 正式版本发布了:心里挺高兴的. 算是忠实用户了吧,从去年开发者大会一开始出现 AS 后就开始使用了:也是从那时开始就基本没有用过 Eclipse 了:一 ...
- Android Studio 1.0 苹果电脑安装配置
前言 近日Google终于不负众望,发布了期待已久的Android Studio 1.0正式版.小编自己是Android开发者,之前使用过Eclipse,也试用过Android Studio 0. ...
随机推荐
- 【题解】 luogu 3857 [TJOI2008]彩灯 (线性基)
luogu3857,懒得复制 Solution: 裸的线性基,往里面添加数,记录添加个数\(sum\),快速幂输出\(2^{sum}\)即可 Code: //It is coded by Ning_M ...
- github使用记录
背景:一直以来,对github既向往又排斥,是因为感觉高大尚有感觉很陌生.现在跟着辉哥学习项目技术,打算好好的学习下这个工具的使用. 1 基础常识 1.1 基础讲解 star的作用是收藏,目的是方便以 ...
- 怎么使用 JavaScript 将网站后台的数据变化实时更新到前端
实时这个工作现在大体有两种方法一.前端不断地向后台轮询请求数据查询的接口(不管你是用AJAX还是什么)然后将返回的数据重绘在页面上,这以前端页面为主动的方式.二.如果浏览器支持Websocket 那么 ...
- iOS中UITableView和UICollectionView的默认空态页
项目中想实现空态页风格统一控制的效果,就封装了一个默认空态页,使用的技术点有:1 方法替换 ,2 给分类(Category)添加属性. 我们知道,扩展(extension)可以给类添加私有变量和方法. ...
- expect 交互 telnet 交互
telnet 交互 #!/bin/bash Ip="10.0.1.53" a="\{\'method\'\:\'doLogin\'\,\'params\'\:\{\'uN ...
- c++刷题(33/100)笔试题1
笔试总共2小时,三道题,时间挺充裕的,但是最后只做了一道,原因在于自己很浮躁,不审题,不仔细思考.没过的两道都是稍微改一下代码就能过,但是没过就是没过,要引以为戒 题目1: 小W有一个电子时钟用于显示 ...
- 关闭ios弹出框:“would like to use your current location”
图一: 图二: 使用cordova生成ios项目,首次打开获取用户定位时会弹出两次对话框,关闭图二中对话框方法: document.addEventListener("deviceready ...
- C# 常用控件属性及方法介绍
C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox ...
- (FFT) A * B Problem Plus
题目链接:https://cn.vjudge.net/contest/280041#problem/F 题目大意:给你两个数,求这俩数相乘的结果.(长度最长5000) 具体思路:硬算肯定是不行的,比如 ...
- 在maven 2工程中加入iTextAsian支持(maven添加自定义jar包到本地仓库)
最近需要在工程中加入JasperReports,其中要用到把报表导出为pdf文件的功能.JasperReports内部使用iText来输出pdf文档,而iText对中文是放在单独的包iTextAsia ...