Android Studio 3.0正式版填坑之路

2023-11-05

Android Studio 3.0启动图

序言


总看别人的文章,今天尝试着自己来写一篇。在逛论坛时候,无意间发现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更新升级问题

Ver:v5.2.180910

  • AS新版本更新
  • 官方文档地址更新

Ver:v6.3.181009

  • AS 新版本更新
  • AS 3.2注意事项
  • AndroidX的迁移

正文


AS升级到 Android Studio 3.x(Stable 3.0.0 ~ 3.2.1)之后,就会遇到一些版本升级变更问题。收集整理如下:

1. Gradle版本不匹配

修改项目下 gradle/wrapper/gradle-wrapper.propertie 文件中的distributionUrl
AS 3.0.0 ~ 3.0.1改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
AS 3.1.1 ~ 3.1.4 改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
AS 3.2.0 ~ 3.2.x 改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-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.2.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.4:

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'
    ...
}

AS 3.2 ~ 3.2.x:

android {
   compileSdkVersion 28
   buildToolsVersion "28.0.2"
   ...
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])  
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    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重新编译。关于implementationapi的区别,请移驾 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.xjre替换3.xjre方式去处理输入法问题,虽然暂时可以解决输入问题,但是后面升级的时候你还得把2.xjre换回3.xjre,否则升级后将无法正常使用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 重新更新下载安装。

11. AS 3.2注意事项

1)compileSdkVersion 版本升级到28及以上;
2)buildToolsVersion 版本改为28.0.2及以上;
3)Gradle 插件版本改为4.6及以上;
4)新的 Android扩展库(AndroidX)取代旧 Android支持库,新的命名空间为 androidx.*,包括所有的支持库和架构组件。

依赖库对比:

//旧依赖库
implementation 'com.android.support:appcompat-v7:28.0.0' 
//新依赖库
implementation 'androidx.appcompat:appcompat:1.0.0' 

AndroidX迁移方法,请移驾 Android AndroidX的迁移

AndroidX 目前仍被认为是处于 Alpha 阶段,有些变更会破坏兼容性。此外,还有一些已知的问题,所以暂时不建议在生产项目中使用。

参考

Android Studio发布说明,点击开启传送门!
Android Gradle配置文档,点击开启传送门!

下载

Android Studio下载,请戳我哟!
Android Gradle下载,请戳我哟!

结语


上述就是AS 2.x升级AS 3.x所遇到的问题,可能每个人情况不一样,遇到的问题也不尽相同。希望有类似经历和问题的小伙伴,可以帮助你们少走一些弯路。

初次写,如有不对和欠妥当地方,请大家帮忙指正,有疑问和补充的小伙伴请留言告知,万分感谢!文章会持续更新,待续……

========== 相关推荐 ==========

Android Studio的一些实用配置


Android Studio中Gradle基本配置详解


Android Studio添加依赖方式


Android Studio中Gradle依赖项配置


Android Studio常见问题解决方案


Android AndroidX的迁移


============================



作者:翻译不了的声响
链接:https://www.jianshu.com/p/9b25087a5d7d
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio 3.0正式版填坑之路 的相关文章

