Android

Studio 2.3 正式版已经发布,有多少小伙伴第一时间升级自己的 Android Studio了呢?

我猜应该不是很多,因为很多有小伙伴担心升级 AndroidStudio

以后自己的工程就没法编译了,出现一堆莫名其妙的问题.最常见的问题可能有一些两个:

问题一:出现 Unknown verification type [95] in stack map frame  错误Error:Execution failed for task ‘:app:transformClassesWithMultidexlistForNiannianDebug’.

Java.io.IOException:

Can’t read

[E:SVNbroondontrunkcodebroodon_androidappbuildintermediatestransformsjarMergingnianniandebugjars11fcombined.jar]

(Can’t process class [com/tencent/wxop/stat/al.class] (Unknown

verification type [95] in stack map frame))

原因分析:引用的第三方库已经混淆过,再在本地进行编译混淆的时候就会报出这个错误。

解决方案:则修改混淆器,重新进行编译,将新的混淆器覆盖原来的混淆器,则可以解决。

问题二:Error:Execution failed for task ‘:app:transformClassesWithMultidexlistForNiannianDebug’.

proguard.KeepClassSpecification.(ZZZZZZLproguard/ClassSpecification;)V

原因分析:升级 Android studio 以后,使用的混淆器版本不一致

解决方案:根据 Android studio版本选择与之对应的混淆器版本

我们先来捋一捋 Android studio 编译各插件之间的关系:

Android studio 编译需要保证:SDK Build Tools 版本,Gradle 版本,Gradle Plugin 版本 兼容。

这里我们要重点关注Gradle版本的版本 ,因为版本决定了 SDK Build Tools 版本与 Gradle Plugin 版本 。

查看当前 Android studio 使用的Gradle 版本

打开 目录:File ->Setting -> Build、Execution,Deployment -> Gradle ,如图:

如果之前没有修改过Gradle 版本,可以通过下边方法查看,如图:

我采用的 版本为:Gradle-3.4.1

查看 Gradle Plugin 版本

直接上图:

当然还有一个更便捷的方式查看当前工程所使用 Gradle 版本与 Gradle Plugin 版本

打开目录:File -> Project Stucture -> Project , 如图:

重点来了, Gradle 版本与 Gradle Plugin 版本之间的兼容性:

这里我以 Gradle Plugin  2.3.0 以例子,说说Gradle Plugin 、 Gradle 与 SDK Build Tools 三者之间的关系。

写的非常清楚了,Gradle Plugin  2.3.0 依赖 Gradle 3.3 或者以上版本,依赖 SDK Build Tools 25.0.0 及以上版本。

说了这么多,好像还是没说升级 Android Studio 为什么会导致前边提到的两问题,前边提到的两个问题其实多是和混淆相关。细心的小伙伴可能已经发行 Gradle Plugin  2.3.0 使用的新版本的 ProGurd,如图:

问题二的出现其实就是 混淆器的版本与 Gradle Plugin 的版本不一致导致的。

很多小伙伴多手动配置了自己的混淆器,如下:

1,在项目的根目录下创建 proguard 文件夹,在文件下加入 proguard.jar

2, 在project的build.gradle中加入混淆包的关联:

假如你之前使用的混淆器 proguard.jar 的版本是比较低的,现在使用 Gradle Plugin  2.3.0 的话,就会报错,解决方式也非常检查 替换成 Gradle Plugin  2.3.0 对应的 Proguard版本即可。

Proguard 各版本下载地址:https://sourceforge.net/projects/proguard/files/proguard/

至于问题一解决就比较麻烦一点:

问题一出现的原因:引用的第三方库已经混淆过,再在本地进行编译混淆的时候就会报出这个错误。

我们只能通过修改混淆器的源码来解决这个问题。

以 Gradle Plugin  2.3.0 为例

1,首先,下载 Gradle Plugin  2.3.0 至于的混淆器 ProGuard version 5.3.2 ,解压,目录结构如下:

2,找到源码的 ClassConstant.Java 类,在 srcproguardclassfile 文件当中,然后将ATTR_StackMapTable 的值修改成 “dummy”(原值为StackMapTable)。

3,打开SDK所在模块,依次打开:{android-sdk 目录}toolsproguard,复制

ant文件、proguard-android.txt、proguard-android-optimize.txt、proguard-project.txt

文件至ProGuard version 5.3.2 文件夹类。

4,使用ant 进行重新打包

a,安装ant

进入 ant 官网:http://ant.apache.org/ 下载最新版本,并解压至你的硬盘。

b,配置环境变量

window中设置ant环境变量:

配置环境变量:我的电脑 ->属性 -> 高级 -> 环境变量ANT_HOME     D:appantapache-ant-1.10.1

path                    %ANT_HOME%bin;%JAVA_HOME%bin;

classpath            %ANT_HOME%lib;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar

c, 验证ant 是否配置成功

依次选择:开始->运行->cmd,输入如下命令:ant

如果出现如下内容,说明安装成功:Buildfile: build.xml does not exist!

Build failed

d, 运行ant打包 proguard

1,cmd 进入 proguard 目录下的 build.xml 所在目录

2, 输入命令 ant 编译

