AndroidStudio

Google官方的Android集成开发环境(IDE = Integrated Development Environment),Eclipse + Adt插件的代替者。
实用设置:
android studio是单工程的开发模式 android studio中的application相当于eclipse里的workspace概念 android studio中的module相当于eclipse里的project概念

中文乱码—–在窗口中,找到IDE Settings->Appearance,在右侧勾选上“Override default fonts by”,然后在第一个下拉框中选择字体为“simsun”,然后apply,重启IDE,就好了。
设置快捷键—–在settings窗口中,找到IDE Settings->keymap,右侧打开的就是快捷键了。右键单击要修改的快捷键,会弹出一个菜单,选择“Add keyboard shortcut”就可以修改快捷键了。删除的话,在弹出的菜单中选择remove XXX即可。特别说明,在AS的快捷键设置里可以直接设置使用Eclipse快捷键还是别的IDE快捷键。如果你热衷Eclipse那么也可设置成Eclipse的快捷键。
修改主题—–在IDE Settings->Appearance,右侧的Theme选择自己喜欢的主题即可。个人比较喜欢Darcula主题,也就是如上截图样式。
如何将Eclipse工程导入AS使用—–选择File->Import Project,在弹出的菜单中选择要导入的工程即可,选择好以后就直接next,在第二个窗口中也选择默认的第一个选项就可以。需要注意的是,在AS中,有两种工程,一个是Project,一个是Module,上面已经细说过了。
导入jar包—–选择File->Projcet Structure,在弹出的窗口中左侧找到Libraries并选中,然后点击“+”,并选择Java就能导入Jar包了。或者直接拷贝jar文件到项目的libs文件夹下,然后运行:Sync Project with Gradle Files。然后clean project重新编译。
删除项目—–AS对工程删除做了保护机制,默认你在项目右键发现没有删除选项。你会发现你的module上面会有一个小手机,这是保护机制。删除的第一步就是去掉保护机制,也就是让手机不见,具体做法就是鼠标放在工程上右键->open module setting,或者F4进入如图界面,选中你要删除的module,然后点击减号,这样就取消了保护机制,然后回到项目工程右键就可发现删除选项。注意:删除会将源文件删除。
Android Studio目录结构
新建工程项目后AS的Product目录结构如下所示:
.idea://AS生成的工程配置文件,类似Eclipse的project.properties。
app://AS创建工程中的一个Module。
gradle://构建工具系统的jar和wrapper等,jar告诉了AS如何与系统安装的gradle构建联系。
External Libraries://不是一个文件夹,只是依赖lib文件,如SDK等。
新建工程项目后AS的Module目录结构如下所示:
build://构建目录,相当于Eclipse中默认Java工程的bin目录,鼠标放在上面右键Show in Exploer即可打开文件夹,
编译生成的apk也在这个目录的outs子目录,不过在AS的工程里是默认不显示out目录的,就算有编译结果也
不显示,右键打开通过文件夹直接可以看。
libs://依赖包,包含jar包和jni等包。
src://源码,相当于eclipse的工程。
main://主文件夹
java://Java代码,包含工程和新建是默认产生的Test工程源码。
res://资源文件,类似Eclipse。
layout://App布局及界面元素配置,雷同Eclipse。
menu://App菜单配置,雷同Eclipse。
values://雷同Eclipse。
dimens.xml://定义css的配置文件。
strings.xml://定义字符串的配置文件。
styles.xml://定义style的配置文件。
......://arrays等其他文件。
......://assets等目录
AndroidManifest.xml://App基本信息(Android管理文件)
ic_launcher-web.png://App图标
build.gradle://Module的Gradle构建脚本
对比
| 对比项 | Eclipse + ADT | Android Studio |
|---|---|---|
| 基于 | IBM公司的Eclipse | JetBrains公司的 IDEA 社区版 |
| 运行速度 | 中 | 快 |
| 程序界面 | 中 | 漂亮 |
| 编码速度 | 中 | 快(更智能的提示) |
| 插件 | 安装繁琐 | 安装简单,自带很多插件 |
| 版本控制 | 需额外安装 | 多 |
| 内存占用 | 中 | 大 |
| 编译 | ANT | gradle |
| 依赖网络 | 否 | 是 |
| 其他 | 内置终端; UI编辑支持多屏预览;多APK打包 |
界面
- 整体
![]()
- 菜单 -File
![]()
-
菜单 - Build
![]()
-
快捷工具
![]()
-
Project视窗
![]()
-Structure视窗 
-
代码编辑区域
-
![]()
-
代码编辑- 布局文件的多屏预览
![]()
-
Android 监控
![]()
-
Message
![]()
Gradle相关
概念
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
编译过程

