2017年10月份Android Studio 3.0.0发布了最新版本,让我们看下他有那些新的功能。升级到此版本后踩的坑。
1.支持的语言
1.1.Java 8语言功能支持
现在可以使用某些Java 8语言功能并使用Java 8构建的库。不再需要 Jack。应该首先 禁用Jack 以使用内置的支持Java 8的默认工具链。
要更新项目以支持新的Java 8语言工具链,请将 Project Structure对话框中的 Source Compatibility 和 Target Compatibility 更新为1.8 (单击 File > Project Structure)。
java8
1.2 Kotlin支持
如Google I / O 2017所宣布,Kotlin编程语言现已在Android上正式受到支持。所以在这个版本中,Android Studio包含Kotlin语言支持Android开发。
通过将Java文件转换为Kotlin(点击 Code > Convert Java File to Kotlin File),或者使用新建项目向导创建一个新的启用Kotlin的项目,可以将Kotlin整合到项目中。
kotlin
2.自动化构建工具
使用Gradle 3.0.0的Android插件
Gradle的新Android插件 包括各种改进和新功能,但它主要提高了具有大量模块的项目的构建性能(估计对组件化项目比较友好)。当使用这个新插件用于大型项目时,您应该体验以下内容:
- 由于使用了新的延迟依赖性解决方案,使得 Gradle 拥有更快的构建配置时间;
- 只针对您正在构建的项目和变体 进行 Variant-aware 依赖解析;
- 对代码或资源应用简单的更改时,会拥有更快的增量构建时间;
- 注意:这些改进需要重大的改进,从而破坏了插件的一些行为、DSL和API。升级到 3.0.0 版本可能需要更 改您的构建文件和Gradle插件。
3.分析工具
新的Android Profiler 取代了Android监视器工具,并提供了一套新的工具来实时测量应用程序的CPU,内存和网络使用情况。您可以执行基于样本的方法跟踪来执行代码,捕获堆内存,查看内存分配以及检查网络传输文件的详细信息。
要打开,请单击 View > Tool Windows > Android Profile (或单击工具栏中的 Android Profiler )。
窗口顶部的事件时间轴显示触摸事件,按键和活动更改,因此您有更多的上下文可以了解时间轴中的其他性能事件。
分析工具
3.1 CPU Profiler
CPU Profiler可帮助您通过触发示例或仪表化的CPU跟踪,来分析应用程序的CPU线程使用情况。然后,您可以使用各种数据视图和过滤器来解决CPU性能问题。
CPU profiler3.2 Memory Profiler
Memory Profiler 可以帮助您 识别 内存泄漏和内存流失 导致的卡顿、冻结甚至应用程序崩溃。它显示了应用程序内存使用的实时图形,可以捕获 a heap dump,强制垃圾收集和跟踪内存分配。
Memory Profiler
3.3 Network Profiler
网络分析器允许您监视应用程序的网络活动,检查每个网络请求的有效负载,并链接到生成网络请求的代码。
Network Profiler3.4 APK剖析和调试工具
Android Studio现在允许您对任何 APK 进行配置和调试,而无需将其从Android Studio项目中构建 - 只要构建APK 即可启用调试,并且您可以访问调试符号和源文件。
要开始使用,请从Android Studio Welcome屏幕中单击 Profile or debug APK。或者,如果您已经打开了项目,请从菜单栏中单击 File > Profile or debug APK。这将显示已解压缩的APK文件,但它不会反编译代码。因此,要正确添加断点和查看堆栈跟踪,您需要附加Java源文件和本机调试符号。
APK分析 APK包分析3.5 设备文件浏览器
新的设备文件资源管理器允许您检查连接的设备的文件系统,并在设备和计算机之间传输文件。这将替代DDMS中可用的文件系统工具。
要打开,请单击 View > Tool Windows > Device File Explorer。
设备文件4.资源方面
4.1 自适应图标向导
Image Asset Studio现在支持绘制矢量图,并允许您为Android 8.0创建自适应启动器图标,同时为旧设备创建传统图标(“旧”图标)。
要开始,请右键单击项目中的res文件夹,然后单击 New > Image Asset。在 Asset Studio 窗口中,选择启动器图标(自适应和旧版)作为图标类型。
自适应图标注意:您必须设置compileSdkVersion为26或更高才能使用自适应启动器图标。
4.2 支持字体资源
为了支持Android 8.0中的新字体资源,Android Studio包含一个字体资源选择器,用于将 字体 绑定 到应用程序中或配置项目以下载设备上的字体(如果可用)。布局编辑器还可以预览布局中的字体。
要尝试下载字体,请确保您的设备或模拟器正在运行Google Play Services v11.2.63或更高版本
支持字体资源4.3布局编辑器
在布局编辑器已经更新了一些增强功能,包括以下内容:
- 新的工具栏布局和图标。
- 在组件树中更新布局。
- 改进的拖拽 视图插入。
- 在编辑器下面显示新的错误面板,显示修复建议的所有问题(如果可用)。
- 使用 ConstraintLayout 构建的各种UI增强功能 ,包括以下内容:
- 新支持 创建 分界线(栅栏)。
- 新支持创建组:在工具栏中,选择 Guidelines > Add Group (需要ConstraintLayout 1.1.0 beta 2 或更高版本)
创建链接的新UI:选择多个视图,然后右键单击并选择 Chain。
布局编辑器
4.4布局检查器
该布局检查包括增强您的应用布局,以使其更容易调试问题,包括分组属性分为普通类和两个新的搜索功能,查看 View Tree 和 Properties 窗格。
image
5.更新到android studio3.0.0坑
5.1 annotationProcessor
Warning:android-apt plugin is incompatible with future version of Android Gradle plugin. Please use ‘annotationProcessor' configuration instead.
把apt改成annotationProcessor
//apt ‘com.jakewharton:butterknife-compiler:8.5.1'
annotationProcessor ‘com.jakewharton:butterknife-compiler:8.5.1'
5.2 AAPT2
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:processDebugResources'.
原因:现在使用的是APPT2为默认
关掉AAPT2即可,在Project/gradle.properties中添加 android.enableAapt2=false
5.3 gradle打包,自定义apk名称代码报错(Cannot set the value of read-only property 'outputFile' )
解决方案:修改文件名代码请这样写
android.applicationVariants.all {variant ->
variant.outputs.all {
outputFileName = "xinlebao_${defaultConfig.versionName}_${releaseTime()}.apk"
}
}
5.4 .gradle文件
gradle们可以看到,谷歌buildToolsVersion构建工具的版本给“干掉了”,在以前的版本中,buildToolsVersion也会给项目的构建带来很多错,现在谷歌爸把它给“干掉了”;还有就是下面的依赖换成了implementation,那么它和compile有什么区别呢?
compile和api
api完全等同于compile,二者没有区别。我们大家都知道,随着Android版本的更新,有很多过时的类和方法,compile亦是如此,我们可以把compile理解成api的过去式。
api和implementation
这两个是AS3.0版本中新增的指令,下面用一张图来说明一啊两者的区别:
image
5.5 多渠道打包
多渠道根据官网说法:
You must assign each product flavor you configure to one of the flavor dimensions.
你必须指定一种 flavor dimensions
void flavorDimensions(String... dimensions)
修改如下:
flavorDimensions "default"
productFlavors {
xiaomi {dimension "default"}
}productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
定义一个 flavorDimensions 然后在每个渠道中加入dimension
网友评论