一. Intelij IDEA 环境简介


Android Studio 来源​ : Android Studio 是 Intelij IDEA 的免费版本 + Android SDK 集成的;

-- ​Intelij 文档参考​ : ​​​​​ ;


1. Intelij 与 Eclipse 区别 


(1) Intelij 与 Eclipse 对应关系



Android Studio 与 Eclipse 对应

Eclipse

Intelij IDEA

Workspace

Project

Project

Moudle

Facet

Facet

Library

Library

JRE

SDK

Classpath variable

Path variable



(2) Intelij 项目导入


Intelij IDEA 导入项目​ : 

-- ​导入 Eclipse 项目​ : 尽管 Intelij IDEA 与 Eclipse 的目录结构 不同, 在 Intelij 中可以导入 Eclipse 的 WorkSpace 或者 Project;

-- ​导入 Maven 或 Gradle 项目​ : 如果工程使用 Maven 或者 Gradle 工具进行编译, 选择相应的编译脚本 pom.xml 或者 build.gradle ;




2. Intelij 的 Project 概念




(1) Project 基本简介


Project 基本简介​ : 

-- ​Project 定义​ : Project 代表了一个软件解决方案的 组织单元, 这个 Project 中提供了了最基本的 代码编写帮助, 重构, 编码风格一致性等功能;

-- ​Moudle (模块) 组合​ : 完成后的产品会被分解成一系列离散孤立的 Moudle (模块), Project 会将这些 Moudle 集合在一起, 然后将 Module 连接整合成一个更大的整体;

-- ​Project 不含构件 ​: Project 本身不包含开发构件, 如源代码, 编译脚本, 或文档; 

-- ​Project 配置​ : Project 是 Intelij IDEA 的最高层级的结构组织, 在其中主要定义整个 Project 的设置, 同时也定义了其中的 Moudle (模块) 和 Library (依赖库) 的设置;




(2) Project 格式和文件


Project 配置数据​ : 

-- ​来源​ : Intelij IDEA 将 Project 及其组件的配置数据 保存在规定的 XML 文件中, 这样使 管理 和 分享 Project 配置数据更简单;

-- ​分类​ : Project 配置数据分为 基于目录格式的 和 基于文件格式的 配置数据;



(3) Project 基于目录的配置数据


基于目录格式 (Directory-based format) 的配置数据​ : 

-- ​含有的配置文件​ : 使用 基于目录格式 的配置数据时, 在 Project 中会生成 .idea 目录, .idea 目录中有大量的 XML 文件;

-- ​文件配置​ : .idea 目录包含了大量的 XML 配置文件, 每个 xml 文件都包含了一个关于特定领域的配置文件, 例如 compiler.xml, encodings.xml, moudles.xml 等等;

-- ​信息重要性​ : 几乎所有 .idea 目录中的文件都包含了 Project 项目的核心信息, 例如 Moudle 模块组件的名称 和 位置, 编译配置 etc.

-- ​建议版本控制​ : .idea 目录下地文件应该被纳于版本控制之下;

-- ​个人设置不进行版本控制​ : workspace.xml 是一个例外, 该文件配置 IDE 的个人偏好设置, 字体, 窗口位置, 窗口栏目, 版本控制设置, 其它编程历史数据, 该文件可以不纳入版本控制 etc.

【Android应用开发】Android Studio 简介 (Android Studio Overview)_xml



3. Intelij IDEA 的 SDK 概念




(1) SDK 简介


SDK 简介 ​: 

-- ​SDK 需求​ : 如果使用 Intelij 开发应用软件, 需要一个 SDK, 最常见的时 JDK, 用于 Java 程序开发;

-- ​安装 SDK​ : Intelij IDEA 不包含 SDK, 编程前至少应该安装 并 定义 (define) 一个 SDK,

-- ​定义(define) SDK​ : 指定 SDK 的名称 和 位置 (即 SDK 安装目录所在的路径);



(2) Intelij 支持的SDK



Intelij IDEA 支持的 SDK​ : 

-- ​JDK​ : Java 开发;

-- ​Mobile SDK​ : Java ME 移动设备开发;

-- ​Android SDK​ : Android 开发;

-- ​Flex AIR SDK​ : Adobe Flash 平台开发;

-- ​Flexmojos SDK​ : Flex 编译和调试 SDK;

