随着android 5.0 的发布,android 开发已经进入了一个全新的时代,eclipse开发安卓已经有点不合时宜了,在github上80%的android项目都采用android studio开发,并且android studio的中文教程愈来愈多,还有什么理由不固守这eclipse 呢。html
下面这篇文章对了解android studio 颇有帮助,原文以下:java
Google在2013的I/O开发者大会上引入的该开发工具。如今已经更新到了0.5.8版本。android
如今github的不少项目都使用了Android Studio开发,因此若是你还用Eclipse,就须要把整个项目拆分,
而后在工程中include依赖包,是很是费事的,有时候弄了半天还不必定能成功导入。并且Android开发者工具的将来的趋势必定也是转向Android Studio。
介于种种缘由,不得不学习使用Android Studio,Android Studio的项目管理使用了Gradle,因此你须要对Gradle进行简单的理解,能够到官网去看下。git
Gradle官网github
由于Android 是在IntelliJ IDEA的基础上开发的,因此能够参考
IntelliJ IDEA 的官方帮助地址
http://www.jetbrains.com/idea/webhelp/getting-help.html
shell
创建系统工具包你用来生成,测试,运行您的应用程序和软件包。构建系统是独立于Android的工做室,因此你能够调用它的Android的工做室或从命令行。在你写你的应用程序,你可使用编译系统的特色:
定制,配置,和扩展的创建过程。
为您的应用程序使用同一项目的不一样特色,建立多个应用程序。
重用代码和资源。
AndroidStudio构建系统由Gradle构成。Gradle是一种高级的构建工具,用于管理依赖性,容许你定义自定义构建逻辑。
Android插件工具并不依赖于Android Studio,虽然Android Studio由它彻底集成。
构建变量api
构建系统能够根据不一样的配置为同一个项目生成多个APK。当你想创建不一样版本的应用程序,而没必要为每一个人单独的项目,这是颇有用的。
依赖关系
构建系统管理项目的依赖,并从本地文件系统和远程存储库支持的依赖。这能够防止你没必要搜索,下载和复制二进制包为你的依赖到你的项目目录。
清单条目
构建系统使您能够指定的值在生成配置清单文件中的某些元素。这些新的值将覆盖在manifest文件中的现有值。若是你想生成多个的
APK为您的项目中,他们每一个人都有不一样的包名,最小的SDK版本,或目标SDK版本,这是颇有用的。
签名android-studio
构建系统使您能够指定生成配置签名设置,它能够在生成过程当中签署您的APK。
构建系统使您能够指定一个不一样的 ProGuard的规则文件的每一个版本变量。构建系统能够运行ProGuard的生成过程来混淆你的类。服务器
测试
构建系统生成的项目中的测试源测试APK,因此你没必要建立一个单独的测试项目。构建系统能够在生成过程当中运行测试。
Gradle构建文件使用Groovy的语法。Groovy是一种动态语言,你能够用它来 定义自定义生成逻辑,并与Android的插件Gradle提供了Android特有的元素进行交互。
按照惯例创建
Android Studio生成系统假定合理的默认值的项目结构和其余编译选项。
若是您的项目符合这些约定,你的Gradle构建文件是很简单的。当一些这些公约并不适用于你的项目,使您能够配置生成过程的几乎每个方面。
例如,若是您的项目的源位于比默认值不一样的目录,你能够在构建文件中指定此位置。
一个项目表明一个完整的Android应用程序。Android Studio项目包含一个或多个module 。一个module 是您的应用程序的独立组件,
你能够构建,测试或调试。module 包含您的应用程序的源代码和资源。Android的Studio项目包含三种模块:
Java库模块
包含可重用的代码。构建系统生成一个JAR包的Java库模块。
Android库模块
包含可重复使用的Android特有的代码和资源。构建系统产生AAR(安卓归档)包库模块。
Android应用程序模块
包含应用程序代码,并可能依赖于库模块,虽然不少Android应用程序只包含一个应用程序的模块。构建系统生成APK包,为应用模块。
Android Studio生成系统管理项目的依赖和支持模块依赖关系,局部二进制依赖,以及远程二进制依赖。
模块依赖关系
一个项目模块能够在构建文件中包括的其它模块的列表它依赖于。当你创建这个模块,构建系统组装,包括所须要的模块。
本地依赖性
若是你有二进制存档在你的本地文件系统中的一个模块依赖于,例如JAR文件,你能够在构建文件中该模块声明这些依赖关系。
远程依赖性当你的一些依赖关系均可以在一个远程存储库,您没必要下载它们,并将它们复制到您的项目。而Android工做室打造的系统支持远程的Maven的依赖关系。的Maven是一个受欢迎的软件项目管理工具,可帮助使用库组织项目的依赖关系。
许 多流行的软件库和工具均可以在公共Maven仓库。对于这些依赖项,您只须要指定本身的Maven坐标,它惟一标识一个远程存储库中的每一个元素。在构建系 统中使用的Maven坐标的格式是组:名称:版本。例如,Maven的坐标为谷歌番石榴库16.0.1版本是 com.google.guava:番石榴:16.0.1。
在Maven的中央存储库,普遍用于分发不少库和工具。
Android Studio生成系统定义了一系列分层的构建任务:
顶级任务:用于产生必要的结果的任务。
构建系统提供项目任务:构建您的应用程序和模块的任务,以创建独立的模块。
Android Studio项目包含的Gradle Wrapper由如下构成:
A JAR file
A properties file
A shell script for Windows platforms
A shell script for Mac and Linux platforms
Note:你应该提交以上全部的文件到资源控制系统。
使用Gradle wrapper(而不是本地Gradle安装),确保您始终运行的Gradle在属性文件中定义的版本。要配置您的项目使用Gradle较新版本,
编辑属性文件并指定新的版本。
Android Studio 会从Gradle Wrapper目录下读取你的配置文件,而后运行改wrapper,所以你能够根据不一样版本的Gradle无缝的处理多个项目
Android Studio 不支持Shell脚本,所以你应该在Gradle文件中定义自定义的逻辑来替代。
http://stackoverflow.com/questions/20744692/android-studio-0-4-0-absherlock-gradle-without-import-module
a copy lib 工程到项目下,setting.gradle配置include ': yourlib' ,不然会提示在你的项目下找不到该lib工程。
b 到整个项目下的build.gradle配置include ':actionbarsherlock'
c 在你的Moudle下,而不是整个Project的build.gradle中添加
dependencies {
compile project(':yourlib')
}
在网上查的资料,右键,选择add as library,个人是0.5.8的,没有发现。若是没有做为lib引入,在Sync project with gradle files的时候 .
就会发现,default config 不支持.这是由于你的lib工程没有build.gradle文件,能够拷贝一个简单的build.gradle,到你添加的lib project 目录下。
这样就能够正常编译了。固然若是你的lib 项目还引用了一些三方jar包,你须要在dependencies中进行配置。
文件以下apply plugin: 'android-library' dependencies { compile fileTree(dir: 'libs', include: '*.jar') } android { compileSdkVersion 17 buildToolsVersion "19.0.3" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } }问题2 gradle的配置
在第一次的时候,因为下载比较慢,你能够到gradle官方下载最新版本,解压到android studio 的gradle的路径下。这个不固定,跟SDK配置同样,
只要在gradle setting中指定好路径便可。而后配置gradle到path,gradle -v 验证是否成功配置
注意:gradle的配置是在整个Project项目下面的build.gradle文件中。编译器报错:仅支持0.9+的gradle版本。
解决方案:能够在build.gradle 里面配置 0.9+,或者在点击提示,gradle setting中选择如下选项之一
use default gradle wrapper(官方推荐,不多出问题)
会自动下载gradle,确保你的项目使用精确的gradle版本
另外,若是该选项不可选,灰色,请从其余项目中copy一个gradle文件夹到你的工程中Use customizable gradle warpper(1.7版本以上支持)
这选项老是核对更新你指定的gradle版本,你只须要改变gradle的版本号便可。Use local gradle distribution(不建议使用,常常出各类问题,可能我的还不够熟悉)
会使用本地的gradle去build项目,可是请确保你已经安装并在path中正确配置了该gradle。在命令行中,gradle -v能够验证。
问 题3:sync project时长时间停留在 resolve dependencies ':classpath'状态 或者 Error:(1, 0) Cause: org/gradle/api/artifacts/result/ResolvedComponentResult
缘由:可能gradle配置不正确或者没有链接代理,没法访问到服务器。请确保你的其它lib project中也拥有build.gradle
请检查gradle/wrapper/gradle-wrapper.properties:
gradle wrapper distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip或者更高,当时我下载的工程比较早,因此指向了gradle-0.9
因此这里建议从github上clone项目,或者下载最新的。防止旧的配置出问题。以下:
12distributionUrl=http\:
//services.gradle.org/distributions/gradle-1.11-bin.zip
http:
//stackoverflow.com/questions/22989638/android-studio-gradle-could-not-create-plugin-of-type-libraryplugin
建议:从github上clone项目,或者下载最新的。防止之前的工程配置出问题。一般但愿使用offline的状态,不去链接外网,因此使用local gradle的配置,可是常常会出现各类问题,好比:Error:No cached version of com.android.tools.build:gradle:0.9.+ available for offline mode.Disable Gradle 'offline mode' and sync project特别是刚开始对gradle比较模糊的时候,你也不清楚它啥时候须要一些依赖lib,啥时候须要去网站下载。
建议:
选择 use default gradle wrapper 该配置,也不多出现问题(请确保代理成功链接,能够在Http Proxy中check connection),之后慢慢的积累了多了,
使用起来比较熟了,能够再试试。
问题4 work offline 模式
若是你使用了该模式,可是其dependency 的lib project 没有在本地,那么仍是须要联网的,不然会报错。
每 次启动都会有联网检测依赖的各类文件是不是最新版本,致使每次都至关慢。若是肯定了你的工程中的jar包或者依赖工程都齐全,也不想去更新最新的,就能够 在gradle setting中勾选offline,这样就不会去更新了。可是提一下,若是这种状况下出问题,也不要惊讶,请链接代理。从新sync project,由于不少状况你可能并不清楚build工程所依赖的一些插件等是否已经有了。
另外提一下,若是你使用了0.9+这样的配置方式(带+号),那么不管你是否选择了offline,都会去检测,并且,若是你没有网络链接的话,编译会报错的。
0.9+,这种配置方式必须联网。
因此若是你选择了offline,那么请检测本身的gradle的版本配置,能够直接写成你的gradle的版本,好比我下载并配置好的gradle1.2.
在有可链接到服务器的网络链接的状况下下面的配置,仍是比较建议的。
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}问题5. com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice
缘由:support v4包屡次导入,或者是在不一样的build.gradle文件中的dependencies 中无心compile了两次,好比在你的actionbarsherlock中使用了dependencies {
compile fileTree(dir: 'libs', include: '*.jar')}
代表编译全部的libs目录下的jar包,已经编译了support v4.jar包,而在项目下的build.gradle中又进行了编译:
dependencies {
compile 'com.android.support:support-v4:18.0.+'
}
因此应把项目下的compile 'com.android.support:support-v4:18.0.+' 给干掉
另外提一点,不只是support v4包,各类lib甚至各类布局的属性,style,color,都不容许在不用的文件中重复定义,在sync project 的时候会报错,你只需保留一份便可
问题6. AndroidMainfest.xml问题
前提:当时个人activity的label中使用的是中文,activity的label中使用的是中文,
情景1 Fatal error when parsing: AndroidManifest.xml . Failed to parse XML file: org.xml.sax.SAXParseException: Element type "activity" must be followed by either attribute specifications, ">" or "/>".
情景2 unexpected end of block data
以上两种情景的解决方案:
把中文label Extr 为String便可
不过我在编译的时候有一些activity的label是中文的,一个一个activity的排错是比较恶心的。仍是建议全部的label都抽取到String.xml文件中。
我是这么修改的,你们能够试试。
还有一种状况出现:unexpected end of block data在Sync project with gradle files 的时候
解决方案:
http://stackoverflow.com/questions/23045022/unexpected-end-of-block-data-in-gradle-sync
若是你使用的是 buildToolsVersion "19.0.0",那么改为 buildToolsVersion "19.0.3",从新Sync project便可问题7 不一样的lib 项目中的AndroidMainfest.xml文件中的targetSDK版本不一致
这个简单,只须要所有改为一致的便可。问题8. plugin with id 'android' not found
http://stackoverflow.com/questions/18153739/android-studio-plugin-with-id-android-library-not-found
在Project的build.gradle中,添加下面代码
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } }问题9 使用NDK时,NDK not configured
http://stackoverflow.com/questions/20674650/how-to-configure-ndk-with-android-gradle-plugin-0-7 在NDK lib工程下的 build.gradle中添加
productFlavors { arm { ndk { abiFilters "armeabi", "armeabi-v7a" } } x86 { ndk { abiFilter "x86" } } }或者
buildTypes { debug { ndk { abiFilters "armeabi", "armeabi-v7a" } } }本人用的是第一种,在build photup项目的时候出现的问题
简单总结下:
使用的时候最好有代理链接。不少时候须要下载一些插件或者依赖项目,除非你在本地彻底拥有全部的依赖工程。可是在刚开始使用的时候,仍是建议有代理,由于
在刚使用Android Studio,须要去下载一些东西,好比,maven repository等,
gradle配置要准确,保持都是最新的,尽可能clone并在使用的时候更新项目,或者下载最新的工程,因为我的之前download 了不少的zip,跑demo用,后来直接导入,有些
插件已经更新了,可是配置文件尚未更新。因此可能致使resolve dependency classpath长时间停留。
offline work不可信,请尽可能保持gradle的代理链接,极可能须要去下载一些依赖工程,或者其它配置。也许是我的哪里处理的不够好。
请使用官方推荐的Gradle配置选项:use default gradle wrapper
Android Studio快捷键
提示
Ctrl+P方法参数提示
Ctrl+空格代码提示
Ctrl+Shift+Space在不少时候都可以给出Smart提示
Ctrl+Alt+Space类名或接口名提示
查看
Alt+1快速打开或隐藏工程面板
Ctrl+H查看类结构图
Ctrl+F12查看当前文件的结构
Ctrl+Q查看注释文档
Ctrl+P查看参数信息
Alt+Q查看当前方法的声明
Ctrl+Q查看JavaDoc
Ctrl+W选中单词继而语句继而行继而函数
查找
Alt + F1查找代码所在位置
Ctrl + F7查找当前元素在当前文件中的引用,而后按F3能够选择
Alt + F3快速查找
Ctrl + Shift + F7能够高亮当前元素在当前文件中的使用
Ctrl + Shift+N查找文件
Ctrl + Shift+Alt+N查找类中的方法或变量
Ctrl + B查找打开光标处的类或方法
Ctrl + N快速查找类
Ctrl + F查找文本
Alt+F1能够将正在编辑的元素在各个面板中定位
Ctrl+Shift+Alt+N能够快速打开符号 快速打开类/文件/符号时,可使用通配符,也可使用缩写
Ctrl+Alt+Up /Ctrl+Alt+Down能够快速跳转搜索结果
修复
Shift+F6重构-重命名
Ctrl+X删除行
Ctrl+D复制行
Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )
Alt+Insert能够生成构造器/Getter/Setter等
Ctrl+Alt+L格式化代码
Ctrl+R替换文本
Alt+Enter导入包,自动修正
Ctrl+Alt+O优化导入的类和包
Ctrl+J自动代码
Ctrl+Shift+Space自动补全代码
Ctrl+Alt+Space类名自动完成
Ctrl+Shift+Insert能够选择剪贴板内容并插入
Ctrl+Shift+J能够整合两行
Ctrl+Alt+T能够把代码包在一块内,例如try/catch
Ctrl+Alt+V能够引入变量。例如把括号内的SQL赋成一个变量
Alt+F8计算变量值
Ctrl+O能够选择父类的方法进行重写
最近相关
Ctrl+E最近打开的文件 ----------
Ctrl+Shift+Backspace能够跳转到上次编辑的地方
Ctrl+Alt+ left/right返回至上次浏览的位置
Ctrl+E或者Alt+Shift+C 最近更改的代码
Alt+Shift+C对比最近修改的代码
移动
Ctrl+Shift+Up/Down代码向上/下移动。 ---------------
F2 或Shift+F2高亮错误或警告快速定位 ------------
Ctrl+Up/Down光标跳转到第一行或最后一行下
Ctrl+[或]能够跳到大括号的开头结尾
Ctrl+Shift+up/down移动方法
Ctrl+P方法参数提示
Ctrl+空格代码提示
Ctrl+Shift+Space在不少时候都可以给出Smart提示
Ctrl+Alt+Space类名或接口名提示
转自:
http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1108/1935.html