随机推荐

  • 纯代码的3D玫瑰花,有个这个还怕女朋友不开心?

    先上效果图 再上代码
  • 【hortonworks/registries】Parameter Schema name is null

    1 背景 修改了hortonworks registries的0 9版本的源码后 加入了json格式 然后部署后 添加schema的时候报错如下 INFO 2020 08 18 07 04 18 802 com hortonworks
  • es6之对象的扩展

    function getPoint const x 1 const y 10 return x y getPoint x 1 y 10 CommonJS 模块输出一组变量 就非常合适使用简洁写法 let ms function getIte
  • 【Metashape精品教程4】软件设置

    Metashape精品教程4 软件设置 文章目录 Metashape精品教程4 软件设置 前言 一 一般 二 GPU 三 网络 四 Appearance 五 高级 六 Agisoft Metashape1 8专业版用户手册 前言 Metas
  • C - 一只小蜜蜂...

    有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房 不能反向爬行 请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数 其中 蜂房的结构如下所示 Input 输入数据的第一行是一个整数N 表示测试实例的个数 然后是N 行数据 每行包含两个整数a和b 0
  • Java UnknownHostException –服务器的无效主机名–如何解决?

    An UnknownHostException的快速指南 如果在为远程方法调用创建到远程主机的连接时发生java net UnknownHostException 则会抛出该快速指南 UnknownHostException的预防方法 1
  • cookie 和session 的区别详解

    原文地址 http www cnblogs com shiyangxt archive 2008 10 07 1305506 html 这些都是基础知识 不过有必要做深入了解 先简单介绍一下 二者的定义 当你在浏览网站的时候 WEB 服务器
  • 用Python进行面向对象编程:提高代码可重用性和扩展性

    数据来源 01 初识对象 生活中数据的组织 程序中数据的组织 使用对象组织数据 演示 演示使用对象组织数据 在程序中设计表格 我们称之为 设计类 class class Student name None 记录学生姓名 gender Non
  • [4G+5G专题-132]: 传输层 - 以太网电缆的类型(Cat5,Cat5e,Cat6,Cat6a)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121552941 目录 1 主要的技术
  • BUUCTF Misc 二维码 & 你jing然赶我走 & 大白 & N种方法解决 & 乌镇峰会种图1 & 基础po解

    目录 二维码 你竟然赶我走 大白 N种方法解决 乌镇峰会种图 基础po解 二维码 下载文件 一个二维码 使用 QR research扫描 扫描完提示flag就在这 把二维码拖入010 editor打开 有个txt文档 使用kali中的bin
  • win7安装vmtools

    打开该虚拟机的虚拟机设置 选择软盘 设备状态设置为启动时连接 连接选择使用物理驱动器并使用自动检测 如图所示 然后保存并退出设置 在虚拟机选项中就可以选择安装vmtools了 或者在该虚拟机中选择软盘进行安装
  • 一周简报(维护项目空间)

    这一周 是9月的第三周了 我依然战斗在XX海油上 本周我的主要任务是处理项目空间中的一个需求变更 顾客就是上帝 对于他们合理的需求 我们努力去做到尽善尽美 当然也要保证在客户要求的时间内去完成 在这个高节奏 快步伐的时代 效率和质量是大家追
  • Unity 游戏框架搭建 2019 (四十六) 简易消息机制

    在上一篇 我们接触了单例 使用单例解决了我们脚本之间访问的问题 脚本之间访问其实有更好的方式 我们先分下脚本访问脚本的几种形式 第一种 A GameObject 是 B GameObject 的 Parent 或者是中间隔着几个层级的 Pa
  • 蓝桥杯-高精度阶乘(Java代码)

    问题描述 输入一个正整数n 输出n 的值 其中n 123 n 算法描述 n 可能很大 而计算机能表示的整数范围有限 需要使用高精度计算的方法 使用一个数组A来表示一个大整数a A 0 表示a的个位 A 1 表示a的十位 依次类推 将a乘以一
  • 昆仑天工AIGC——基于Stable Diffusion的多语言AI作画大模型测评

    文章目录 1 AIGC 2 技术背景 2 1 Stable Diffusion 2 1 1 图像感知压缩 Perceptual Image Compression 2 1 2 隐扩散模型 Latent Diffusion Models 2
  • ModelSerializer序列化与反序列化(重点)

    视图类 class UserV3APIView APIView 单查群查 def get self request args kwargs pk kwargs get pk if pk user obj models User object
  • 2020年第十一届蓝桥杯第二场省赛B组C++题解

    2020年第十一届蓝桥杯第二场省赛B组C 题解 题单 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 题单 第一题 小蓝要为一条街的住户制作门牌号 这条街一共有 2020 位住户 门牌号从 1 到 2020 编号 小蓝制作门
  • Win10多用户远程桌面连接

    Win10远程桌面多用户连接 实验室的服务器需要多人同时登入 我在网上找到了能够成功使用Win 10 远程连接的方法 现在我把我的操作过程记录下来 供大家交流学习 文章目录 Win10远程桌面多用户连接 方法原理 一 使用步骤 1 下载RD
  • SeekBar自定义(颜色,大小,图片)

    要实现下面图的效果 import android os Bundle Seekbar 自定义 颜色 author Andy public class TestSeekBar extends Activity Override protect
  • Android Studio 3.0正式版填坑之路

    Android Studio 3 0启动图 序言 总看别人的文章 今天尝试着自己来写一篇 在逛论坛时候 无意间发现Android Studio 3 0正式版本推送更新了 早听说AS 3 0添加了许多新功能 然后手贱迫不及待地想先睹为快 结果