-- ​Intelij Platform Plugin SDK​ : 用于开发 Intelij IDEA 的插件;




(3) SDK 级别


SDK 级别 ​: 

-- ​全局开发环境级别 ​: 如果 SDK 被定义为整个 IDE 集成开发环境的全局级别, 可以在任意 Project 中使用;

-- ​工程相关 SDK​ : 如果 SDK 与 Project 相关联, 那么该 SDK 级别就是 Project 级别的, 这个 SDK 只能被该 Project 下地 Moudle 使用, 其它的 Project 不能使用;

-- ​Moudle 级别 SDK​ : Moudle 模块可以使用 Project 级别的 SDK, 也可以使用 Moudle 级别特定的 SDK;




(4) SDK 中得各种路径


SDK 路径​ : 在 Intelij IDEA 中定义一个 SDK 时, IDE 会自动寻找 二进制库路径, 源码路径, 和 文档路径;

-- ​classpath 二进制依赖库路径​ : SDK 已编译好的二进制数据所在的路径, 对于 JDK 来说就是 API 的 class 字节码文件 和 jar 包文件所在的目录;

-- ​sourcepath 源码路径​ : SDK 的源码所在的路径, 该源码未进行编译, 源码文件不是必须的, 关联源码文件后 Intelij IDEA 会提供进一步的编码帮助功能;

-- ​documentation path 文档路径​ : 文档所在的路径, android 就是 sdk 下地 doc 目录, 还可以设置在线文档 url, 可以浏览在线的文档帮助;





4. Intelij IDEA 的 Moudle 概念




(1) Moudle 简介


Moudle 简介​ : Moudle 模块是一个离散的功能单元, 可以独立进行 编译 运行 测试 调试;

-- ​包含文件​ : 模块包含一个特定任务的所有所需文件, 如 源代码 构建脚本 单元测试 部署描述符 文档 etc.

【Android应用开发】Android Studio 简介 (Android Studio Overview)_xml_02

-- ​Project 环境​ : 模块的存在 和 执行功能 的前提必须是 Project 的上下文的前提下才有意义, 单独的 Moudle 是无意义的;

-- ​Moudle 配置文件​ : Moudle 的配置信息保存在 moudleName.iml 配置文件中, 默认该配置文件在 moudle 根目录中, 该文件应该纳入版本控制中;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_03




(2) Moudle 类型


Moudle 类型简介​ : 组件使用类型与使用的 Intelij IDEA 所用的编辑器 和 插件要与 Moudle 类型相符才可以;

-- ​Java Moudle​ : Java 程序, Java Moudle 功能可以通过添加 facet 进行扩展;

-- ​Web Moudle ​: 提供用于开发 Web 应用的工具, 可以使用 Java PHP  JavaScript markUp 等语言;

-- ​Android Moudle​ : Android 应用模块;

-- ​Ruby Moudle​ : 提供创建 Ruby 工程的工具, 需要使用 Ruby 插件;

-- ​Python Moudle​ : 提供 Python 开发的工具, 需要使用 Python 插件;




(3) Moudle 目录结构解析


文档位置 ​: ​​​​​ , 翻译解析如下;


Moudle 目录结构​ : 

-- ​源码目录 (Source Root)​ : 目录标识  该目录及其子目录下地文件都是源码, 需要被编译的一部分, 可以将一个包前缀标记成源码目录, 如 cn.org.octopus, 不用刻意创建源码目录 如 cn/org/octopus ;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_ide_04

-- ​生成源码目录 (Generated Source Root)​ : 与 Source Root 相似, 但是该目录不建议重构和修改;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_05

-- ​测试源码目录 (Test Source Root)​ : 单元测试源码存放的位置, 可以将测试源码 与 程序源码分开, 测试源码 与 程序源码是分开放置的;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_ide_06

-- ​生成的测试源码目录 ( Generated Test Source Root ) ​: 生成的测试源码目录, 一般在 build 目录下;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_ide_07

-- ​资源目录 (Resource Root)​ : 应用中所用到的资源文件;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_08

-- ​纯目录 (Exclude Roots)​ : 该目录不重要, 被部分忽略, 只是单纯地目录, 该目录下地文件不会进行编译, 查找替换时不会查找该目录下地内容, 指定 Exculde 目录能提供 IDE 的性能, 一般输出目录是呗排除的;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_ide_09



