拥抱 Android Studio 之一:从 ADT 到 Android Studio
http://kvh.io/cn/embrace-android-studio-migration.html
拥抱变化,拥抱新事物
多年前央视有一套电视系列片:大国崛起,主要讲述那些曾经在站在世界舞台中央的国家的兴衰历程。纵观历史,正是创新使得一个国家得以崛起。
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 的答案就是你想要的。
- Android Studio 下载页
- Android Studio:Android Developer 上 Android Studio 的介绍
- Android Tools:Android 工具首页,有大量的深度的技术文档
- Android Build Sytem:基于 gradle 的 Android 构建系统,最为关键的一篇文章
- 从 ADT 迁移指南:官方提供的迁移手册
- Android Studio 国内下载渠道:良心网站,你懂的,但是笔者不对 Xcode Ghost之类的事情负责
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 |
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
在每个模块的 build.gradle 文件中,初始会有如下内容:
1 |
apply plugin: 'com.android.library' |
依赖管理
远程依赖:
1 |
dependencies { |
Android Studio 使用 gradle 进行依赖管理,兼容了 maven 的库,一个经典的 maven 库的配置如下:
1 |
<dependency> |
对比之后,你会发现 compile 的内容中,分为三部分 groupdId:artifactId:version
com.bugtags.library对应groupId
bugtags-lib对应 artifactId
1.0.8对应 version
本地依赖
1 |
dependencies { |
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
如您觉得文章不错,对您有所帮助,可以通过“支付宝”或“微信支付”请我喝咖啡。
拥抱 Android Studio 之一:从 ADT 到 Android Studio的更多相关文章
- Android SDK版本和ADT版本
Android SDK版本和ADT版本 Android早期的版本号有点“混乱”,比如Android 2.2对应的ADT版本为ADT-0.9.9而Android 2.3对应的的ADT版本则突然“跃迁 ...
- Android Studio vs. Eclipse ADT Comparison
Android Studio 是一个新的基于 IntelliJ IDEA Android 的安卓开发环境,它对 Eclipse ADT 进行了改进并新增了功能. Feature Android Stu ...
- Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio Android Studio 是一个Android开发环境,基于Intel ...
- Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- Android性能測试 一些适用于Android Studio的代码审查和性能測试工具
导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...
- Android学习总结(4)——Andorid Studio熟练使用
前言 该文以Android Studio2.1.1(Bundle)为例.JDK使用的是1.8版本,也建议大家使用1.8版本. 使用技巧无先后顺序. Android Studio 2.1.1 软件下载 ...
- 0.[WP Developer体验Andriod开发]之从零安装配置Android Studio并编写第一个Android App
0. 所需的安装文件 笔者做了几年WP,近来对Android有点兴趣,尝试一下Android开发,废话不多说,直接进入主题,先安装开发环境,笔者的系统环境为windows8.1&x64. 安装 ...
- android studio 导入一个已有的android studio project作为lib使用
android studio 导入一个已有的android studio project作为lib使用 新项目来了. 需要搭建框架. android studio对我来说还是很陌生,之前一个项目在同事 ...
- 重装Eclipse、离线安装ADT、Android SDK
由于最新的ADT.Android SDK需要最新版本的Eclipse才能使用,我无奈的只好升级Eclipse.看看自己的Eclipse已经两年没有升级了,也是时候升级了.升级前,有很多的顾虑.因为像这 ...
随机推荐
- python基础之面向对象02
---继承 当我们定义完成某个类时,可以再定义一个新类,新类可以继承第一个类.新类被称为子类,而被继承的类称为父类/基类/超类. 继承就是子类继承父类的属性和方法(注意是类属性和类方法). 继承可以使 ...
- python---CRM用户关系管理
Day1:项目分析 一:需求分析 二:CRM角色功能介绍 三:业务场景分析 销售: .销售A 从百度推广获取了一个客户,录入了CRM系统,咨询了Python课程,但是没有报名 .销售B 从qq群获取一 ...
- css实现0.5像素的边框
公司的设计师在做设计图的时候都是以iphone6(宽为750物理像素)为基准进行设计的.iphone6的设备像素比(即css像素与物理像素的比例)是2,所以设计师在设计图画了边框为1px的box的时候 ...
- Training Neural Networks: Q&A with Ian Goodfellow, Google
Training Neural Networks: Q&A with Ian Goodfellow, Google Neural networks require considerable t ...
- typedef 与 #define的区别
typedef 与 #define的区别 整理于一篇经典blog,经典原文地址http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.ht ...
- Elasticsearch技术解析与实战(二)文档的CRUD操作
启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...
- python json 访问与字符串截取
# req = requests.Request(url=url, headers=headers, data=data) # html = requests.get(req) # print(htm ...
- 鸟哥的书——ubuntu命令
纯粹按着鸟哥的书上的基本命令打一遍,不喜勿喷! Chapter5.首次登录 一.基础命令: 1.显示时间和日期的命令:date dzhwen@deng:~$ date 2014年 02月 23日 星期 ...
- 【AtCoder Grand Contest 007E】Shik and Travel [Dfs][二分答案]
Shik and Travel Time Limit: 50 Sec Memory Limit: 512 MB Description 给定一棵n个点的树,保证一个点出度为2/0. 遍历一遍,要求每 ...
- Java容器Set接口
Set接口的实现,可以方便地将指定的类型以集合类型保存在一个变量中.Set是一个不包含重复元素的Collection,更确切地讲,Set 不包含满足 e1.equals(e2) 的元素对,并且最多包含 ...