序言:作为这个世界上走在最前沿的生物“猿”,怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3.0正式版也发布了,作为Android开发的猿们我们应该早就知道谷歌在今年5月的开发者大会上就说了要支持Kotlin语言,所以这次更新一个比较大的点就在于支持Kotlin语言了,下面就跟着LZ的脚步来探索一下AS3.0吧
相信很多人很早就体验过谷歌爸爸放出来的体验版本了,虽然说正式版已经出了,但是很多人也不敢轻易贸然的更新,因为怕会掉进坑里出不来(真是一只胆小的猿,鉴定完毕)
安装
如果你从Android Studio内部点击更新的话,会跳转到Android的官网,没有梯子的同学可以去这个网站下载更新:

安装过程中遇到的问题
1、Gradle Sync failed:
`<span class="typ">Gradle</span><span class="pln"> sync failed</span><span class="pun">:</span> <span class="typ">Cause</span><span class="pun">:</span><span class="pln"> com</span><span class="pun">.</span><span class="pln">android</span><span class="pun">.</span><span class="pln">build</span><span class="pun">.</span><span class="pln">gradle</span><span class="pun">.</span><span class="pln">api</span><span class="pun">.</span><span class="typ">BaseVariant</span><span class="pun">.</span><span class="pln">getOutputs</span><span class="pun">()</span><span class="typ">Ljava</span><span class="pun">/</span><span class="pln">util</span><span class="pun">/</span><span class="typ">List</span><span class="pun">;</span> <span class="typ">Consult</span><span class="pln"> IDE log </span><span class="kwd">for</span><span class="pln"> more details </span><span class="pun">(</span><span class="typ">Help</span> <span class="pun">|</span> <span class="typ">Show</span> <span class="typ">Log</span><span class="pun">)</span> <span class="pun">(</span><span class="lit">8s</span> <span class="lit">123ms</span><span class="pun">)</span> `
其实一开始不是这个错,最开始是一个redownload的一个错,后来LZ把2.3版本的给删了,缓存给清除了,然后就变成这个错了。既然有错,那就解决呗,顺手百度了一个,下面看看stackoverflow的解决方案

这个方法确实也适用于我,把ButterKnife降级之后就OK了。如果有其他更好的解决方法,欢迎私信我,有偿给发红包。“一个问题的解决是为了更好的迎接下一个问题的出现”——鲁迅
解决方案:把项目中依赖的ButterKnife降级到8.4.0
2、Unable to resolve dependency for:

第一眼看这个错的时候我以为我setting.gradle中没有依赖appCommon,看完之后明明确实依赖了,而且这是一个老项目,在AS2.3版本的时候很正常,然后我就知道这又是一个坑,无奈的又去上了一把Internet,然后试过网上说的在buildTypes中加入preview节点,然而并没有什么卵用,查了半天还是没有找到解决的方法,后来看着这段报错信息的时候,我看到了signingConfigs,我想到gradle中好像有这么个节点,抱着试一试的态度我删了那个节点,然后,卧槽卧槽卧槽,可以成功编译了,这是不是有一种躺着过坑的赶脚。如果有其他更好的解决方法,欢迎私信我,有偿给发红包
解决方案:把项目中的signingConfigs节点删除掉就好了,如果你担心多渠道打包的事情,那么就用打包工具吧。
以下是群里的朋友遇到的一些问题:
3、app:transformDexArchiveWithExterLibsDexMergeForDebug