(4) Moudle 依赖可以不指定类型


Moudle 依赖​ : SDK 关联 Moudle, Moudle 中使用依赖库, 依赖于该 Project 中得其它 Moudle, 可以将一个 Moudle 指定为依赖, 又可以为一个 Moudle 指定一个依赖 Moudle, 此时 依赖 Moudle 可以不指定 目录类型;





二. Android Studio 工程目录结构



1. Android 视图 (扁平化显示)




(1) Android 视图简介



Android 视图​ : 左上角工具栏下面有个下拉菜单, 可以切换此视图, 视图模块图解如下;

-- ​作用​ : 该视图以扁平视角显示了目录结构, 提供了一个快速操作 Android 工程关键文件的途径, 帮助你在基于 Gradle 编译系统上进行工作;

-- ​模块​ : 在模块层级的最顶层提供最重要的资源目录;

-- ​分组​ : 将所有模块的编译文件分组并放在一个通用目录中;

-- ​配置​ : 将所有模块的 Manifest 配置文件放在一个通用目录中;

-- ​编译​ : 显示 Gradle 设置的资源文件;

-- ​资源​ : 将屏幕适配使用的不同的 分辨率, 横竖屏, 国际化资源放在对应的目录中;

-- ​切换方法​ : 点击视图选择按钮, 在下拉菜单中选择 "Android" 视图, 如下图所示;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_Android Studio_10




(2) Android 顶级视图模块介绍



Android 视图模块​ : 基本分类, 如下图; Android 视图下顶级目录有 ​Gradle Scripts​ 以及 ​模块​ 目录;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_Android Studio_11

-- ​Gradle Scripts​ : 显示所有的 编译相关 的脚本文件;



(3) Android 视图 Moudle模块介绍



模块目录​ : 在 Android 视图除了有 Gradle Scripts, 每个 模块(Moudle 相当于 workspace 中的工程) 都有一个顶层目录;

-- ​java​ : Moudle 的 java 源码文件;

-- ​manifest​ : Moudle 的 manifest 配置文件;

-- ​res​ : Moudle 的资源文件, 不同分辨率的图片 相同的名称会分到一组, 如下图所示;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_xml_12





2. Project 视图




(1) Project 视图 Moudle 目录



Project 视图 Moudle 目录​ : 与 Eclipse 中的工程视图有一些区别; 在 Android Studio 每个 Project 中都包含一个或多个 应用模型 (Application Moudle), 每个应用模型都包含这个模块的所有源码集合;

-- ​Java 源码​ : moudleName/src/main/java 路径;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_Android Studio_13

-- ​res 资源​ : moudleName/src/main/res 路径, 包含图片, 布局, 国际化等资源;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_14

-- ​测试相关资源​ : moudleName/src/androidTest 路径, 模块测试用例相关源码;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_15


(2) 创建文件


创建文件​ : 

-- ​快速创建 ​: 点击 Project 中的恰当的目录, 使用 Command + N (mac) 或者 Alt + N (Windows) 可以快速创建文件;

-- ​创建类型​ : AS 会根据被选中目录的类型, 会给出创建对应类型的文件的选项, 如你选择在 layout 目录创建文件, AS 会给出创建布局类文件的选项;




三. Android 编译系统



1. Android 编译简介



Android 编译系统简介​ : 

-- ​基本作用​ : 是用来 编译, 测试, 运行, 打包 应用的工具包, 该编译系统替代了 Eclipse ADT 中得 Ant 编译系统;

-- ​使用方式​ : 该编译系统 既可以从 Android Studio 菜单中运行工具,  也可以是从命令行运行的独立的工具;


编译系统功能​ : 灵活的 Android 编译系统使你能够达到以下列出的功能不用修改工程的核心文件;

-- ​定制 配置 扩展 编译过程​;

-- ​使用同样地 Project 和 Moudle 创建多种不同特性的 apk 文件​;

-- ​对源码 和 资源的重用​;




2. 用于包识别的 Application ID



(1) Application ID 简介


Application ID 简介 ​: 

-- ​作用​ : 在 Android 编译系统中, Application ID 唯一性地标识 Android 应用 APK 文件的发布的包名;

-- ​位置 ​: Application ID 在 Moudle 下的 build.gradle 中定义;


