您的位置:首页 > 移动开发 > Android开发

Android Studio 简单介绍和使用问题小结

2015-05-08 10:21 513 查看
Google在2013的I/O开发者大会上引入的该开发工具。现在已经更新到了0.5.8版本。
现在github的很多项目都使用了Android Studio开发,所以如果你还用Eclipse,就需要把整个项目拆分,

然后在工程中include依赖包,是非常费事的,有时候弄了半天还不一定能成功导入。而且Android开发者工具的未来的趋势一定也是转向Android Studio。

介于种种原因,不得不学习使用Android Studio,Android Studio的项目管理使用了Gradle,所以你需要对Gradle进行简单的理解,可以到官网去看下。

Gradle官网

http://www.gradle.org

因为Android 是在IntelliJ IDEA的基础上开发的,所以可以参考

IntelliJ IDEA 的官方帮助地址

http://www.jetbrains.com/idea/webhelp/getting-help.html

简单引入一些概念:(有些是来自个人的官方翻译有些是copy过来的)

Android Studio

建立系统工具包你用来生成,测试,运行您的应用程序和软件包。构建系统是独立于Android的工作室,所以你可以调用它的Android的工作室或从命令行。在你写你的应用程序,你可以使用编译系统的特点:

定制,配置,和扩展的建立过程。

为您的应用程序使用同一项目的不同特点,创建多个应用程序。

重用代码和资源。

AndroidStudio构建系统由Gradle构成。Gradle是一种高级的构建工具,用于管理依赖性,允许你定义自定义构建逻辑。

Android插件工具并不依赖于Android Studio,虽然Android Studio由它完全集成。

Gradle的配置包含以下方面

构建变量

构建系统可以根据不同的配置为同一个项目生成多个APK。当你想建立不同版本的应用程序,而不必为每个人单独的项目,这是很有用的。

依赖关系

构建系统管理项目的依赖,并从本地文件系统和远程存储库支持的依赖。这可以防止你不必搜索,下载和复制二进制包为你的依赖到你的项目目录。

清单条目

构建系统使您可以指定的值在生成配置清单文件中的某些元素。这些新的值将覆盖在manifest文件中的现有值。如果你想生成多个的

APK为您的项目中,他们每个人都有不同的包名,最小的SDK版本,或目标SDK版本,这是很有用的。

签名
构建系统使您可以指定生成配置签名设置,它可以在生成过程中签署您的APK。

ProGuard

构建系统使您可以指定一个不同的 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包,为应用模块。

Dependencies 依赖关系

Android Studio生成系统管理项目的依赖和支持模块依赖关系,局部二进制依赖,以及远程二进制依赖。

模块依赖关系

一个项目模块可以在构建文件中包括的其它模块的列表它依赖于。当你建立这个模块,构建系统组装,包括所需要的模块。

本地依赖性

如果你有二进制存档在你的本地文件系统中的一个模块依赖于,例如JAR文件,你可以在构建文件中该模块声明这些依赖关系。

远程依赖性
当你的一些依赖关系都可以在一个远程存储库,您不必下载它们,并将它们复制到您的项目。而Android工作室打造的系统支持远程的Maven的依赖关系。的Maven是一个受欢迎的软件项目管理工具,可帮助使用库组织项目的依赖关系。

许多流行的软件库和工具都可以在公共Maven仓库。对于这些依赖项,您只需要指定自己的Maven坐标,它唯一标识一个远程存储库中的每个元素。在构建系统中使用的Maven坐标的格式是组:名称:版本。例如,Maven的坐标为谷歌番石榴库16.0.1版本是 com.google.guava:番石榴:16.0.1。

在Maven的中央存储库,广泛用于分发很多库和工具。

Build Tasks

Android Studio生成系统定义了一系列分层的构建任务:

顶级任务:用于产生必要的结果的任务。

构建系统提供项目任务:构建您的应用程序和模块的任务,以建立独立的模块。

Gradle Wrapper

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文件中定义自定义的逻辑来替代。

下面简单的总结构建工程时遇到的问题

问题1. 如何引入第三方lib ?

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中进行配置。

文件如下

[java] view
plaincopy





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项目,或者下载最新的。防止旧的配置出问题。

如下:

[java] view
plaincopy





distributionUrl=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 没有在本地,那么还是需要联网的,否则会报错。

http://stackoverflow.com/questions/20746071/failed-to-build-android-hello-world-application-in-offline-mode

每次启动都会有联网检测依赖的各种文件是否是最新版本,导致每次都相当慢。如果确定了你的工程中的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中,添加下面代码

[java] view
plaincopy





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中添加

[java] view
plaincopy





productFlavors {

arm {

ndk {

abiFilters "armeabi", "armeabi-v7a"

}

}

x86 {

ndk {

abiFilter "x86"

}

}

}

