http://kvh.io/cn/embrace-android-studio-migration.html

  1. 1. 拥抱变化,拥抱新事物

拥抱变化,拥抱新事物

多年前央视有一套电视系列片:大国崛起,主要讲述那些曾经在站在世界舞台中央的国家的兴衰历程。纵观历史,正是创新使得一个国家得以崛起。

Android 开发因为涉及到代码编辑、UI 布局、打包等工序,最好使用一款 IDE。Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后于2013年 Google I/O 大会发布基于 IntelliJ IDEA 开发 Android Studio。后者正式版发布之后,Google 宣布不再持续支持 ADT。Android Studio 有更快的速度,更好的代码完成等特性。

时至今日(2015-11-30),在我们运营bugtags.com这一款高效的 app 测试服务的时候,在帮助用户集成 Android SDK 的过程中,我们发现很多遗留项目依旧没有从 ADT 迁移过来,依然有很多用户对 Android Studio 怀着恐惧与不信任。我想我们有义务去做一个系列介绍,让更多的人拥抱变化,拥抱新鲜事物。

本文系列一,主要介绍两个工具的比较及其迁移。

Android Studio(IntelliJ IDEA)vs. ADT(Eclipse)

本文并不打算涉及 IDE 的圣战,理论上只要配上插件,用得趁手,都差不多。然而本文也是带有倾向性的,因为工作原因,笔者使用过 Eclipse 多年,也使用过多款 JetBrains 的 IDE,均不辱 XXX 语言开发第一 IDE 之名。下面介绍一些 Android Studio 的优胜的地方。

  • 更快的运行速度;
  • 更智能的自动补全;

    你不用自动补全?那其实你 ADT 也不需要的, vi 或者一个记事本就足够了;

  • 更好的重构,IDEA 会帮你找到每一个需要重构的地方;
  • 更好的索引与搜索,双击 shift 键搜索,文件搜索,代码搜索,都很方便;
  • 更好的版本管理功能(git/SVN);
  • 更灵活强大集成脚本 gradle;
  • 原生支持的从项目文件到操作系统的文件浏览器功能;

    ADT 可以通过插件支持?问题来了,我为啥要去花宝贵的时间折腾这个插件呢;

  • ……

以上省略一万字。

相信我,对于 Android 开发者,切换到 Android Studio,经过短短学习曲线之后,你会爱上这个 IDE,并且即将由奢入俭难,再也回不去了。

从 ADT 迁移到 Android Studio

如果你看到上面的优点,已经克服了心中的怀疑和恐惧,准备动手迁移,下面提供一些迁移提示。

常用网站

部分需要科学上网

你无法科学上网?赶紧搜一下,自己搭或者买一个吧。世界如此多娇,人生苦短。将你遇到过问题的出错信息用 Google 搜索,第一条来自 stackoverflow 的答案就是你想要的。

ADT 与 Android Studio 目录结构对比

ADT 项目结构

ADT 项目结构

project/src/:放置代码文件

project/libs:放置 .jar 库或者 .so 库

project/res:项目资源文件

project/AndroidManifest.xml:工程 manifest 文件

Android Studio 项目结构

Android Studio 项目结构

Android Studio 的一个 project (项目)下可以包含多个独立的 module(模块),图中 Bugtags-Android-Demo 便是一个项目,app 便是一个 module。结构如下。

project/build.gradle:项目的 build.gradle 文件,主要是全局的远程库配置、gradle 插件版本等信息

project/app:名字为 app 的模块

project/app/build.gradle:模块的 build.gradle 文件,是最关键的配置文件,后续会有文章继续专门介绍

project/app/src:源码文件夹

project/app/src/java:放置代码文件

project/app/src/jniLibs:默认的.so 库放置的位置,可以在模块的 build.gradle 中通过jniLibs.srcDirs 值来修改所在位置

project/app/libs:放置 .jar 库

从 ADT 迁移

本文主要参考这篇迁移指南。Android Studio 提供了非常友好的导入向导。

在 Android Studio 导入

File->New->Import Project,找到你的 ADT 的 workspace 下的项目,一路点击 YES,会生成一个全新的项目。

导入成功

问题

  • 项目之间有依赖

直接导入使用依赖的项目,被依赖的项目就会自动被导入到同一个项目中,作为一个模块。

下文中的左侧是 ADT 项目,右侧是 Android Studio 项目。

其中 Bugtags-Android-Eclipse-Demo 使用 Bugtags-Android-Eclipse-Lib 作为依赖。

依赖

  • 停留在界面上不动

