Android Studio 3.0 新功能解析和旧项目适配

上周四,Google 终于在经历大半年的打磨锤炼以后正式发布 Android Studio 3.0 版本,给广大安卓开发人员一份满意的答卷。如往常同样,每次新版开发工具的发布,不少谨慎点的朋友仍担忧稳定性、是否存在坑等问题,选择隔岸观火,等一段时间再更新升级。android

通过查看官网对新版开发工具的新功能介绍以后,当天我就选择了升级。事实上,我也的确折腾良久,可是截至目前,没有发现所谓的坑。只是须要对旧的工程作一些配置上的调整而已。各方面响应速度和新功能的使用,整体仍是以为值得升级。这篇文章,就来介绍新版开发工具给咱们带来哪些实用的改变,并以实际操做经验告诉你们,旧工程的配置须要如何作兼容修改。备注:上周作的福利活动,还有时间参与,传送门请点击 送书和免费加入小密圈,感谢一路有你陪我走过两周年程序员

3.0 带来的改变

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 的发布仍是很是值得升级尝试的,并无网上说的那么多坑。况且,咱们做为写代码的程序员,原本不就是为了解决问题而来嘛。

相关文章
相关标签/搜索