defaultConfig {
applicationId "com.danielkim.soundrecorder"
minSdkVersion 16
targetSdkVersion 21
versionCode 5
versionName "1.2.2"
}

--

注意​ :  Application ID 只在 build.gradle 文件中定义, 不在 AndroidManifest.xml 中定义;




(2) Application ID 变体


Application ID 变体​ : 当使用编译变体时, 编译系统允许使用不同的 Application ID 去标识不同的产品风格 和 编译类型 的包; 

-- ​不同变体​ : 编译 特殊产品特性 类型 的 Application ID 需要加上一个后缀; 


productFlavors {
pro {
applicationId = "com.example.my.pkg.pro"
}
free {
applicationId = "com.example.my.pkg.free"
}
}

buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
....




(3) 包名


包名简介​ : 

-- ​定义位置​ : 如果在 manifest.xml 中指定包名, 必须在 src/main 特定目录下的 指定 AndroidManifest.xml 中定义;

-- ​主要作用​ : 指向 R 文件, 解决 Activity, Service 等相关组件的注册的问题;


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.danielkim.soundrecorder" >
... ...

-- ​多个包名​ : 如果有多个 manifest.xml 配置文件, 如针对一个产品特性的 manifest.xml 配置文件, 针对某种类型的 manifest.xml 配置文件, 包名在这些配置文件中是可选的;





四. 调试 和 执行



1. Android 虚拟机管理 (Android Virtual Device Manager)



AVD 简介​ : 

-- ​新特性​ : AVD 更新了屏幕的链接, 帮你选择最流行的设备配置, 屏幕大小 和 app 展示解决方案;

-- ​启动 ​: 点击 工具栏中得 Android Virtual Device Manager 图标, 即弹出下面虚拟机管理的对话框;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_xml_16

-- ​自带虚拟机​ : AVD Manager 自带了 Nexus 6 和 Nexus 9 的虚拟机, 同时也支持创建传统的 Android 设备, 这些设备有基于特定虚拟机的属性的皮肤, 并设定这些皮肤到硬件配置;

--​ x86 虚拟机​ : Android Studio 安装了 Intel x86 硬件加速运行管理器 (Hardware Accelerated Execution Manager, HAXM) 虚拟机, 创建默认的虚拟机用于快速地 app 原型设计;




2. 内存管理器



内存管理器简介 ​: 

-- ​功能简介​ : Android Studio 提供了一个内存管理器界面, 可以更容易的监控内存使用状况, 查找释放对象, 定位内存泄露, 追踪所连接设备设备的内存使用状况;

-- ​启动方式​ : 根据你 运行在手机 或者 虚拟机 的 app, 点击右下角的内存管理器按钮, 进入内存管理器界面; 

-- ​注意​ : 在使用 debug 模式时才会显示内存管理, 的实际数据, 否则会显示没有 debug 的程序;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_17




3. Lint 编译检查




(1) 检查内容


Lint 检查条目​ : 

-- ​Cipher.getInstance() 使用安全值​;

-- ​使用传统的视图组件 View, 仍然使用之前的类名​; 

-- ​Fragment 注入的安全检查​;

--​ Gradle 插件版本与 SDK 兼容​;

-- ​所需 API 版本​;



(2) 错误提示


错误提示功能​ : 

-- ​错误提示修改​ : 将鼠标放在 Lint 错误上, 会出现一个问题描述, 以及给出一个简单地解决方案; 

-- ​错误连接​ : 这里还会在错误信息的最后有一个有帮助的超链接, 连接到额外的错误信息处;



(3) Lint 配置


Lint 配置​ : 

-- ​配置方式​ : 在 Android Studio 中可以 为单个的特殊编译配置版本 运行 Lint, 也可以为所有的编译配置版本运行 Lint; 

-- ​具体配置​ : 在 build.gradle 配置文件中, 添加一个 lintOption 属性;