3,在 lib 里面找到 proguard.jar文件,覆盖到 sdk 里面的 proguard 里面的 proguard.jar 包 。

当然有些小伙伴没有配置过自己的混淆器,那 Android Studio 使用的这是默认的 proguard.jar,

路径:{Android Studio 安装目录}gradlem2repositorynetsfproguardproguard-base

4,重启 Android Studio,编译运行,大功告成 。

参考文章欢迎关注本人微信订阅号:“Android 之旅”,每天更新技术博客与行业资讯

android studio升级,Android Studio 升级之旅相关推荐

  1. 升级Android Studio 导致的 `Error:Failed to notify project evaluation listener.`解决办法

    最近升级Android Studio和sdk后, gradle同步项目时忽然报错, Error:Failed to notify project evaluation listener.截图如下, 更 ...

  2. Android 开发--利用android studio 制作简单文字打怪升级游戏(伪地牢类)1.开始

    本人目前是大三考研党,之前有学过一些杂七杂八的知识,但是没有办法利用这些知识制作一些真正有用的东西出来.后来自学了android开发,学会使用了android studio,终于决定利用android ...

  3. 升级Android Studio到最新版本,升级Gradle到最新,迁移Androidx之路。

    随着Android手机的发展,Android系统版本的不断更新,迁移Androidx成了绕不开的步骤.如果是新项目,那 一切好说,但如果是老项目,坑死人不偿命(尤其是中途接手别人的项目的开发). 我是 ...

  4. Android Studio 2.1.2 升级到 2.2之后,gradle 编译版本更新为2.2.0,databinding报错

    2019独角兽企业重金招聘Python工程师标准>>> Gradle sync failed: Could not find com.android.databinding:libr ...

  5. 从Android studio 2.3.3 升级到 3.1.3最新版本 导入旧项目遇到的诸多错误,终极解决办法!!

    如果上天再给我一次机会,我不会将旧项目导入到最新的studio版本.萨瓦迪卡,欢迎大家来到我们美丽的泰国.我们的东西很好吃. 如果你是跟我一样升级完studio版本直接导入的旧项目,连gradle版本 ...

  6. Eclipse android 项目转android studio填坑之旅

    以前公司的老项目,是使用eclipse进行开发的,虽然android studio出来了很久,但为了避免迁移会有一些问题,一直忍着没改,但最近谷歌公司上架有要求,要求android的项目要用andro ...

  7. android sdk v28,Android Studio Gradle Build失败 – 要求提供不存在的sdk版本

    24小时前我的项目完美构建,没有错误.在不更改单个代码的情况下,当我恢复工作时,它将不再构建. 签出旧的工作提交现在会产生相同的错误. 这些是我得到的错误代码: Information:Gradle ...

  8. 升级Android SDK (API24)笔记

    升级Android SDK (API24)笔记 这几天闲着没事,突发奇想地要升级一下电脑中的安卓编程环境. 之前安装的是eclipse环境下的android 4.2.2(18版本),还是几年前我一个读 ...

  9. 启动AndroidStudio报错Missing essential plugin:org.jetbrains.android Please reinstall Android Studio...

    问题 今天升级Android Studio 后,打算重新启动,却发现启动报错如下: Missing essential plugin: org.jetbrains.android Please rei ...

最新文章

  1. 台式电脑计算机无法启动 启动修复,Win10启动修复无法修复你的电脑解决方法
  2. Uva592 Island of Logic
  3. TaskExecutor设计与实现
  4. python学习笔记(一)——操作符和运算变量
  5. jquery ajax异步调用
  6. CAN总线数据帧/标准帧/扩展帧/远程帧/错误帧的组成格式对比
  7. halcon/c++接口基础 之 析构函数和Halcon算子
  8. P1768-天路【负环,SPFA,01分数规划,二分答案】
  9. 区分内边距与外边距padding和margin
  10. Android编译系统简要介绍和学习计划
  11. 视频数据训练太慢?试试UT-AustinFAIR提出的多重网格训练,加速4.5倍,还能提点!...
  12. linux c的内存映像
  13. “macOS Catalina下TeXstudio内置PDF阅读器无法正常显示中文”的解决办法
  14. wpf之默认窗口模板研究
  15. CDN技术详解之系统架构
  16. 计算机相关期刊阅读,计算机核心期刊.doc
  17. 校长办公室管理系统c语言,【锦城故事】学软硬结合理论做智慧超群系统是锦城电子的必经之路...
  18. Package.json文件配置
  19. Python给excel加密(linux可用版)
  20. math.h里的数学计算公式介绍

热门文章

  1. 程序员如何准备好一次面试
  2. 常用损失函数(一):Focal Loss
  3. 消息框:服务器正在运行中 OLE解决办法
  4. 当在Android studio中R文件报红时
  5. activiti动态办理人_Activiti动态设置办理人扩展
  6. wegame每次登陆都要滑动验证_wegame一直在验证账号密码【解决方法】
  7. 天地劫pc版不显示服务器,天地劫幽城再临pc怎么全屏 PC端和手机端是否互通
  8. python飞船小游戏
  9. 金蝶EAS·BOS 如何修改解决方案(工程)名称 、工作空间路径
  10. pymysql.err.OperationalError: (1507, ‘Error in list of partitions to DROP‘)