Gradle相关文件
- 重要
project 中的 settings.gradle 说明
// 这个Project中有2个Moduleinclude ':app', ':percent-23.1.0'
project 中的build.gradle说明
// 构建脚本buildscript {// 仓库repositories {// 中央仓库 https://bintray.com/bintray/jcenter// 通过jar包的字符串包名,就可以下载到jar包了// 成熟的公司可能会有自己的仓库服务器,需要在此配置jcenter()}dependencies {// android gradle构建工具,用于处理module下的build.gradle文件,此版本与Gradle版本有配套关系,目前gradle已经到2.8了,但主要使用的是2.4classpath 'com.android.tools.build:gradle:1.3.0'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}}// 所有项目都依赖于jcenterallprojects {repositories {jcenter()}}// gradle在执行构建任务时的清理配置task clean(type: Delete) {delete rootProject.buildDir}
module中的build.gradle详细说明
// 表示这个项目编译完成后,是一个anrdoid应用程序apply plugin: 'com.android.application'// 表示这个项目编译完成后,是一个anrdoid的库//apply plugin: 'com.android.library'android {// 编译的sdk版本,见sdk\platformscompileSdkVersion 23// 构建工具的版本,见sdk\build-toolsbuildToolsVersion "23.0.1"defaultConfig {// 包名:用于在市场上区分应用的唯一性的标示applicationId "cn.itcast.as.helloworld"// 最小sdk版本、目标sdk版,原先是放在清单文件中的minSdkVersion 15targetSdkVersion 23// 应用程序的版本号,和版本码,原先是放在清单文件中的versionCode 1versionName "1.0"}// 构建类型buildTypes {// debug版默认有配置,没有写在这里// 发行版release {// 是否混淆minifyEnabled false// 混淆配置文件proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}}// 关键:项目的依赖dependencies {// 在项目中的libs中的所有的.jar结尾的文件,都是依赖compile fileTree(dir: 'libs', include: ['*.jar'])// 依赖于junit测试testCompile 'junit:junit:4.12'// 还依赖于appcompat-v7,23.1.0版本compile 'com.android.support:appcompat-v7:23.1.0'}
- 其他
| 所属 | 文件 | 类型 | 作用 |
|---|---|---|---|
| Project | .gradle | 文件夹 | 配置文件,无需更改、关注 |
| Project | gradle | 文件夹 | 包含了gradle-wrapper相关文件,无需更改、关注 |
| Project | gradle.properties | 文件 | gradle启动的配置,如java虚拟机的内存占用等,一般无需修改 |
| Project | gradlew/gradlew.bat | 文件 | 初始化gradle相关变量的脚本 |
文件和文件夹说明
- Project根目录
| 文件/文件夹 | 说明 |
|---|---|
| .idea/ | IDE的Project相关设置 |
| app/ | 默认建立的module目录 |
| build/ | 打包的临时目录 |
| gradle/ | gradle的相关目录 |
| .gradle/ | gradle的相关目录 |
| .gitignore | git同步时的忽略的文件 |
| builder.gradle | Project的gradle依赖 |
| gradle.properties | project的gradle配置 |
| gradlew | 执行gradle构建的脚本(un*x) |
| gradlew.bat | 执行gradle构建的脚本(windows) |
| local.properties | SDK目录设置 |
| Project.iml | 存放module信息 |
| settings.gradle | Project下有哪些Module |
- module目录
| 文件/文件夹 | 说明 |
|---|---|
| build/ | 编译的中间数据、最终apk存放目录 |
| build/source/r/debug/R.java | R文件 |
| build/outputs/apk/ | APK文件默认位置 |
| libs/ | 导入的jar包存放的位置 |
| src/ | 源码(java、xml、..) |
| src/androidTest/ | 测试代码存放位置 |
| src/main/java/your/package/name | java代码 |
| src/main/jniLibs/ | 动态连接库所在目录 |
| src/main/assets/ | 资产文件存放目录 |
| src/main/res/ | 资源目录 |
| src/AndroidManifest.xml | 清单文件 |
| src/main/res/mipmap/ | 一般放置应用图标 |
| app.iml | 存放module信息(由AS创建) |
| build.gradle | gradle的构建文件 |
| proguard-rules.pro | 混淆设置 |
设置
- 文件编码
![]()
- 程序外观
![]()
- 编辑区域外观
![]()
![]()
- logcat外观
![]()
快捷键
视窗快捷键

代码补全

快捷键方案修改 && 编辑快捷键

活动模板

后缀补全

乱码问题