或者

[java] view
plaincopy





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 类名或接口名提示

Google在2013的I/O开发者大会上引入的该开发工具。现在已经更新到了0.5.8版本。
现在github的很多项目都使用了Android Studio开发,所以如果你还用Eclipse,就需要把整个项目拆分,

然后在工程中include依赖包,是非常费事的,有时候弄了半天还不一定能成功导入。而且Android开发者工具的未来的趋势一定也是转向Android Studio。

介于种种原因,不得不学习使用Android Studio,Android Studio的项目管理使用了Gradle,所以你需要对Gradle进行简单的理解,可以到官网去看下。

Gradle官网

http://www.gradle.org

因为Android 是在IntelliJ IDEA的基础上开发的,所以可以参考

IntelliJ IDEA 的官方帮助地址

http://www.jetbrains.com/idea/webhelp/getting-help.html

简单引入一些概念:(有些是来自个人的官方翻译有些是copy过来的)

Android Studio

建立系统工具包你用来生成,测试,运行您的应用程序和软件包。构建系统是独立于Android的工作室,所以你可以调用它的Android的工作室或从命令行。在你写你的应用程序,你可以使用编译系统的特点:

定制,配置,和扩展的建立过程。

为您的应用程序使用同一项目的不同特点,创建多个应用程序。

重用代码和资源。

AndroidStudio构建系统由Gradle构成。Gradle是一种高级的构建工具,用于管理依赖性,允许你定义自定义构建逻辑。

Android插件工具并不依赖于Android Studio,虽然Android Studio由它完全集成。

Gradle的配置包含以下方面

构建变量

构建系统可以根据不同的配置为同一个项目生成多个APK。当你想建立不同版本的应用程序,而不必为每个人单独的项目,这是很有用的。

依赖关系

构建系统管理项目的依赖,并从本地文件系统和远程存储库支持的依赖。这可以防止你不必搜索,下载和复制二进制包为你的依赖到你的项目目录。

清单条目

构建系统使您可以指定的值在生成配置清单文件中的某些元素。这些新的值将覆盖在manifest文件中的现有值。如果你想生成多个的

APK为您的项目中,他们每个人都有不同的包名,最小的SDK版本,或目标SDK版本,这是很有用的。

签名
构建系统使您可以指定生成配置签名设置,它可以在生成过程中签署您的APK。

ProGuard

构建系统使您可以指定一个不同的 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包,为应用模块。

Dependencies 依赖关系

Android Studio生成系统管理项目的依赖和支持模块依赖关系,局部二进制依赖,以及远程二进制依赖。

模块依赖关系

一个项目模块可以在构建文件中包括的其它模块的列表它依赖于。当你建立这个模块,构建系统组装,包括所需要的模块。

本地依赖性

如果你有二进制存档在你的本地文件系统中的一个模块依赖于,例如JAR文件,你可以在构建文件中该模块声明这些依赖关系。

远程依赖性
当你的一些依赖关系都可以在一个远程存储库,您不必下载它们,并将它们复制到您的项目。而Android工作室打造的系统支持远程的Maven的依赖关系。的Maven是一个受欢迎的软件项目管理工具,可帮助使用库组织项目的依赖关系。

许多流行的软件库和工具都可以在公共Maven仓库。对于这些依赖项,您只需要指定自己的Maven坐标,它唯一标识一个远程存储库中的每个元素。在构建系统中使用的Maven坐标的格式是组:名称:版本。例如,Maven的坐标为谷歌番石榴库16.0.1版本是 com.google.guava:番石榴:16.0.1。

在Maven的中央存储库,广泛用于分发很多库和工具。

Build Tasks

Android Studio生成系统定义了一系列分层的构建任务:

顶级任务:用于产生必要的结果的任务。

构建系统提供项目任务:构建您的应用程序和模块的任务,以建立独立的模块。

Gradle Wrapper

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文件中定义自定义的逻辑来替代。

下面简单的总结构建工程时遇到的问题

问题1. 如何引入第三方lib ?

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中进行配置。

文件如下

[java] view
plaincopy





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项目,或者下载最新的。防止旧的配置出问题。

如下:

[java] view
plaincopy





distributionUrl=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 没有在本地,那么还是需要联网的,否则会报错。

http://stackoverflow.com/questions/20746071/failed-to-build-android-hello-world-application-in-offline-mode

每次启动都会有联网检测依赖的各种文件是否是最新版本,导致每次都相当慢。如果确定了你的工程中的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中,添加下面代码

[java] view
plaincopy





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中添加

[java] view
plaincopy





productFlavors {

arm {

ndk {

abiFilters "armeabi", "armeabi-v7a"

}

}

x86 {

ndk {

abiFilter "x86"

}

}

}

或者

[java] view
plaincopy





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 类名或接口名提示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: