Android Studio 编译、同步慢的解决方法

1 问题
(1) 当项目中引用的第三方模块太多,打开Android Studio的时候就会非常慢,提示一直在解决模块依赖,点击sync按钮同步第三方代码的时候也是巨慢,慢的原因是:
在gradle中引用第三方模块时采用maven方式依赖,每次打开Android Studio或者点击sync按钮时,都会去maven中央仓库去取第三方的库文件,一般是jar或者aar文件
如果本地没有该文件,则下载回来,由于通过网络访问Android Studio默认的maven中央仓库jcenter很慢,因此就导致同步会非常耗时,尤其是第一次同步,或者clean后重新build的时候,一般都会在十分钟左右,
即使库文件已经下载到本地了,也会去访问maven仓库的,因此当过多的通过maven方式依赖第三方库的时候Android Studio就会非常慢

(2) Android Studio为什么编译很慢?
Android Studio在编译的时候,如果没有同步第三方代码,或者任何一个gradle文件发生变化后,没有去同步,那么点击运行按钮会自动先同步,也就是先同步后编译,平时我们感觉编译慢的原因主要是同步代码太慢,真正同步完成后编译其实是很快的

2 maven依赖是啥?
svn用来管理文本文件,但它不擅长管理二进制文件,这个时候maven就登场了,简单点说,maven就是管理二进制文件的svn,这样说应该可以理解了吧。一般我们使用别人的库需要下载jar文件然后依赖到我们的工程,现在作者将jar文件发布到公共的maven仓库中,在gradle中我们只需要简单的像下面这样:
dependencies { //使用square开源的网络访问框架okhttp compile 'com.squareup.okhttp:okhttp:2.5.0'}
1
2
3
4

同步代码时,Android Studio就会自动去下载作者发布的jar(或者aar)文件,如果作者发布了新的版本,则只需要简单的修改一下后面的版本号即可,不要这个库,直接删掉这行代码即可,是不是瞬间觉得相当方便啊 在web开发中,只需要使用maven插件就能实现同样功能,只是依赖的写法不同。这就是解决不同模块不同版本依赖的方法—maven大法。 然而由于我们访问国外的服务器太慢,这么先进的生产工具就成了鸡肋,这是造成Android Studio卡、慢的根源
3 解决方法
方法一:
(1) 当第一次同步代码后,第三方库都下载到本地了,将gradle设置为offline模式,这样下次就不必访问网络了,这样同步速度从几分钟缩短到几秒钟,但缺点是一旦引入新的maven依赖,本地不存在这个库文件,还是得去访问网络,同样同步慢

方法二:
(2) 自己搭建maven仓库,将常用的第三方库放在自己搭建的maven服务器上,这样访问内部的maven服务器就快多了,又方便分模块开发和打包,但这样对服务器的管理麻烦,技术含量高,比较适合需要分模块开发的大型项目,而且当多个模块开发不同步,需要对模块分版本进行依赖、打包、发布的时候,必须采用这种方式,例如:模块A已经开发完毕,模块B正在开发,但这个时候要发版本了,怎么办呢?解决办法就是依赖模块B的上个版本,也就是上个版本的aar文件

方法三:
(3) 将第三方库下载到本地,然后将代码复制到自己的项目中,这种方法是在代码级别上直接使用别人的代码,优点是再也不用依赖别人的库,项目模块少,库与自己项目融为一体,缺点是复制的时候太辛苦了,不仅要复制代码文件,还要复制资源文件,容易出错,另外耦合比较严重,删除这个库的时候也非常麻烦,同时别人的代码也破坏了自己的代码风格和命名规范

方法四:
(4) 推荐的方法是:尽量使用第三方库的jar、aar文件导入自己的项目,或者将第三方库下载到本地,然后当做一个本地模块导入自己的项目,不要再使用gradle中的maven依赖了
这样就不用苦逼的去复制代码,删除的时候也很方便,只需删除模块即可,实现模块即插即用,缺点是会导致项目的模块太多,不美观,以及很多eclipse写的库导入Android Studio后还要自己修改才能编译通过,很多库是Android工程,不是标准意义的Android library,
好在现在很多有名的库都专门提供了library,直接导入即可,还有Android Studio已经可以直接将eclipse工程当做一个module导入了,所以这种方法还是很简单的
这种方法也就是以前eclipse使用第三方库的方法

4 直接引用aar文件的方法
Android Studio卡的主要原因是gradle去下载maven仓库中的库文件时速度太慢,那么我们直接去maven仓库将第三方库文件下载回来,引用到项目中就可以解决问题了。然而Github上很多项目只给出了maven依赖的使用方法,压根没有给出jar或aar文件的地址,我们以Android上比较有名的facebook的图片加载框架fresco为例:
https://github.com/facebook/fresco

在fresco的Github主页上只给出了下面这种使用方法:
compile 'com.facebook.fresco:fresco:0.9.0+'
1

怎么办呢?难道只能使用maven依赖去慢慢下载吗?如果你搭建过maven服务器或者发布过自己写的框架,你就知道,其实我们最终使用的还是别人打包好的jar或aar文件,上面这行字符串只不过是指向这个aar文件而已,最终gradle还是要把aar文件下载回来,那么问题来了,这个文件究竟在哪儿呢?下面我们就找出这个文件: (1) 百度”maven”仓库

这里写图片描述

选择第一个,我们就进入了maven中央仓库,也就是下面的网址
maven中央仓库:http://mvnrepository.com/

(2) 搜索fresco,一般关键字就是库的名称啦


这里写图片描述

对比一下maven依赖字符串com.facebook.fresco,所以选择第一个


这里写图片描述

可以看到有很多版本,你会发现上面的maven字符串后面的版本号是不是和这里的版本号吻合了,其实maven依赖字符串就是告诉gradle怎么去找这个库文件。点击红色框中最新版本0.9.0
在写这篇文章的时候,最新版是0.9.0,后来这个网站改版了,aar文件下载方法有点变化,所以我更新了下面这一段,这个时候版本已经到0.11.0了,后面的版本请你自己灵活的变通一下,下面我们来下载aar文件
这里写图片描述

点进去之后会发现有很多文件,解释一下,后缀为xxxx-javadoc.jar的文件是帮助文档,xxxx-sources.jar的文件是源码,这两个都不是我们需要的,我们需要的是单纯的xxx.jar文件,或者xxx.aar文件,如图:


这里写图片描述

好了,找到啦,直接点击fresco-0.11.0.aar就可以下载了,其实maven依赖字符串就是告诉gradle怎么去找到这个aar文件 那么怎么使用aar文件呢?
(3) 使用aar文件 aar文件和jar文件不同,jar文件只包含类文件,aar文件不仅包含类文件,好包含资源文件,例如:图片,布局文件等。aar文件使用方法如下。 在app的build.gradle文件中加入如下代码:
//本地仓库,用于引用aar文件repositories { flatDir { dirs 'libs' }}dependencies { //facebook的图片加载框架fresco compile(name: 'fresco-0.9.0', ext: 'aar') }
1
2
3
4
5

6
7
8
9
10
11

(4) 点击sync按钮同步代码,如果还是找不到库中的类,那么点击运行按钮,即使运行不起来,只要运行一次就可以找到我们引入的库中的类了。
(5) 好了,到这里就学会了跳过maven依赖,直接使用aar文件的方法,是不是很简单呢。搞清楚了原理,gradle的maven依赖其实也就那么回事,用不好反而成了鸡肋
5 其他一些注意事项
(1) 尽量删除不用的module,因为每次sync的时候会去同步所有的gradle文件,即使我们的主工程不使用它也会去同步,sync是全局的
(2) 自己下载gradle到本地,然后在Android Studio指定gradle的位置,避免第一次创建项目时去下载gradle,那也是巨慢的一个过程
(3) 减少同步代码的次数,也就是没事别点sync按钮,每次同步代码都是非常消耗资源的过程,次数多了也就卡了
6 总结
(1) 网上说的有关解决Android Studio卡顿的方法,诸如:给gradle开启专门的守护线程,增大Android Studio的内存,开启gradle离线模式等,经过实践证明,并没有什么卵用,因为他们并没有找到Android Studio卡的真正原因是gradle同步代码时网速太慢
7 说明
博主写这篇文章,主要是因为之前在做项目时,使用了十几个maven依赖的第三方库,结果每次打开Android Studio或者点击sync按钮同步代码时都要超过十分钟时间,十分钟那是必须滴,同步一次都可以喝杯咖啡了,实在忍无可忍了,遂百度解决方法,然而发现网上那些方法并没有什么卵用,于是自己摸索出了解决方法,将所有引入的第三方库全部改为引用aar文件或者jar文件,不再使用maven依赖,哈,瞬间就快了
经过博主实践,使用这种方法,同步代码从原来的十多分钟缩短到了一分钟之内,遂著此文以记之

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容