android {
lintOptions {
// set to true to turn off analysis progress reporting by lint
quiet true
// if true, stop the gradle build if errors are found
abortOnError false
// if true, only report errors
ignoreWarnings true





4. 日志信息


日志简介​ : 

-- ​作用​ : 在编译 运行 Android Studio 应用时, 你可以查看 adb 和 设备 日志信息 在 DDMS 面板中, Debug 调试器中可以找到完整的 DDMS 工具集合, 控制设备行为;

-- ​启动​ : 如果开发者要去 调试 Android 调试器, 点击底部工具栏的 Android 按钮; 

-- ​布局层级监控​ : 包括 视图组件层级查看器 去帮助开发者优化布局;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_ide_18





五. 安装 配置 更新管理



1. Android Studio 安装配置向导



安装向导​ : 

-- ​安装过程​ : 一个更新的安装和设置向导, 通过一步一步的安装 和 配置过程, 检查系统的要求 (如 JDK 和 可用的内存容量), 然后提示可选的安装选项, 例如 Intel 的模拟加速器;

-- ​创建虚拟机 ​: 更新配置向导让开发者通过安装过程, 同时向导更新 系统镜像 和 模拟器需求, 比如 GPU, 之后创建一个 基于 Android 5 平台的 可选的默认的 性能高可靠的模拟器;




2. 扩展模板 和 支持要素



扩展模板​ : Android Studio 支持 Google 服务的新模板, 扩展可用的设备类型;




3. Android 可穿戴 和 电视支持



工程配置​ : 

-- ​设备类型选择​ : 为了更容易跨平台开发, 工程向导提供了新的模板 为 Android 可穿戴 和 电视设备 创建你的应用;

-- ​版本选择​ : 创建工程过程中, 项目向导弹出一个对话框展示了 API 列表, 开发者从该列表中选择 项目的 最小版本;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_ide_19




4. 继承 Google App Engine (Google 云平台)



集成云平台简介 ​: 快速集成云平台, 使用 Google App Engine 连接到 Google 云平台, 并创建一个云端点;

-- ​创建方法​ : 菜单栏 File -> New Moudle -> App Engine Java Servlet Module, 并指定 模块 包 客户端 名称;

【Android应用开发】Android Studio 简介 (Android Studio Overview)_Android Studio_20



5. 更新通道



Android Studio 更新通道简介 ​: AS 提供了四种途径 基于你的代码偏好 保持软件是最新的; 

--​ Canary 通道​ : 每周都更新一次, 同时这些版本正在测试, 这些版本有很多漏洞, 但是官方希望尽早地让开发者知道 AS 的新特性, 不推荐用于实际生产环境开发场景;

-- ​Dev 通道​ : 精心挑选 canary 特性中得经过时间考验并能稳定运行的特性, 大约每两周 或 一个月更新一次;

-- ​Beta 通道​ : 正式版本发布前发布的测试版本;

-- ​稳定版本通道​ : 经过测试的稳定版本, 用于正式的生产环境开发;

-- ​更新配置​ : 

【Android应用开发】Android Studio 简介 (Android Studio Overview)_Android Studio_21



六. 其它注意点




1. Translation 编辑器



翻译编辑器​ : 

-- ​作用​ : 翻译编辑器插件 增强了多语言支持, 使用该编辑器可以更容易的将本地信息添加到 app 的翻译文件中; 

-- ​颜色代码​ : 有颜色的代码表明 一种语言是否翻译完成, 或者没有对某些字符串进行翻译;

-- ​Google 翻译服务​ : 开发者可以使用该插件, 将要翻译的字符串导出到 Google Play Developer Console 中翻译, 翻译完成后下载并导入到工程中;



翻译编辑器​ : 

-- ​右键点击 string.xml 文件, 弹出下面对话框​ : 

【Android应用开发】Android Studio 简介 (Android Studio Overview)_android_22

-- ​翻译编辑器界面​ : 

【Android应用开发】Android Studio 简介 (Android Studio Overview)_xml_23



2. 最新 API 支持


关于最新 API 支持​ : 

-- ​向下兼容​ : Android Studio 支持最新的 Material Design 主题, 组件, 图形, 如阴影, 还支持 API 的向下兼容;

-- ​新属性​ : 支持 drawable 的最新 xml 属性, 如 <ripple /> , <annimated-selector /> 等等;

-- ​导入示例 ​: AS 能更容易地从 GitHub 上获取 Android 示例源码;

-- ​导入方式​ : 从文件菜单选择 File -> Import Samples, 或者从欢迎界面中提供的导入按钮导入, 会导入 GitHub 上得示例源码;





参考文档 :  

-- Gradle 系列教程 : http://segmentfault.com/a/1190000002411926

-- Gradle 基础 : http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/

 

-- 依赖 : http://my.oschina.net/u/1471093/blog/341990