热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

拥抱AndroidStudio之一:从ADT到AndroidStudio

http:kvh.iocnembrace-android-studio-migration.html1.拥抱变化,拥抱新事物AndroidStudio(Intell

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

  1. 1. 拥抱变化,拥抱新事物
  • Android Studio(IntelliJ IDEA)vs. ADT(Eclipse)
  • 从 ADT 迁移到 Android Studio
    1. 1. 常用网站
    2. 2. ADT 与 Android Studio 目录结构对比
      1. 2.1. ADT 项目结构
      2. 2.2. Android Studio 项目结构
    3. 3. 从 ADT 迁移
      1. 3.1. 在 Android Studio 导入
        1. 3.1.1. 问题
    4. 4. Android Studio 的几个关键概念
      1. 4.1. build.gradle
      2. 4.2. 依赖管理
        1. 4.2.1. 远程依赖:
        2. 4.2.2. 本地依赖
        3. 4.2.3. 同步依赖
      3. 4.3. build variant
  • 总结
  • 系列导读
  • 番外

拥抱变化,拥抱新事物

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

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 项目结构ADT 项目结构

project/src/:放置代码文件

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

project/res:项目资源文件

project/AndroidManifest.xml:工程 manifest 文件

Android Studio 项目结构

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

    com.bugtags.library
    bugtags-lib
    1.0.8

对比之后,你会发现 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 的标记。耐心等待完成即可。如果发现没有同步成功,可以使用下面这个按钮:

syncsync

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

1
./gradlew build --info

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

build variant

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

flavorsflavors

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

以前你可能选择在代码中判断当前版本,加载不同的代码和资源。或者使用 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 后端,有兴趣请加下面公众号勾搭:

bugtagsbugtags

 本文由 kvh 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

推荐阅读
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
索马里7_244
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有