上周四,Google 终于在经历大半年的打磨锤炼以后正式发布 Android Studio 3.0 版本,给广大安卓开发人员一份满意的答卷。如往常同样,每次新版开发工具的发布,不少谨慎点的朋友仍担忧稳定性、是否存在坑等问题,选择隔岸观火,等一段时间再更新升级。android
通过查看官网对新版开发工具的新功能介绍以后,当天我就选择了升级。事实上,我也的确折腾良久,可是截至目前,没有发现所谓的坑。只是须要对旧的工程作一些配置上的调整而已。各方面响应速度和新功能的使用,整体仍是以为值得升级。这篇文章,就来介绍新版开发工具给咱们带来哪些实用的改变,并以实际操做经验告诉你们,旧工程的配置须要如何作兼容修改。备注:上周作的福利活动,还有时间参与,传送门请点击 送书和免费加入小密圈,感谢一路有你陪我走过两周年。程序员
Kotlin Support网络
在 Android Studio 3.0 以前,使用 Kotlin 语言开发安卓应用,须要额外配置 Kotlin 插件。而新版本内置默认支持 Kotlin 语言,来减小咱们在配置上的工做。app
选择工具栏 Code ——》 Convert Java File To Kotlin File,或者使用快捷键的形式,你能够一键实现 Java 文件到 Kotlin 文件的转换。ide
备注:关于快捷键的使用,你可使用 Command + Shift + A 这组快捷键打开 Find Action 窗口,输入关键字寻找对应功能及其快捷键,效果就像上面 Gif 图展现的这样。工具
Java 8 Support性能
3.0 对 Java 8 语言特性的默认支持使你不用在 build.gradle 配置文件中添加 jackOptions 一项。若是你有使用到的话,记得删除:开发工具
android { ... defaultConfig { ... // Remove this block. jackOptions { enabled true ... } } }
选择工具栏 File ——》Project Structure,修改 Source Compatibility 和 Target Compatibility 选项到 1.8 便可使咱们的项目支持 Java 8 语言特性。测试
Android Profilergradle
过去咱们使用的 Android Monitor 工具从 3.0 版本开始被 Android Profiler 替代掉了。如图,run 按钮一栏多了一个 Android Profiler 按钮:
Android Profiler 提供有 CPU、Memory 和 Network 三大调试分析利器,实时跟踪 Apk 的运行状态,能够帮助咱们可视化地作一些性能调优工做。
这三个工具在开发阶段很是实用,好比 CPU Profiler 可以分析应用中的线程使用状况,Memory Profiler 可以检测出内存泄漏,Network Profiler 可以拦截网络请求实现抓包功能等。这里列举一些使用图片,简单预览一下这三大工具的风采:
有关这几个工具的详细使用细节,能够参考官方的介绍:
CPU Profiler guide
Memory Profiler guide
Network Profiler guide
Device File Explorer
这个功能厉害了。新版开发工具带来的资源管理器容许咱们访问链接设备的文件系统,实现 PC 端到手机或模拟器端的便捷文件传输。有了这个工具,今后就能够告别以前使用的「文件传输助手」等第三方工具啦。
Adaptive Icons wizard
选择 File -> New -> Image Asset,利用 Android Studio 提供的工具建立图片资源一直以来也是开发利器之一。如今,这个工具开始支持vector drawables 格式,而且可以建立用于适配 Android 8.0 系统上各类形状的桌面图标。
URL intent-filter validator
这个功能也蛮贴心的。Manifest 清单文件开始支持一个特殊的标签,用于测试给定的 Url 字符串是否符合 intent-filter 标签内容所定义的规则。举个例子:
如图,这里使用 data 标签订义一个 Url 规则,并使用 tools:validation 标签验证一个错误的测试 Url 地址,检测器可以自动识别并给出错误提示。这个例子很简单,肉眼一眼就能看出错误。那若是是比较复杂的规则呢,可能就不那么容易看得出来。这个时候,这个工具就能够派上用场啦。
APK Analyzer
3.0 版本对 APK Analyzer 的功能作了进一步强化。主要在于:对于使用 ProGuard 混淆过的 APK 文件,咱们可以上传 mapping.txt 文件进行代码还原;Dex 文件提供显示各个包目录的大小;等等。
其余功能
除了上面介绍的这些变化,还有一些其余大大小小的变动。好比 Layout Inspector 和 Layout Editor 工具在 UI 上有所调整,好比 App Links Assistant 和 Firebase App Indexing Assistant 的强化使用,这些留着你们本身去探索发现吧。也能够访问 Android Studio Release Notes 官网,了解 3.0 版本的更多发布细节。
Android Studio 3.0 发布的同时,Android Plugin for Gradle 3.0.0 也同时发布。编译速度总体都获得了大幅提高。升级完 Android Studio 以后,旧的工程须要作出部分改变,才能经过 Gradle 的编译。这里根据个人一个实际项目,介绍一下须要改变的内容。固然,也许你的项目用不上这些,也可能不止这些。
distributionUrl
Plugin 3.0.0+ 须要配置 Gradle 的最小版本是 4.1,咱们能够经过 File -> Project Structure -> Project 的方式设置 Android Plugin 的版本,或者修改 gradle.properties 文件的内容,添加 distributionUrl 属性:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
Google's Maven repository
新版 Android Studio 工具默认使用 Google’s Maven Repository 用于下载依赖 Android Support Library,替代了 Android SDK Manager 的本地依赖方式。因此,须要在工程根目录下的 build.gradle 文件中添加 google() 一行代码:
allprojects { repositories { google() } }
buildToolsVersion
Android Plugin For Gradle 3.0.0 默认自动添加插件所须要用到的最小版本的编译工具。因此,咱们不须要再手动在 build.gradle 添加一行 buildToolsVersion 属性的代码。对于旧的项目,能够去掉这行配置,好比:
android { compileSdkVersion 26 // remote buildToolsVersion buildToolsVersion "25.0.2" ... }
each() 和 outputFile()
Plugin 3.0.0 版本移除了一些用于编译配置的 API,其中比较常见的就是 each() 和 outputFile(),两个经常使用于修改输出 Apk 文件名和路径的方法。
在以前的文章 Android Gradle 经常使用使用场景实现方式的总结 中有提到,自定义输出 APK 文件名能够这样作:
android { android.applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File(output.outputFile.parent, rootProject.getName() + "-" + buildType.name + "-" + releaseTime() + "-v" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk"); } } }
可是使用 Plugin 3.0.0 时就会出现编译报错,咱们须要修改 each() 和 outputFile() 方法为 all() 和 outputFileName,好比:
android { android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = rootProject.getName() + "-" + buildType.name + "-" + releaseTime() + "-v" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk"; } } }
对于旧的工程,基本上即是这些配置上的适配修改。若是你还遇到了别的问题,别紧张,按照编译错误提示一步步操做,也能成功经过编译。整体来讲,此次 Android Studio 3.0 和 Plugin For Gradle 3.0.0 的发布仍是很是值得升级尝试的,并无网上说的那么多坑。况且,咱们做为写代码的程序员,原本不就是为了解决问题而来嘛。