- tasks.withType(Compile) {
- options.encoding = "UTF-8"
- }
dub常用快捷键
| 动作 | 按键 |
|---|---|
| 删除行 | Ctrl + Y |
| 复制一行 | Ctrl + D |
| 上下移动代码 | Alt + Shift + Up/Down |
| 格式化代码 | Ctrl + Alt + L |
| 优化导导包 | Alt + Ctrl + O |
| 大小写转换 | Ctrl + Shift + U |
| 打开文件 | 两次shift |
| 注释代码(//) | Ctrl + / |
| 注释代码(/**/) | Ctrl + Shift + / |
| 生成代码 | Alt + Insert |
| 快速定位错误 | F2 |
| 查找 | Ctrl + F |
| 查看继承关系 | Ctrl + H |
| 查找+替换 | Ctrl + R |
| 快捷覆写方法 | Ctrl + O |
|
序号 |
功能 |
Eclipse快捷键 |
Android Studio 快捷键 |
|
|
快速修复 (实现接口方法、强制类型转换、导包) |
Ctrl + 1 |
Alt + Enter |
|
|
删除光标所在行(选中行) |
Ctrl + D |
Ctrl + Y Ctrl + X |
|
|
复制光标所在的行(选中行) |
Ctrl + Alt + Up/Down |
Ctrl + D |
|
|
格式化代码(java、xml) |
Ctrl + Shift + F |
Ctrl + Alt + L |
|
|
快速创建局部变量 |
Ctrl + 2,L |
Ctrl + Alt + V |
|
|
局部变量变为成员变量 |
Ctrl + 1 |
Ctrl + Alt + F 或者 alt+enter 选择 |
|
|
上下移动选中的行 |
Alt + Up/Down |
Ctrl + Shift + Up / Down |
|
|
重命名 |
Ctrl + Shift + R |
Shift + F6 |
|
|
方法参数提示 |
Alt + / |
Ctrl + P |
|
|
打印输出 |
syso |
sout |
|
|
快速重写方法 |
|
Ctrl + O输入方法名上下方向键选择后回车 |
|
|
快速定位到任意的文件 |
|
按两次shift |
|
|
快速定位到某一个类或文件 |
|
Ctrl + N:查找类 Ctrl + Shift + N:查找文件 |
|
|
显示类结构窗口(Outline) |
|
Alt + 7 |
|
|
快速定位到类中的方法或属性 |
Ctrl + O |
Ctrl + F12 |
|
|
快速查看类继承结构 |
Ctrl + T |
Ctrl + H |
|
|
快速查看方法在哪里被调用 |
|
Ctrl + Alt + H |
|
|
快速定位到当前类报错或警告的地方 |
|
F2 或Shift+F2 |
|
|
快速定位到类或方法的定义 |
|
Ctrl+B |
|
|
代码助手,自动补全 |
Alt + / |
Ctrl + Alt +空格:属性名、类名或接口名提示 Ctrl + Shift +空格: 方法提示 |
|
|
窗口最大化 |
ctrl + M |
Ctrl +Shift + F12 |
|
|
快速选中字符串 |
双击 |
Ctrl + W |
|
|
最近编辑的文件列表 |
|
Ctrl + E |
|
|
搜索或替换 |
Ctrl + F |
Ctrl + F Ctrl + R |
|
|
全局搜索或全局替换 |
Ctrl + H --> File Search |
Ctrl + Shift + F 在选中的文件目录里搜索 Ctrl + Shift + R 在选中的文件目录里替换 |
|
|
导入包 |
Ctrl + Shift + O (导包并自动清除没有用到的包) |
Alt+回车:导入当前包 Ctrl + Alt + O:删除没用到的包。 也可设置自动导包,勾选: Add unambiguous imports on the fly |
|
|
选中变量快速跳转到下一个 |
Ctrl + K |
Alt + F3, F3 |
|
|
光标所在上一个 或下一个的位置 |
Alt + Left / Right |
Ctrl + Alt + Left / Right |
|
|
显示JavaDoc(注释文档) |
|
Ctrl + Q |
|
|
生成 get/set方法、构造方法、toString() |
|
alt + insert |
|
|
撤销 |
Ctrl + Z |
Ctrl+Z |
|
|
恢复 |
Ctrl + Y |
Ctrl+Shift+Z |
|
|
注释 |
Ctr + / 单行 Ctrl + Shift + / 多行 |
同左 |
|
|
回车换行 (光标定位到下一行) |
Shift + Enter |
同左 |
|
|
回车换行 (光标定位到上一行) |
Ctrl + Shift + Enter |
Ctrl + Alt + Enter |
|
|
复制文件名 |
选中文件后Ctrl + C |
同左 |
|
|
复制类的全局路径 (包名加类名) |
右击--> Copy Qualified Name |
Ctrl + Shift + Alt + C (右击--> Copy Reference) |
|
|
大写/小写 |
Ctrl + Shift + X Ctrl + Shift + Y |
Ctrl + Shift + U |
|
|
回到上一次编辑的位置 |
Ctrl + Q |
Ctrl + Shift + Backspace |
|
|
视图显示与隐藏 |
|
Alt + 数字 |
|
|
关闭文件 |
|
Shift + 点击
|
| 自动修正 | |
| Command + N | 自动生成代码(Getter Setter) |
| Command + Alt + L | 格式化代码 |
| Contral + Shift + F | 格式化代码(定制) |
| Command + Alt + T | 把选中的代码放在 try{} 、if{} 、 else{} 里 |
| Command + / | 注释 // |
| Command + Shift + / | 注释 /* */ |
| Command + Shift + Up/Down | 语句上下移动 |
| Option + Shift + Up/Down | 内容上下移动 |
| Option + Command + M | 将选中代码块封装成一个方法 |
| Command + D | 复制当前一行(或选择区域),并粘贴到下面 |
| Command + Z | 后退 |
| Command + Shift + Z | 前进 |
| Control + Alt + O | 优化导入的包 |
| Ctrl(Command)+ - / + | 折叠/展开代码 |
| Ctrl(Command)+Shift+ - / + | 折叠/展开全部代码 |
| Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 |
| Command + Y | 快速查看代码实现 |
| Contral + H | 查看继承关系 |
| Contral + Alt + H | 查看调用关系 |
| Command + [ | 返回上一次查看的位置 |
| Command + ] | 前进到返回之前查看的位置 |
| Command + J | 自动生成代码 |
| Command + E | 查看最近打开的文件 |
http://www.cnblogs.com/dubo-/
建议调整的快捷键:
(1)删除: ctrl + y,一只手能轻易的按下这两个键吗?建议修改为eclipse的ctrl+D
(2)复制选中的多行:
默认居然没有快捷键,可以在keymap中的duplicute lines设置为eclipse的ctrl + alt + 向上
调试
进入调试的两种方式
-
以调试模式运行
-
运行后调试
需要注意 运行的程序的代码应该与所看到的是同一份,不然点击提示会错位
如何打断点
-
代码左侧单击
-
代码左侧单击时按着shift键
断点类型
| 断点类型 | 什么时候会停下来 | 注意 |
|---|---|---|
| 行断点 | 执行到此行 | 无 |
| 成员变量断点 | 被赋值 或 访问 | art虚拟机提供,需安卓5以上设备才有此功能 |
| 方法断点 | 进入方法或退出方法 | 会影响代码执行的效率,慎用 |
| 异常断点 | 出现了未捕获异常 及 捕获的异常 | 默认不开启 |
导入module
导入Eclipse项目
File –> New –> Import Module
导入AndroidStudio项目
File –> New –> Import Module
导入AAR
File –> New –>New Module –> Import .jar/.aar package
删除导入的Module
当文件夹上显示了手机或柱状图 图标,说明此文件夹是受保护的,无法被删除
- 取消保护
打开Project Struecture。 选中要删除的module,点上面的减号。 然后点确定

- 删除文件
在原来是module的文件夹上点击鼠标右键,选中delete,在弹出的对话框上点确定。

导入依赖

导入Library


导入文件jar包

导入Module依赖

对应关系

插件管理

安装插件的两种方式
- 本地安装
- 网络安装
ButterKnife Zelezny的使用

打包APK

混淆
作用及意义
- 减小apk大小,删除无用的类和方法
- 避免被反编译后重要的程序逻辑暴露
配置
app/build.gradle
buildTypes {release {// false ,关闭混淆// true , 开启混淆minifyEnabled false// proguard-android.txt 是通用的混淆配置文件,放在sdk中 (sdk\tools\proguard\)// proguard-rules.pro 是项目都有的混淆配置文件 ,在项目的根目录中proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
通用混淆文件说明
# 以#开头的都是注释,下同# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html# 不使用大小写混合的类名# 比如说 a.java 和 A.java。因为在windows下文件名是不区分大小写的,会导致文件的覆盖-dontusemixedcaseclassnames# 混淆第三方jar-dontskipnonpubliclibraryclasses# 打印更多日志-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).# 不做做优化(有时会弄巧成拙)-dontoptimize# 不做预校验-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.# 保留注解上的属性-keepattributes *Annotation*# 保留此类(com.google.vending.licensing.ILicensingService)不被混淆,google需要用到-keep public class com.google.vending.licensing.ILicensingService# 保留此类( com.android.vending.licensing.ILicensingService)不被混淆,google需要用到-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native# 保持 native 方法不被混淆,混淆后不能正确调用底层方法了-keepclasseswithmembernames class * {native <methods>;}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans# 保留任何直接或间接继承与View的类的set和get开头的方法,不被混淆-keepclassmembers public class * extends android.view.View {void set*(***);*** get*();}# We want to keep methods in Activity that could be used in the XML attribute onClick# 保留直接或间接继承于Activity的类的 点击事件方法不被混淆,因为混淆后布局文件写的点击事件方法就会找不到-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations# 保留枚举类的如下 values 和valueOf方法-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}# 保留实现了Parcelable 接口的类的静态CREATOR常量-keepclassmembers class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator CREATOR;}# 保留R.java中的及内部类的的所有静态字段-keepclassmembers class **.R$* {public static <fields>;}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.# 告诉ProGuard不要警告找不到android.support开头的包名.-dontwarn android.support.**
项目特有的常用的混淆语法
- 特定的类不被混淆
-keep class package.name.Klass {*;} - 某个包下的类不被混淆
-keep class package.name.** {*;} - 继承与某类的类不被混淆
-keep class * extends java.lang.annotation.Annotation { *; }
使用第三方jar包在混淆后出错
一般,都可以在网站上找到相应的混淆配置
比如
-
butterknife
http://jakewharton.github.io/butterknife/ 查找 PROGUARD -
baidu map sdk
http://lbsyun.baidu.com/index.php?title=androidsdk/qa 查找 混淆 -
xutils
https://github.com/wyouflf/xUtils 查找 混淆
多APK打包
意义
- 国内现状: 多个电子市场可提供apk的下载,用于统计市场的作用
- 同一个应用程序,给不同的客户,需要连接不同的服务器
步骤
1 在清单文件中添加metadata
<application...... ><!-- market 表示键 ${MARKET}表示值 ,用${}表示会变......--><meta-data android:name="market" android:value="${MARKET}"/><!-- ......--></application>
2 在程序中获得metadata并使用
//TODO 从sp中获取是否是第一运行boolean isFirstRun= true;if(isFirstRun){// 通过PackageManager拿到在清单文件中记录的metadata信息PackageManager packageManager = getPackageManager();String packageName = getPackageName();int flag = PackageManager.GET_META_DATA;// 表示我们获取当前应用程序的application下的metadata数据ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, flag);// 传入键名,拿到键值String market = applicationInfo.metaData.getString("market");//TODO 获取imeiString imei = "123456";// TODO 自己实现代码sentToServer(market, imei);//TODO 写入sp,下次启动程序就不发送了}
3 添加flavor动态修改metadata
android{//......productFlavors {_360 {manifestPlaceholders = [MARKET: "_360"]}wandoujia {manifestPlaceholders = [MARKET: "wandoujia"]}anzhi {manifestPlaceholders = [MARKET: "anzhi"]}}}
版本控制
SVN环境
- 安装TortoiseSVN
!!! 注意勾选 command line client tools

- 在as中,设置svn的命令行工具
settings –> Version Control –> Subversion –>General –> use command line client
选中TortoiseSVN的安装目录中的bin文件夹中的svn.exe

上传本地代码
- 设置同步
settings –> Version Control
把project后面加上版本控制的类型

- 设置忽略文件
settings –> Version Control –> Ignored Files
3种方式:特定文件、指定目录下的文件、特定规则文件

- 提交目录
project 右键 –> Subversion –> share directory
这一步只提交了目录,文件并没有上传到服务器




- 上传文件
project 右键 –> Subversion –> submit directory


下载服务器的代码
在Welcome to Android Studio界面,点击第三个Check out project from Version Control


提交代码,编辑冲突
project 右键 –> Subversion –> submit directory
好习惯:先update,再submit
- 冲突的解决
3种 接受服务器的,接受自己的,合并

| 英文 | 含义 |
|---|---|
| Accept Theirs | 用服务器的覆盖本地的 |
| Accept Youts | 用本地的覆盖服务器的 |
| Merge | 查看服务器和本地的,最终决定提交的内容 |

!!! 注意,在合并后,还需要submit
断开连接
- 断开连接
- 先删除配置
在settings –> version control -掉同步文件夹
- 先删除配置

2. 再删除文件
删除.svn文件夹

- 忘记记录的用户名和密码
settings –> version control –> subversion –>clear auth cache

http://www.cnblogs.com/dubo-/















浙公网安备 33010602011771号