错误

这个状态是 gradle 构建脚本尝试去下载 gradle 的 wrapper,这个 wrapper 大概 3M,需要科学上网,早期很多人就是在这个页面卡住,放弃了 Android Studio。确保你已经科学上网,并且耐心等待,又或者点击取消,先进项目看看。

Android Studio 的几个关键概念

如果上面没有问题,你已经能够正常的看到 Android Studio 的项目工程了。

IDE 使用、快捷键什么的,笔者认为没什么可写的。自己熟悉吧。下面介绍一个对于 ADT 而言全新的概念。

build.gradle

在项目的 build.gradle 文件中,有如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()//这是构建插件所使用的远程库,后续会有一篇介绍库的含义
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha1'//这是项目所使用的 Android gradle 版本
}
} allprojects {
repositories {
jcenter()//这是使用远程库依赖的时候,的远程库
}
}

在每个模块的 build.gradle 文件中,初始会有如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
apply plugin: 'com.android.library'
//com.android.library标示是一个库模块;
//com.android.application标示这是一个应用模块 android {
compileSdkVersion 19//编译 sdk 版本
buildToolsVersion "23.0.2"//构建工具版本 defaultConfig {
minSdkVersion 9
targetSdkVersion 19
} buildTypes {//打包类型
release {
minifyEnabled false//是否混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
} dependencies {//依赖管理
compile 'com.bugtags.library:bugtags-lib:1.0.8'//远程
compile fileTree(dir: 'libs', include: ['*.jar'])//本地 jar 依赖
}

依赖管理

远程依赖:

1
2
3
dependencies {
compile 'com.bugtags.library:bugtags-lib:1.0.8'
}

Android Studio 使用 gradle 进行依赖管理,兼容了 maven 的库,一个经典的 maven 库的配置如下:

1
2
3
4
5
<dependency>
    <groupId>com.bugtags.library</groupId>
    <artifactId>bugtags-lib</artifactId>
    <version>1.0.8</version>
</dependency>

对比之后,你会发现 compile 的内容中,分为三部分 groupdId:artifactId:version

com.bugtags.library对应groupId

bugtags-lib对应 artifactId

1.0.8对应 version

本地依赖

1
2
3
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])//本地 jar 依赖
}

Android Studio 工程创建的时候,默认会有如上依赖,意义是把放在与该 build.gradle 文件同一层的 libs 文件夹中所有的 jar 文件都作为库依赖。

同步依赖

一般情况下,你配置完了build.gradle之后,该编辑框的上方会出现正在 sync 的标记。耐心等待完成即可。如果发现没有同步成功,可以使用下面这个按钮:

sync

如果长时间未成功,则可以在控制台使用:

1
./gradlew build --info

以上命令来看控制台输出。

build variant

Android Studio 内置了多渠打包功能,就是所谓的 build variant,可以新建若干个 productflavor 来达到目的。
大致可以这样:

flavors

这个功能十分的灵活和强大,举个例子,你想要有两个版本,一个收费版,一个免费版,在若干代码文件和资源文件上,都不大一样。

以前你可能选择在代码中判断当前版本,加载不同的代码和资源。或者使用 git 的 branch。

现在你可以使用 Android Studio 直接使用多个 productflavor, 在对应的 flavor 放置那些有区别的代码和文件。一次打包,即可完成。
在下一篇系列文章中,笔者将会详细介绍这个功能。

总结

新版本的 Android Studio 还有更多强大的功能,包括最新 preview 的 instant build,将会极大提升构建速度。后文将会详细介绍。

一个工程从 ADT 迁移到 Android Studio 只需要很短的时间,连带熟悉基本概念,半天基本可以完成。如果还没有进行迁移的同学,要抓紧了,不要被世界抛弃了。

笔者kvh先在这里挖一个系列坑,希望这个系列能够让读者快速掌握 Android Studio 与 gradle,请持续关注。

系列导读

本文是笔者《拥抱 Android Studio》系列第一篇,其他篇请点击:

拥抱 Android Studio 之一:从 ADT 到 Android Studio

拥抱 Android Studio 之二:Android Studio 与 Gradle 深入

拥抱 Android Studio 之三:溯源,Groovy 与 Gradle 基础

拥抱 Android Studio 之四:Maven 公共仓库使用与私有仓库搭建

拥抱 Android Studio 之五:Gradle 插件使用与开发

有问题?在文章下留言或者加 qq 群:453503476,希望能帮到你。

番外

笔者目前关注点在于移动 SDK 研发,后端服务设计和实现。

