Android Studio 1.5刚推出几天,2.0就正式在 Canary 通道中放了出来,从1到2是一个大的版本升级,最主要就是体现在“快”这一个字上,也就是提速 app 的 build 和 deployment。

获取2.0

全新安装

下载

修改 update channel

‘Command+,’

Tips:Canary,Dev,Beta,Stable 四个 Channel 从 Chrome 项目中借鉴过来,也几乎变成了 Google 发布客户端更新的官方范式

  • Canary:weekly build(chrome 中 Canary 为 daily build)
  • 发布依次由 Canary-> Dev-> Beta-> Stable 不断推进,让 Bug 尽早发现并修复

改进

dx

dx工具负责将所有经过 javac编译生成的.class文件转换并合并成一个.dex(dalivk executable)文件

  • 优化的 dx merger
    • Build Tools 23.0.2+.
  • 后台运行 dx(Run dx in process),把 dx 工作分散到平时默默进行,不用挤到 build 时,降低 build 时间峰值

    • Gradle 2.4+
    • Plugin 2.0.0+
    • Build Tools 23.0.2+
    • 在 build.gradle 中启用
      1
      2
      3
      4
      5
      android {
      dexOptions {
      dexInProcess = true
      }
      }
  • 配置 gradle 最大 jvm 内存使用,dex.jar 运行在 gradle 内存空间中,gradle以 daemon 进程一直存活代替之前的按需启动的短生命周期实例。在 project 下的 gradle.properties 中设置

    • org.gradle.jvmargs=-Xmx4096m
  • 并行 dexer
    • 最多可并行4个 dexer 任务
    • 在 project 下的 gradle.properties 中使用android.dexerPoolSize环境变量来指定并行数量

ProGuard

  • 不足:
    • 不支持增量模式,每次都是全部处理一遍
    • 阻止 pre-dexing,只支持单个 dex 输出且每次执行都是全部 re-dexing
  • 改进:
    • 部分增量模式支持
    • 可以 pre-dexing
  • 使用,不需额外配置,得到的好处就是快了
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    android {
    buildTypes {
    debug {
    minifyEnabled true
    useProguard false
    }
    release {
    minifyEnabled true
    useProguard true
    }
    }
    }

multi-dex

根据 connected Device API level:

  • =21,即 art 上,运行时原生支持加载多个 dex 文件,在安装编译时将多个 dex 编译合在一起,

  • <21,即 dalivk="" 上,打包时使用="" legacy="" multi-dex="" 模式,=""
    1
    compile 'com.android.support:multidex:1.0.0'

这个选择是Android Studio 自动的,配置好后,不需要手动干预。

更快速的发布

adb

新的 adb,提供更稳定高速的连接通路

针对所连接设备进行 debug 构建,只在 Android Studio 中才有特性

通常情况下APK 包含了多 dpi 支持,但开发设备上的 dpi 是已知的(如 mdpi),所以构建APK 时自动只包含需要的 dpi 资源,减少 apk 体积。
后续还将对 ABIs 和 multi-dex 进行过滤,进一步减小 apk 体积。

Instant Run

算是一项突破性的改进,比正常的开发安装调试周期快50倍。
新的 build 流程

原理:

  • 只发布更改过的部分
  • 避免安装
  • 无需关闭再重启应用

应用场景:

  • Hot swap
  • Warm swap
  • Cold swap
  • Rebuild&Reinstall
    在2.0中新建的项目自动开启 Instant Run ,针对老项目需要手动开启。

有了这项技术支持,对于 UI 和 Code 的更改,都可以用秒杀的形式反映出来,真正做到即时编程。
注意的是 Hot swap 使用的是替换内存技术,如果关闭应用,再打开,还是旧代码。
Instant Run 与正常的 Run 和 Debug 同时存在,只是icon 上加了一道闪电。

Emulator

难得ADK Team 还记得要改进下这个慢牛模拟器。

  • CPU,支持多核。
  • GPU,支持 GL ES1.0,将要运行2.0。
  • I/O,可以向模拟器里拖图片、APK,任意想传的,并且传输速度比 USB 真机快。
  • 新的 UI,更易操作。
  • GPS,接收 KML 和 GPX 文件,模拟移动的 GPS 位置。
  • Network,模拟不同网络类型,如2G,3G等。
  • 支持指纹的模拟。
  • 支持拖动缩放。
  • 横竖屏翻转。

模拟器本身还是基于 qemu,不像 Genymtion 基于 virtualbox 那样启动飞快,但还在改进,可以和 Genymotion 配合使用,测试一些最新的系统,不像之前根本不会去用。

后记

随着 Brillo 发布的临近,相信 Android Studio 在 NDK 以及性能上还有更多的进步,节省开发者的时间,从 Instant Run 上还是看出来有在用心做的,不再只满足于Just work 的状态。