解决方案:将电脑中的
.gradle目录删除掉(清除掉gradle缓存)重新build。
4、gradle打包,自定义apk名称代码报错(Cannot set the value of read-only property ‘outputFile’ )
Open File</a> " data-snippet-id="ext.5f35c05816ba13a2bcef2a84fccc9aad" data-snippet-saved="false" data-codota-status="done">`<span class="typ">Error</span><span class="pun">:(</span><span class="lit">56</span><span class="pun">,</span> <span class="lit">0</span><span class="pun">)</span> <span class="typ">Cannot</span> <span class="kwd">set</span><span class="pln"> the value of read</span><span class="pun">-</span><span class="pln">only property </span><span class="str">'outputFile'</span> <span class="kwd">for</span> <span class="typ">ApkVariantOutputImpl_Decorated</span><span class="pun">{</span><span class="pln">apkData</span><span class="pun">=</span><span class="typ">Main</span><span class="pun">{</span><span class="pln">type</span><span class="pun">=</span><span class="pln">MAIN</span><span class="pun">,</span><span class="pln"> fullName</span><span class="pun">=</span><span class="pln">debug</span><span class="pun">,</span><span class="pln"> filters</span><span class="pun">=[]}}</span><span class="pln"> of type com</span><span class="pun">.</span><span class="pln">android</span><span class="pun">.</span><span class="pln">build</span><span class="pun">.</span><span class="pln">gradle</span><span class="pun">.</span><span class="kwd">internal</span><span class="pun">.</span><span class="pln">api</span><span class="pun">.</span><span class="typ">ApkVariantOutputImpl</span><span class="pun">.</span> <span class="pun"><</span><span class="pln">a href</span><span class="pun">=</span><span class="str">"openFile:D:/eclipseCode/ipay-android/xinlebao/build.gradle"</span><span class="pun">></span><span class="typ">Open</span> <span class="typ">File</span><span class="pun"></</span><span class="pln">a</span><span class="pun">></span> `
解决方案:修改文件名代码请这样写
variant.outputs.all { outputFileName = "xinlebao_${defaultConfig.versionName}_${releaseTime()}.apk" } } " data-snippet-id="ext.4cdcb6d6fc814947273a83f1d4c2ec5e" data-snippet-saved="false" data-codota-status="done">`<span class="pln">android</span><span class="pun">.</span><span class="pln">applicationVariants</span><span class="pun">.</span><span class="pln">all </span><span class="pun">{</span><span class="pln"> variant </span><span class="pun">-></span><span class="pln"> variant</span><span class="pun">.</span><span class="pln">outputs</span><span class="pun">.</span><span class="pln">all </span><span class="pun">{</span><span class="pln"> outputFileName </span><span class="pun">=</span> <span class="str">"xinlebao_<span class="katex math inline">{defaultConfig.versionName}_</span>{releaseTime()}.apk"</span> <span class="pun">}</span> <span class="pun">}</span> `
5、AAPT2 编译报错 AAPT2 error
`<span class="typ">Error</span><span class="pun">:</span><span class="pln">java</span><span class="pun">.</span><span class="pln">util</span><span class="pun">.</span><span class="pln">concurrent</span><span class="pun">.</span><span class="typ">ExecutionException</span><span class="pun">:</span><span class="pln"> com</span><span class="pun">.</span><span class="pln">android</span><span class="pun">.</span><span class="pln">tools</span><span class="pun">.</span><span class="pln">aapt2</span><span class="pun">.</span><span class="typ">Aapt2Exception</span><span class="pun">:</span><span class="pln"> AAPT2 error</span><span class="pun">:</span><span class="pln"> check logs </span><span class="kwd">for</span><span class="pln"> details </span>`
解决方案:在gradle.properties中关闭APPT2 编译
`<span class="pln">android</span><span class="pun">.</span><span class="pln">enableAapt2</span><span class="pun">=</span><span class="kwd">false</span> `
注:如果是eclipse转到as上的项目,可能没有gradle.properties文件,请在项目根目录中手动创建
6、apt插件问题(Error:Cannot choose between the following configurations of project :mylibrary:)
`<span class="typ">Error</span><span class="pun">:</span><span class="typ">Cannot</span><span class="pln"> choose between the following configurations of project </span><span class="pun">:</span><span class="pln">mylibrary</span><span class="pun">:</span> <span class="pun">-</span><span class="pln"> debugApiElements </span><span class="pun">-</span><span class="pln"> debugRuntimeElements </span><span class="pun">-</span><span class="pln"> releaseApiElements </span><span class="pun">-</span><span class="pln"> releaseRuntimeElements </span><span class="typ">All</span><span class="pln"> of them match the consumer attributes</span><span class="pun">:</span> `
解决方案:如下
`<span class="com">//1.在project的build.gradle中删除 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //2.在module的build.gradle中删除 apply plugin: 'android-apt' //3.将module的build.gradle文件中的dependency apt 'com.jakewharton:butterknife-compiler:8.1.0' //改为 annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0' </span>`
好了,以上就是最近更新3.0所遇到的一些问题,如果你还遇到其他的问题,欢迎私信我。
Android Studio 3.0
1、.gradle文件
哇塞,问题解决之后就想着赶紧创建一个新的项目来看看有啥变化,首先一个变化比较大的是.gradle文件:

我们可以看到,谷歌爸爸把buildToolsVersion构建工具的版本给“干掉了”,在以前的版本中,buildToolsVersion也会给项目的构建带来很多错,现在谷歌爸爸把它给“干掉了”;还有就是下面的依赖换成了implementation,那么它和compile有什么区别呢?别着急,喝杯茶听我细细道来:
compile和api
api完全等同于compile,二者没有区别。我们大家都知道,随着Android版本的更新,有很多过时的类和方法,compile亦是如此,我们可以把compile理解成api的过去式。
api和implementation
这两个是AS3.0版本中新增的指令,下面用一张图来说明一啊两者的区别:

有想详细了解的同学,请参考官方的
2、支持Kotlin
还在初学Kotlin语言的同学有福了,AS3.0支持将Java代码直接转成Kotlin代码,下面我们通过一段VCR来认识一下这个功能:

在java文件中,选中你要转换的代码,然后在顶部选择Code——>Convert Java File to Kotlin File进行转换就好了,转换之后,这就是一个Kotlin文件了。
3、logcat栏
在AS上几个版本中,在Logcat还是Android Monitor的时候,里面有很多东西,网络啊,内存啊,CPU啊什么的,AS3.0中,谷歌将其分开了,Logcat就单独放出来了,之前那个看网络,内存,CPU的单独拎出来了,一个叫Android Profiler的东西:

是不是很帅,据说这玩意儿还自带抓包功能哦(这是LZ最喜欢的一个功能)。只不过默认是关闭的,我们要手动把它开起来。进入Run——>Edit Configurations,然后把下面这个钩上就好了:

需要注意的是,你项目中的API版本得是API26以下,而且你的手机版本得是Android5.0以上才能使用抓包功能。开启之后,我们来抓个包试试吧:

在手机上发起一次网络请求,NETWORK那一栏会发生明显的变化,我们选择那个区域进行抓包,可以看到请求了一个接口MainServlet(如果该区域下会请求多个接口,则会一一列出来),然后我们点击MainServlet,就会出现后台传过来的Json,Header之类的信息,怎么样,是不是很屌,以后再也不用再麻烦测试帮你抓包了,也不用再装什么其他软件了。CPU和MEMORY也一样,都具有记录当前页面的数据,你也可以根据它所记录的数据进行相应的分析。这两个就不展示了,有兴趣的同学可以更新之后自己玩玩。最后需要注意的是开启这个之后会降低应用程序的构建速度,因此只有在你要开始对应用程序进行概要分析时,再启用它。
4、文件管理器
AS3.0中,文件管理器工具允许和你的AS连接的手机无缝交互,你可以在AS3.0上查看,复制并删除设备上的文件。当检查由应用程序创建的文件或是要讲文件传输到设备时,非常有用:
`<span class="pln">data</span><span class="pun">/</span><span class="pln">data</span><span class="pun">/</span><span class="pln">app_name</span><span class="pun">/</span> <span class="pun">包含存储在内部存储上的应用程序的数据文件</span><span class="pln"> sdcard</span><span class="pun">/</span> <span class="pun">包含存储在外部用户存储上的用户文件</span> <span class="pun">(图片等)</span> `

5、支持Java8
同样,喜欢写lambda的同学也有福利了,这次AS的改版支持了Java8,可以直接将Java代码格式成lambda格式的,但是你得给你的项目设置成支持Java8,右键你的module,选择open Module Settings,进去之后按照如下设置就可以了:

这样你就能使用lambda表达式了,系统会自动提醒你哪里可以转换成lambda表达式,是不是好智能:

参考
http://blog.csdn.net/soslinken/article/details/73114637
http://blog.csdn.net/niubitianping/article/details/72600923
http://www.jianshu.com/p/9af06314e036
转自:http://www.shellsec.com/news/49488.html
💬 评论