笔者在开发和运营bugtags.com,这是一款能够极大的提升 app 开发者测试效率的 SDK 产品,欢迎使用、转发推荐。

我们团队长期求 PHP 后端,有兴趣请加下面公众号勾搭:

bugtags

 本文由 kvh 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
------------------------------------------------------------------------------------- 
如您觉得文章不错,对您有所帮助,可以通过“支付宝”或“微信支付”请我喝咖啡。

拥抱 Android Studio 之一:从 ADT 到 Android Studio的更多相关文章

  1. Android SDK版本和ADT版本

    Android SDK版本和ADT版本   Android早期的版本号有点“混乱”,比如Android 2.2对应的ADT版本为ADT-0.9.9而Android 2.3对应的的ADT版本则突然“跃迁 ...

  2. Android Studio vs. Eclipse ADT Comparison

    Android Studio 是一个新的基于 IntelliJ IDEA Android 的安卓开发环境,它对 Eclipse ADT 进行了改进并新增了功能. Feature Android Stu ...

  3. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  4. Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...

  5. Android性能測试 一些适用于Android Studio的代码审查和性能測试工具

    导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...

  6. Android学习总结(4)——Andorid Studio熟练使用

    前言 该文以Android Studio2.1.1(Bundle)为例.JDK使用的是1.8版本,也建议大家使用1.8版本. 使用技巧无先后顺序. Android Studio 2.1.1 软件下载 ...

  7. 0.[WP Developer体验Andriod开发]之从零安装配置Android Studio并编写第一个Android App

    0. 所需的安装文件 笔者做了几年WP,近来对Android有点兴趣,尝试一下Android开发,废话不多说,直接进入主题,先安装开发环境,笔者的系统环境为windows8.1&x64. 安装 ...

  8. android studio 导入一个已有的android studio project作为lib使用

    android studio 导入一个已有的android studio project作为lib使用 新项目来了. 需要搭建框架. android studio对我来说还是很陌生,之前一个项目在同事 ...

  9. 重装Eclipse、离线安装ADT、Android SDK

    由于最新的ADT.Android SDK需要最新版本的Eclipse才能使用,我无奈的只好升级Eclipse.看看自己的Eclipse已经两年没有升级了,也是时候升级了.升级前,有很多的顾虑.因为像这 ...

随机推荐

  1. python基础之面向对象02

    ---继承 当我们定义完成某个类时,可以再定义一个新类,新类可以继承第一个类.新类被称为子类,而被继承的类称为父类/基类/超类. 继承就是子类继承父类的属性和方法(注意是类属性和类方法). 继承可以使 ...

  2. python---CRM用户关系管理

    Day1:项目分析 一:需求分析 二:CRM角色功能介绍 三:业务场景分析 销售: .销售A 从百度推广获取了一个客户,录入了CRM系统,咨询了Python课程,但是没有报名 .销售B 从qq群获取一 ...

  3. css实现0.5像素的边框

    公司的设计师在做设计图的时候都是以iphone6(宽为750物理像素)为基准进行设计的.iphone6的设备像素比(即css像素与物理像素的比例)是2,所以设计师在设计图画了边框为1px的box的时候 ...

  4. Training Neural Networks: Q&A with Ian Goodfellow, Google

    Training Neural Networks: Q&A with Ian Goodfellow, Google Neural networks require considerable t ...

  5. typedef 与 #define的区别

    typedef 与 #define的区别 整理于一篇经典blog,经典原文地址http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.ht ...

  6. Elasticsearch技术解析与实战(二)文档的CRUD操作

    启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...

  7. python json 访问与字符串截取

    # req = requests.Request(url=url, headers=headers, data=data) # html = requests.get(req) # print(htm ...

  8. 鸟哥的书——ubuntu命令

    纯粹按着鸟哥的书上的基本命令打一遍,不喜勿喷! Chapter5.首次登录 一.基础命令: 1.显示时间和日期的命令:date dzhwen@deng:~$ date 2014年 02月 23日 星期 ...

  9. 【AtCoder Grand Contest 007E】Shik and Travel [Dfs][二分答案]

    Shik and Travel Time Limit: 50 Sec  Memory Limit: 512 MB Description 给定一棵n个点的树,保证一个点出度为2/0. 遍历一遍,要求每 ...

  10. Java容器Set接口

    Set接口的实现,可以方便地将指定的类型以集合类型保存在一个变量中.Set是一个不包含重复元素的Collection,更确切地讲,Set 不包含满足 e1.equals(e2) 的元素对,并且最多包含 ...