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

时间:2023-03-08 23:03:08
【Android应用开发】Android Studio 简介 (Android Studio Overview)

一. Intelij IDEA 环境简介

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

-- Intelij 文档参考https://www.jetbrains.com/idea/help/intellij-idea.html ;

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)

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)

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

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

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

(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 目录结构解析

文档位置 https://www.jetbrains.com/idea/help/content-root.html , 翻译解析如下;

Moudle 目录结构 :

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

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

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

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

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

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

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

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

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

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

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

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

(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)

(2) Android *视图模块介绍

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

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

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

(3) Android 视图 Moudle模块介绍

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

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

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

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

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

2. Project 视图

(1) Project 视图 Moudle 目录

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

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

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

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

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

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

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

(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)

-- 自带虚拟机 : 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)

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)

五. 安装 配置 更新管理

1. Android Studio 安装配置向导

安装向导 :

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

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

2. 扩展模板 和 支持要素

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

3. Android 可穿戴 和 电视支持

工程配置 :

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

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

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

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

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

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

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

5. 更新通道

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

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

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

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

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

-- 更新配置 :

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

六. 其它注意点

1. Translation 编辑器

翻译编辑器
-- 作用 : 翻译编辑器插件 增强了多语言支持, 使用该编辑器可以更容易的将本地信息添加到 app 的翻译文件中; 
-- 颜色代码 : 有颜色的代码表明 一种语言是否翻译完成, 或者没有对某些字符串进行翻译;
-- Google 翻译服务 : 开发者可以使用该插件, 将要翻译的字符串导出到 Google Play Developer Console 中翻译, 翻译完成后下载并导入到工程中;

翻译编辑器
-- 右键点击 string.xml 文件, 弹出下面对话框

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

-- 翻译编辑器界面 :

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

2. 最新 API 支持

关于最新 API 支持 :

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

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

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

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

参考文档 :

-- 遇到的问题及解决方案: http://blog.csdn.net/gtsong/article/details/21441411

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

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

-- eclipse 源码导入 AS : http://www.cnblogs.com/ct2011/p/4183553.html

-- 大牛教程一 : http://blog.csdn.net/ryantang03/article/details/8948037

-- 大牛教程二 : http://blog.csdn.net/ryantang03/article/details/8948037

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