AndroidStudio用法总结

时间:2015-06-16 19:04:06   收藏:0   阅读:15784

环境搭建:

有as安装版本和绿色版本;下载:http://androiddevtools.cn 
ps:如果你从eclipse转as开发工具上,建议用as安装版本。因为考虑到 as时刻升级要求默认升级sdk,避免相互干扰,导致ADT插件匹配不上;
gradle配置安装后,设置相应的path
现教程为as1.2版本安装版本:
技术分享
技术分享
配置环境:
技术分享技术分享技术分享


安装时可能碰到的情况:

第一次安装后启动后可以会出现一直在加载的界面;

技术分享
这是在检查你的 Android SDK 。有人会在这里卡上很长时间,很大的原因就是:网络连接有问题。可以通过配置 hosts 的方式来解决。如果检查需要更新,则会让你安装,从而会有后面 讲解3 - 讲解6 。
如果想跳过这一步,可以进行如下操作:
在Android Studio安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后追加 disable.android.first.run=true
技术分享
这样设置后,可以自己手动配置sdk和jdk的路径位置;
技术分享

Android Studio创建项目
技术分享
技术分享
技术分享
技术分享·
修改sdk的目录配置到as安装版本设置的sdk位置路径:(防止跟eclipse的SDK路径冲突)
技术分享
技术分享
设置项目的编码格式:
技术分享
像在eclipse一样如果你选择了用到Actionbar,默认的它会给你应用一个v7包,
方法一:自己手动导入v7包放入到项目的libs中;

方法二:让as编译是,自动去找到;
切换到project中配置,
技术分享
编译项目:用的配置gradle;(配置自己的GRADLE_HOME,防止编译时下下载Gradle,编译速度慢,没有生成一个标准,不方便后面管理配)
技术分享
技术分享

删除项目:
1:先移除model;
技术分享
技术分享
从as的记录中删除。选中项目,直接按住delete键

技术分享
技术分享

Android Studio导入项目

1:导入eclipse项目;(Android Studio默认使用 Gradle 构建项目, Eclipse 默认使用Ant构建项目。建议Android Studio导入项目时,使用 Gradle 构建项目。

方式一:直接导入 Eclipse 项目

技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
当你看到这个界面,就表示导入成功了。项目使用 Ant 构建,并不是Android Studio 默认的 Gradle 。
技术分享
经编译发现问题,lib_v4包重复;去掉一个重新编译;
技术分享
技术分享
这样的导入项目的方式,就会生成的apk,在这样的目录中;
技术分享
回到之前项目目录中,发现多了。此时这个项目同时支持Eclipse和As开发,都是用Ant编译脚本;
技术分享
方式 二使用 Gradle 编译项目
本方法有一个缺点就是,一次只能导入一个 Eclipse 项目。对于那些只使用到了官方系列的支持包的 Eclipse 项目来说,会方面很多,而且同时兼容 Eclipse 文件目录结构。
技术分享
Android Studio识别出你的项目是一个 Eclipse Android 项目,它将重新使用 Gradle 构建项目。
Android Studio会完整复制项目文件到一个新的目录中,你需要设置这个新目录的地址。
技术分享
Replace jars with dependencies,when possible :将 Ant 的 jar 依赖关系使用 dependencies 重构。
Replace library sources with dependencies,when possible :将 Ant 的 library 项目的依赖关系使用 dependencies 重构。
Create Gradle-style(cameCase) module names :使用 Gradle 的样式构建Android Studio的 Module名称。
技术分享
方式 三:直接导入 Generate Gradle build files 项目
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
切入到项目中查看生成多的文件:
我们可以发现:在工作空间目录下,多出了 gradle 文件夹和 build.gradle 、 build.gradle 、 gradlew 、 gradlew.bat 、 settings.gradle 文件;在 e-demo 目录下多出了 build.gradle 文件; 在 appcompat_v7 目录下多出了 build.gradle 文件。这些文件和文件夹都和 Gradle 有关系,用于构建项目。这些文件以及文件夹的作用,我们以后再说。
由于 Eclipse 的 ADT 插件已经很久没有更新了,自动生成的 Gradle 编译设置已经跟不上Android Studio的更新速度,
所以我们需要手动修改一些内容。(一定要记住这里的配置)
1:打开工作空间目录下的 gradle --> wrapper --> gradle-wrapper.properties 。修改一下内容:           distributionUrl=http\://services.gradle.org/distributions/gradle-a.b.c-all.zip --> distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
2:打开工作空间目录下的 build.gradle 文件。修改以下内容:
classpath ‘com.android.tools.build:gradle:0.x.+‘ --> 
classpath ‘com.android.tools.build:gradle:1.1.0‘ 
之所以这么设置,是因为: Eclipse 导出的 Gradle 设置已经不是Android Studio 1.2 所支持的 Gradle 已经 Gradle 插件版本,需要手动更为支持的版本。否则轻则必须不能离线导入项目,重则项目导入失败。
技术分享
技术分享
导入到as中:
此时会弹出一个框,让你选择文件夹,这个时候需要注意的就是,你需要选择原来的 Eclipse 的工作空间目录,而不是 TestAndBuild 目录。
技术分享
对应SDK编译的配置设置;
技术分享
技术分享
可以在这里查看刚才配置的信息;
技术分享
配置设置gradle加载本地的(推荐设置)
技术分享
此处有一些比较重要的设置需要讲解一下。
Gradle project :
此处通常显示的路径并不是你的 Eclipse 的工作空间的目录,而是 Eclipse 的工作空间的目录中的 gradle 路径。你需要手动删除后面的 gradle ,否则项目导入,你是看不到你的代码的,只能看到 gradle 目录下的内容。
Create directories for empty content roots automatically :
不是很明白它的作用,一般默认即可。
Use default gradle wrapper(recommended) 和 Use local gradle disribution :
这两个是让你设置使用的 Gradle 。默认会勾选 Use default gradle wrapper(recommended) ,我们需要手动勾选 Use local gradle disribution 。
Gradle home :
勾选 Use local gradle disribution 后此项编程可编辑状态,默认的此处的地址为Android Studio安装目录中的 Gradle 路径地址。此处可能会有一些错误的警告,提示内容为: Gradle location is incorrect 。而你的这个目录下,确实是有 Gradle 的。产生这个问题的原因,很可能是因为 Gradle home 选项中,路径中的斜杠为 / 而不是 ** 。你需要点击左右的文件选择按钮,重新选择到Android Studio安装目录中的 **Gradle ,问题即可解决。
Offline work :设置 Gradle 使用离线的方式导入项目。你可以勾选也可以不勾选。如果你有进行【设置的两步骤下】的操作,你则可以勾选,以离线的方式进行编译。
测试这个已经配置成gradle编译的项目,所在的项目即可用于as开发也可以用于eclipse开发;
2:导入Android Studio项目;
导入已经是AdnroidStudio项目;如github上的项目;(如本地有代码的话,建议还是配置下gradle版本和插件,设置成自己电脑本地的,那样方便以后编译快)
如:
技术分享


3:其他导入方式;
导入一个项目除了在Android Studio起始页进行导入之外,你也可以在Android Studio主页中进行导入。
File --> Import Project 或者 File --> Import Module 。
技术分享

Android Studio 常用功能介绍
Android Studio 的基本用法
技术分享
这个界面,显示了我们使用 Android Studio时经常接触到的功能面板。
1:Project 面板。
用于浏览项目文件。 Project 面板会显示当前的所有的 module 。 android application module 会显示一个手机图标(下图中的 app );android library module 会显示一个书架图标(下图中的 android-lib );java library module 会显示一个咖啡图标(下图中的 java-lib )。
2:Build Variants 面板。
用于设置当前项目的 Build Variants ( Gradle 知识)。所有的 Module 默认都会有 release 和 debug 两种选项。当你添加了 BuildTypes 和 productFlavors ,这里将出现更多的选项( Gradle 知识)。默认情况下, release 和 debug 的区别并不是很明显;针对于代码来说,是没有区别的。
3:Android 面板。
功能类似于 Eclipse 中的 Logcat ,但是比其多了一些常用功能,例如:截图,查看系统信息等。
4:编辑区。
用于编辑文件。
5:Gradle 面板。
Gradle 任务列表,双击可执行 Gradle 任务。常用任务: build 、 clean 、 assemble 、 assembleRelease 、 assembleDebug 、 lint
切换 Project 视图。
默认的Project 面板显示的目录结构为 Android 。通过点击可以进行切换。
技术分享
常用按钮
技术分享
编译右侧 module 列表中显示的 module 
  1. 当前 project 的 module 列表。
  2. 运行左侧 module 列表中显示的 module 。
  3. debug 左侧 module 列表中显示的 module 。
  4. attach debugger to Android process 。
  5. 设置。
  6. 项目属性。
  7. 使用 Gradle 编译 project 。
  8. 虚拟机。
  9. SDK Manager 。
  10. DDMS 。 
技术分享

.gradle 文件简单介绍(官方文档: http://tools.android.com/tech-docs/new-build-system  )

官方文档对应配置(http://tools.android.com/tech-docs/new-build-system/version-compatibility  ):
技术分享
一个 Android Studio 项目中,会存在多个 .gradle 文件。其中, project 目录下存在一个 build.gradle 文件和一个settings.gradle 文件;每一个 module 会存在一个 build.gradle 文件。
本文只是简略的讲解一下默认生成的 .gradle 文件的内容,更多 Gradle Plugin 的知识;

{@projectName}\build.gradle

  1. // Top-level build file where you can add configuration options common to all sub-projects/modules.
  2. /**
  3. * Groovy 的基本语法
  4. */
  5. /**
  6. * .gradle 文件简单介绍
  7. 一个 Android Studio 项目中,会存在多个 .gradle 文件。其中, project 目录下存在一个 build.gradle 文件和一个 settings.gradle 文件;每一个 module 会存在一个 build.gradle 文件。
  8. 本文只是简略的讲解一下默认生成的 .gradle 文件的内容,更多 Gradle Plugin 的知识,请看这里。{@projectName}\build.gradle
  9. 默认的 project 目录下的 build.gradle 文件内容如上。
  10. buildscript :用于设置驱动构建过程的代码。
  11. jcenter():声明使用 maven 仓库。在老版本中,此处为 mavenCentral()。
  12. mavenCentral() :表示依赖从 Central Maven 2 仓库中获取。
  13. jcenter() :表示依赖从 Bintary’s JCenter Maven 仓库中获取。
  14. 3. **mavenLocal()** :表示依赖从本地的Maven仓库中获取。
  15. dependencies :声明了使用 Android Studio gradle 插件版本。一般升级AS或者导入从Eclipse中生成的项目时需要修改下面gradle版本。具体的版本对应关系,请点击。
  16. allprojects:设置每一个 module 的构建过程。在此例中,设置了每一个 module 使用 maven 仓库依赖。
  17. */
  18. /**
  19. * maven远程库列表
  20. *远程库 地址 镜像
  21. central http://repo1.maven.org/maven2/ http://uk.maven.org/maven2
  22. apache https://repository.apache.org/content/groups/public/
  23. appfuse http://oss.sonatype.org/content/repositories/appfuse-snapshots/
  24. Codehaus Snapshots http://nexus.codehaus.org/snapshots/
  25. Dynamic Jasper http://archiva.fdvs.com.ar/repository/public1/
  26. exoplatform http://repository.exoplatform.org/content/groups/public/
  27. java.net https://maven.java.net/content/groups/public/
  28. JBoss releases https://repository.jboss.org/nexus/content/repositories/releases/
  29. jenkins ci http://maven.jenkins-ci.org/content/repositories/releases/
  30. netbeans http://bits.netbeans.org/maven2/
  31. SpringSource http://repo.springsource.org/release/
  32. */
  33. /**
  34. * 在深圳,默认的maven源可能无法访问,可以通过以下的方式设置其他的maven源。当然,你也可以设置依赖本地库。
  35. maven {url "http://xx.xxx.xxx/xxx"}
  36. 开源中国的源地址为:
  37. http://maven.oschina.net/content/groups/public/
  38. 开源中国的thirdparty源地址为:
  39. http://maven.oschina.net/content/repositories/thirdparty/
  40. 一个项目可以有好几个库。 Gradle 会根据依赖定义的顺序在各个库里寻找它们。在第一个库里找到就不会再在第二个库里进行寻找。
  41. */
  42. buildscript {
  43. repositories {
  44. jcenter()
  45. }
  46. // 本例运行环境为 1.0 版本的 Android Studio、2.2.1 版本的 Gradle 、1.0.0 版本的 Gradle Plugin 。
  47. /**
  48. * 本系列内容包含以下部分:
  49. Gradle Hello World
  50. 讲解一个 Gradle 项目中,基础文件以及文件内容。
  51. Gradle Eclipse Compatible
  52. 讲解对 Eclipse 项目的兼容。讲解 Gradle Plugin 中 sourceSets 元素。
  53. Gradle Library Projects
  54. 讲解 Gradle 依赖。包含 .jar 依赖, Library project 依赖, Maven 依赖。
  55. Gradle Build Configs
  56. 讲解 APK 打包时的签名设置。
  57. Gradle Build Variants
  58. 讲解 Gradle Plugin 中 buildTypes 、 productFlavors 元素。
  59. */
  60. // dependencies :声明了使用 Android Studio gradle 插件版本 1.1后加入了Junit功能;
  61. dependencies {
  62. classpath ‘com.android.tools.build:gradle:1.0.0‘
  63. // NOTE: Do not place your application dependencies here; they belong
  64. // in the individual module build.gradle files
  65. }
  66. }
  67. allprojects {
  68. repositories {
  69. jcenter()
  70. }
  71. }
  72. /**
  73. * 常见使用方法
  74. 包依赖(aar)
  75. 使用aar时可以分为两种情况
  76. ① aar位于本地目录
  77. 首先在 android 的参数闭包中添加调用方法 repositories
  78. repositories {
  79. flatDir {
  80. dirs ‘libs‘
  81. }
  82. }
  83. 然后在 dependencies 的参数闭包中添加
  84. compile name: ‘volley‘, ext: ‘aar‘
  85. ② aar位于远程仓库
  86. 这里以maven为例,当然也可以使用其他类型的仓库,例如 Ivy。
  87. 只需要在jar包引用方式后面添加一个@aar就可以了
  88. compile ‘com.alibaba:fastjson:latest.integration@aar‘
  89. 包依赖(jar)
  90. compile group: ‘com.alibaba‘, module: ‘fastjson‘, version: ‘latest.integration‘
  91. 可以简写成
  92. compile ‘com.alibaba:fastjson:latest.integration‘
  93. latest.integration可以替换成具体的版本号,这里是获取服务器上的最新版本。
  94. 去掉重复依赖
  95. compile ‘com.alibaba.fastjson.latest.integration‘ {
  96. exclude module: ‘annotations‘, group: ‘com.google.android‘
  97. }
  98. */
  99. /**
  100. * 下面以9GAG为例来讲解下命令行Gradle编译的过程。
  101. 1、切换到9GAG项目的根目录,执行 ./gradlew -v 来查看下项目所用的Gradle版本
  102. 如果你是第一次执行会去下载Gradle,这个过程如果不FQ非常慢,建议FQ
  103. 紧接着下载成功会看到如下信息:
  104. ------------------------------------------------------------
  105. Gradle 2.2.1
  106. ------------------------------------------------------------
  107. Build time: 2014-11-24 09:45:35 UTC
  108. Build number: none
  109. Revision: 6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a
  110. Groovy: 2.3.6
  111. Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
  112. JVM: 1.7.0_60 (Oracle Corporation 24.60-b09)
  113. OS: Mac OS X 10.9.5 x86_64
  114. 2、接着执行 ./gradlew clean
  115. 执行这个命令会去下载Gradle的一些依赖,下载成功并编译通过时会看到如下信息:
  116. :app:clean UP-TO-DATE
  117. :extras:ShimmerAndroid:clean UP-TO-DATE
  118. BUILD SUCCESSFUL
  119. 3、最后执行 ./gradlew build
  120. 这个命令会直接编译并生成相应的apk文件,如果看到如下字样就代表build成功了
  121. BUILD SUCCESSFUL
  122. Total time: 31.456 secs
  123. 紧接着在 9GAG/app/build/outputs/apk 目录下会看到类似于app-debug-unaligned.apk, app-release-unsigned.apk等,看名字应该能理解意思,unaligned代表没有进行zip优化的,unsigned代表没有签名的。然后就可以直接安装apk查看运行效果了。
  124. 命令行执行Gradle脚本
  125. 在Android工程根目录下会自动生成一个shell脚本 - gradlew,执行之前记得加上x属性 - chomod +x gradlew
  126. gradle脚本中包含了很多 【task】,可以通过task名来指定需要执行的task。
  127. ./gradlew build
  128. ./gradlew assemble
  129. ./gradlew assembleInnderDebug
  130. 理解了gradle wrapper的概念,下面一些常用命令也就容易理解了。
  131. ./gradlew -v 版本号
  132. ./gradlew clean 清除9GAG/app目录下的build文件夹
  133. ./gradlew build 检查依赖并编译打包
  134. */
  135. /**
  136. * 总结
  137. 不得不说,Gradle实在太好用了!虽然 Gradle 可以与 Ant 或 maven 配合使用,但是其简洁和功能性远远超过其他两个。
  138. 我现在开发的项目普遍使用的是 maven,不知道什么原因,
  139. 使用Gradle时经常会遇到一些无法获取远程依赖包的问题,最简单的解决办法就是把依赖包下载的本地。
  140. */

{@projectName}\settings.gradle


技术分享

{@moduleName}\build.gradle

  1. /**
  2. * {@moduleName}\build.gradle
  3. * 默认的 module 目录下的 build.gradle 文件内容如上。
  4. apply plugin: ‘com.android.application‘:
  5. 表示使用 com.android.application 插件。也就是表示,这是一个 android application module 。 com.android.library 表示,这是一个 android library module 。
  6. android:
  7. 配置所有android构建过程需要的参数。
  8. compileSdkVersion:
  9. 用于编译的 SDK 版本。
  10. buildToolsVersion:
  11. 用于 Gradle 编译项目的工具版本。
  12. defaultConfig:
  13. Android 项目默认设置。
  14. applicationId:应用程序包名。
  15. minSdkVersion:最低支持 Android 版本。
  16. targetSdkVersion:目标版本。实际上应为测试环境下测试机的 Android 版本。
  17. versionCode:版本号。
  18. 5. **versionName**:版本名称。
  19. buildTypes:
  20. 编译类型。默认有两个: release 和 debug 。我们可以在此处添加自己的 buildTypes ,可在 Build Variants 面板看到(见 讲解1 )。
  21. minifyEnabled:
  22. 是否使用混淆。在老版本中为 runProguard ,新版本之所换名称,是因为新版本支持去掉没使用到的资源文件,而 runProguard 这个名称已不合适了。
  23. 2. **proguardFiles**:
  24. 使用的混淆文件,可以使用多个混淆文件。此例中,使用了 **SDK** 中的 **proguard-android.txt** 文件以及当前 **module** 目录下的 **proguard-rules.pro** 文件。
  25. dependencies:
  26. 用于配制引用的依赖。
  27. compile fileTree(dir: ‘libs‘, include: [‘*.jar‘]):
  28. 引用当前 module 目录下的 libs 文件夹中的所有 .jar 文件。
  29. 2. **compile ‘com.android.support:appcompat-v7:21.0.3‘**:
  30. 引用 **21.0.3**版本的 **appcompat-v7** (也就是常用的 **v7** library 项目)。
  31. ps:在 **Eclipse** 中,使用 **android support** ,需要在 SDK 中下载 **Android Support Library** 。在 Android Studio中,使用 **android support** ,需要在 SDK 中下载 **Android Support Repository** ,且项目中使用的版本不能大于 SDK 中的版本。
  32. */
  33. apply plugin: ‘com.android.application‘
  34. android {
  35. compileSdkVersion 21
  36. // buildToolsVersion "21.1.2"
  37. buildToolsVersion "22.0.1"
  38. /*加入.so:*/
  39. // (1)老版本,好像是指0.5以前的,具体不太记得了,方法如下:
  40. // (注意:代码中的‘:MyProject‘一定要换成你的项目名字哦)
  41. // task copyNativeLibs(type: Copy) {
  42. // from(new File(project(‘:Direct-Load-apk‘).buildDir, ‘native-libs‘)) { include ‘**/*.so‘ }
  43. // into new File(buildDir, ‘native-libs‘)
  44. // }
  45. //
  46. // tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
  47. //
  48. // clean.dependsOn ‘cleanCopyNativeLibs‘
  49. //
  50. // tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
  51. // pkgTask.jniDir new File(buildDir, ‘native-libs‘)
  52. // }
  53. // (2)新版本,具体版本号忘记了,反正如果你下载的是最新的那么自带就是最新的编译器。
  54. // 移除lint检查的error
  55. // lintOptions {
  56. // abortOnError false
  57. // }
  58. /**
  59. * 使用 Java7
  60. */
  61. // compileOptions {
  62. // sourceCompatibility JavaVersion.VERSION_1_7
  63. // targetCompatibility JavaVersion.VERSION_1_7
  64. // }
  65. /**
  66. * 这个配置应用用在从Eclipse导入的项目
  67. */
  68. // sourceSets {
  69. // main {
  70. // jniLibs.srcDirs = [‘libs‘]
  71. // manifest.srcFile ‘AndroidManifest.xml‘
  72. // java.srcDirs = [‘src‘]
  73. // resources.srcDirs = [‘src‘]
  74. // aidl.srcDirs = [‘src‘]
  75. // renderscript.srcDirs = [‘src‘]
  76. // res.srcDirs = [‘res‘]
  77. // assets.srcDirs = [‘assets‘]
  78. // }
  79. //
  80. // // Move the tests to tests/java, tests/res, etc...
  81. // instrumentTest.setRoot(‘tests‘)
  82. //
  83. // // Move the build types to build-types/<type>
  84. // // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
  85. // // This moves them out of them default location under src/<type>/... which would
  86. // // conflict with src/ being used by the main source set.
  87. // // Adding new build types or product flavors should be accompanied
  88. // // by a similar customization.
  89. // debug.setRoot(‘build-types/debug‘)
  90. // release.setRoot(‘build-types/release‘)
  91. // }
  92. /**
  93. * 现在碰到的问题是如何触发这个事件打包
  94. * signingConfigs 元素用于设置签名文件信息。在本例中,我们使用了 app/keystore 文件为 release 分支进行签名。
  95. * 默认使用 SDK 中的 debug.keystore 为 debug 分支进行签名。
  96. */
  97. signingConfigs {
  98. release {
  99. storeFile file(‘keystore‘)
  100. storePassword ‘helloworld‘
  101. keyAlias ‘Android Release Key‘
  102. keyPassword ‘helloworld‘
  103. }
  104. }
  105. defaultConfig {
  106. applicationId "com.zsy.testasbuild"
  107. minSdkVersion 14
  108. targetSdkVersion 21
  109. versionCode 1
  110. versionName "1.0"
  111. }
  112. /**
  113. * Gradle Build Variants
  114. 本例用于讲解如何使用 Gradle 利用一份代码生成多种 APK 。
  115. 本例中, app 文件夹中,除了默认会生成的 main 目录以及 androidTest 目录之外,我额外添加了6个目录,
  116. 分别是: release 、 debug 、 buildtypesnochange 、 playstore 、 amazonstore 、 productflavorsnochange 。
  117. 同时,我们在 app/build.gradle 中将这 6 个文件夹分不到 buildTypes 和 productFlavors 中。
  118. 设置所有的 buildTypes 的 zipAlignEnabled 为 false 目的是为了只生成 unaligned 的 APK ,用于只产生 9 个 APK 。
  119. 因为 unaligned 的 APK 是编译 aligned 的 APK的中间产物,会影响我们最终编译出的 APK 的个数。
  120. 为 release 和 buildtypesnochange 设置签名是为了方便安装到设备中。
  121. 观察 Android Studio 中 Build Variants 面板,发现 app 的选项列表已经不是默认的 release 和 debug 了
  122. 这些列表是一个 productFlavors 和一个 buildTypes 组装的结果。
  123. 在 Android Studio 的 Gradle Plugin 中,每一个 APK 均是由一个 buildTypes 和一个 productFlavors 组装而成。
  124. 在默认的情况下, buildTypes 有 release 和 debug 两个分支; productFlavors 没有。
  125. 每一个 module/src 都有一个名称为 main 的文件夹。这个文件夹属于 buildTypes 和 productFlavors 基础,
  126. buildTypes 和 productFlavors 都可以访问和修改 main 文件夹中的内容。
  127. 现在发现还是gradle编译不过;(不知道如何原因)
  128. 我们通过 gradle build 命令,可以生成 9 种不同的 APK ,
  129. */
  130. buildTypes {
  131. // 我们可以在 buildTypes 中对 APK 的一些信息可以设置,例如本例中将 debug 分支下 APK 包名在默认的包名后追加 .debug ,从而最终包名为 cc.bb.aa.gradle_build_configs.debug:
  132. /**
  133. * debug 类型的 APK 的名称为 Debug;release 类型的 APK 的名称为 Release;
  134. * buildtypesnochange 类型的 APK 的名称为 playstore 、 amazonstore 、 productflavorsnochange 中设置的 apname 名称(分别对应 Play 、 Amazon 、 Gradle-Build-Variants 。
  135. * buildtypesnochange 和 productflavorsnochange 中没有设置 appname ,则使用了 main 中的 appname)。
  136. debug 类型的 APK 的图标为 D;release 类型的 APK 的图标为 R;
  137. buildtypesnochange 类型的 APK 的图标为 playstore 、 amazonstore 、 productflavorsnochange 中设置的 apname 图标(分别对应图标 P 、 A 、Android 默认图标。
  138. buildtypesnochange 和 productflavorsnochange 中均没有设置 ic_launcher.png ,则使用了 main 中的 ic_launcher.png)。
  139. 在类 MainActivity 中,有这么一段代码:
  140. TextView textView = (TextView) findViewById(R.id.textview);
  141. textView.append("\nappName = " + getString(R.string.app_name));
  142. textView.append("\nBuildTypesName = " + BuildTypesUtils.getBuildTypesName());
  143. textView.append("\nProductFlavorsName = " + ProductFlavorsUtils.getProductFlavorsName());
  144. textView.append("\npackageName = " + getPackageName());
  145. 实际上,在 main 文件夹中,并没有定义 BuildTypesUtils 类和 ProductFlavorsUtils 类( BuildTypesUtils 类定义在 release 、 debug 、 buildtypesnochange 中;
  146. ProductFlavorsUtils 类定义在 playstore 、 amazonstore 、 productflavorsnochange 中),但是我们可以使用这些类。
  147. 当你在 Android Studio 的 Build Variants 面板中切换当前选择的 Build Variants ,你会发现在 Project 面板中,
  148. 对应的两个文件夹的 java 和 res 文件夹的图标会发生变化(显示为资源文件夹图标的样式),而 main 文件夹中的这两个文件夹一直表现为资源文件夹图标的样式。
  149. 你在 Build Variants 面板切换 Build Variants ,实际上是在更改当前编译的分支。当你选择了一个 Build Variants 后,
  150. Android Studio 会编译改 Build Variants 对应的 buildTypes 和 productFlavors 中的类以及资源文件,重新组装,形成新的 App 。
  151. 所谓的重新组装,简单理解起来就是,将当前的 Build Variants 对应的 buildTypes 文件夹中的内容、当前的 Build Variants 对应的 productFlavors 对应的文件夹中的内容、 main 文件夹中的内容合并到一起,形成一个并集。
  152. 合并规则:
  153. 图片、音频、 XML 类型的 Drawable 等资源文件,将会进行文件级的覆盖(本例中的 ic_launcher.png)。
  154. 字符串、颜色值、整型等资源以及 AndroidManifest.xml ,将会进行元素级的覆盖(本例中的 appname 、 hello_world)。
  155. 代码资源,同一个类, buildTypes 、 productFlavors 、 main 中只能存在一次,否则会有类重复的错误(这就是为什么本例中没有在 main 中定义 BuildTypesUtils 类和 ProductFlavorsUtils 类)。
  156. 覆盖等级为:buildTypes > productFlavors > main (这就是为什么 release 类型的 APK 的名称都是 Release ;
  157. debug 类型的 APK 的名称都是 Debug ; buildtypesnochange 类型的 APK 的名称需要根据 productFlavors 来确定)。
  158. */
  159. debug {
  160. applicationIdSuffix ".debug"
  161. zipAlignEnabled false
  162. }
  163. release {
  164. // 是否进行混淆
  165. // minifyEnabled也是最新的语法,很早之前是runProguard,这个也需要更新下。
  166. minifyEnabled false
  167. // 混淆文件的位置
  168. proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
  169. applicationIdSuffix ‘.release‘
  170. signingConfig signingConfigs.release
  171. zipAlignEnabled true
  172. }
  173. /**
  174. * Gradle进行方便的多渠道打包;assemble还可以和productFlavors结合使用,具体在下一篇多渠道打包进一步解释
  175. */
  176. // buildtypesnochange {
  177. // signingConfig signingConfigs.release
  178. // zipAlignEnabled false
  179. // }
  180. // 移除lint检查的error
  181. lintOptions {
  182. abortOnError false
  183. }
  184. }
  185. productFlavors {
  186. playstore {
  187. applicationId ‘com.zsy.testasbuild.playstore‘
  188. // applicationName "playstore"
  189. }
  190. amazonstore {
  191. applicationId ‘com.zsy.testasbuild.amazonstore‘
  192. // applicationName "amazonstore"
  193. }
  194. productflavorsnochange {
  195. }
  196. }
  197. }
  198. /**
  199. * Gradle Library Projects
  200. Gradle 项目可以依赖于其它组件。这些组件可以是外部二进制包,或者是其它的 Gradle 项目。
  201. */
  202. dependencies {
  203. // Remote artifacts(远程文件)compile ‘com.android.support:appcompat-v7:21.0.2‘
  204. /**
  205. * 引用 21.0.2 版本的 appcompat-v7 。
  206. 在 Android Studio中,使用 android support ,需要在 SDK 中下载 Android Support Repository ,且项目中使用的版本不能大于 SDK 中的版本。
  207. 当你的 SDK 中已经下载指定版本的 Android Support Repository ,即使没有联网,你也是可以在 Android Studio 中依赖对应的文件。
  208. 如果你的 SDK 没有下载指定版本的 Android Support Repository ,即使你现在连着网,也会出错。
  209. */
  210. compile ‘com.android.support:appcompat-v7:22.1.1‘
  211. // compile ‘com.android.support:support-v4:21.0.2‘
  212. // compile ‘com.android.support:support-v4:21.+‘
  213. // Local packages(本地包)
  214. // 引用 libs 目录下的所有的 .jar 文件。如果你指向引用 libs 目录下中一个指定的 jar ,你可以这么设置:
  215. // 引用libs文件夹下除xx.jar以外所有的jar。
  216. // compile fileTree(dir: ‘libs‘, include: [‘*.jar‘], exclude: [‘xx.jar‘])
  217. // compile files(‘libs/xx.jar‘)
  218. compile fileTree(include: [‘*.jar‘], dir: ‘libs‘)
  219. // compile ‘com.android.support:appcompat-v7:21.0.3‘
  220. // compile ‘com.jakewharton:butterknife:6.0.0‘
  221. // compile ‘com.nhaarman.listviewanimations:lib-core:3.1.0@aar‘
  222. // compile ‘com.nhaarman.listviewanimations:lib-manipulation:3.1.0@aar‘
  223. // compile ‘com.nhaarman.listviewanimations:lib-core-slh:3.1.0@aar‘
  224. // compile ‘com.umeng.analytics:analytics:latest.integration‘
  225. // compile ‘com.github.gabrielemariotti.changeloglib:library:1.5.2‘
  226. // compile ‘com.hannesdorfmann.smoothprogressbar:library:1.0.0‘
  227. // compile ‘com.github.castorflex.smoothprogressbar:library-circular:1.0.0‘
  228. // 引用 lib 工程。
  229. // compile project(‘:app‘)
  230. // 编译extras目录下的ShimmerAndroid模块
  231. // compile project(‘:extras:ShimmerAndroid‘)
  232. // Java 在做 Unit Test 的时候,最常用的便是 JUnit 了,所以我们需要加入 JUnit 的依赖。在 {@projectName}/{@moduleName}/build.gradle 中添加 JUnit 的 Maven 依赖。
  233. // testCompile 意思为,test模式下依赖某一个库,该库不会在我们正式发布时打包到我们的程序中,作用和 debugCompile 类似。
  234. // testCompile ‘junit:junit:4.12‘
  235. }
  236. /**
  237. * if this project form eclipse export ;
  238. * Gradle Eclipse Compatible
  239. 当你的项目从 Eclipse 中使用 Generate Gradle build files 导出的时候。为了兼容 Eclipse 的文件结构, Gradle 对资源文件目录、代码文件目录等目录进行了设置。
  240. 默认的,导出项目中没有 {@projectName}/settings.gradle 文件,而且 {@projectName}/build.gradle 和 {@moduleName}/build.gradle 文件进行了合并。合并后的文件内容如下:
  241. buildscript {repositories {mavenCentral()}dependencies {classpath ‘com.android.tools.build:gradle:1.0.0‘}}apply plugin: ‘android‘
  242. dependencies {compile fileTree(dir: ‘libs‘, include: ‘*.jar‘)}android {compileSdkVersion 21
  243. buildToolsVersion "21.1.2"
  244. sourceSets {main {manifest.srcFile ‘AndroidManifest.xml‘
  245. java.srcDirs = [‘src‘]
  246. resources.srcDirs = [‘src‘]
  247. aidl.srcDirs = [‘src‘]
  248. renderscript.srcDirs = [‘src‘]
  249. res.srcDirs = [‘res‘]
  250. assets.srcDirs = [‘assets‘]}// Move the tests to tests/java, tests/res, etc...
  251. instrumentTest.setRoot(‘tests‘)
  252. // Move the build types to build-types/<type>
  253. // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
  254. // This moves them out of them default location under src/<type>/... which would
  255. // conflict with src/ being used by the main source set.
  256. // Adding new build types or product flavors should be accompanied
  257. // by a similar customization.
  258. debug.setRoot(‘build-types/debug‘)
  259. release.setRoot(‘build-types/release‘)}}和默认的 Android Studio {@moduleName}/build.gradle 文件相比, sourceSets 算是最大的区别了。 sourceSets 用于设置文件目录。
  260. main 元素表示默认的主干,出了 main 之外,默认的会有 release 和 debug 分支。如果 release 和 debug 分支中有些文件所在的目录不在默认目录同时也不再 main 所设置的目录,你可以在对应的分支中进行设置。
  261. */
  262. /**
  263. * ps:补充内容
  264. 关于依赖更多的补充内容如下:
  265. * dependencies {// 引入 jar 包。
  266. // 引用某一个特定的jar。
  267. compile files(‘libs/xx.jar‘)
  268. // 引用libs文件夹下除xx.jar以外所有的jar。
  269. compile fileTree(dir: ‘libs‘, include: [‘*.jar‘], exclude: [‘xx.jar‘])
  270. // so包在0.8版本的Android Studio中的目录更改为@{ModuleName}/src/main/jniLibs。且可以不用在此处配置so了。
  271. // 从 maven 库中引入。
  272. //compile ‘com.github.chrisbanes.actionbarpulltorefresh:extra-abc:0.9.2‘
  273. // 引用 lib 工程。
  274. compile project(‘:moduleName‘)
  275. // 引用users-library。users-library作用是,在编译时使用,但是jar不会打包到apk中,由Android或Android上安装的服务提供需要的内容。
  276. // 使用场景:
  277. // 1. 使用Android的framework-classes.jar中的一些隐藏的API。
  278. // 2. Google的服务框架或者其他服务框架。需要在AndroidMainFest.xml中配合uses-library使用。
  279. provided files(‘libs/xx.jar‘)
  280. provided ‘aaa:bbb:x.x.x‘
  281. // 在测试环境下引用依赖。
  282. // 引用jar文件。
  283. androidTestCompile files(‘libs/xx.jar‘)
  284. // 引用Maven。
  285. androidTestCompile ‘junit:junit:4.11‘
  286. // 在baidu productFlavors分支下引用依赖。
  287. // 引用jar文件。
  288. baiduCompile files(‘libs/xx.jar‘)
  289. // 引用Maven。
  290. baiduCompile ‘aaa:bbb:x.x.x‘
  291. // 在release buildTypes分支下引用依赖。
  292. // 引用jar文件。
  293. releaseCompile files(‘libs/xx.jar‘)
  294. // 引用Maven。
  295. releaseCompile ‘aaa:bbb:x.x.x‘}*/

版本控制
当你在 Android Studio中创建了一个项目之后,默认是没有版本控制的。如果你想对项目进行版本控制,可以这么设置。
VCS --> Enable Version Control Integration 
技术分享
如果你想取消某一个项目的版本控制,你可以在设置页面中设置。
Version Control 右侧列表中,选择目标 module ,在点击右侧的减号即可。
技术分享
如果你想从版本服务器中迁出项目,你可以这么设置。
VCS --> Checkout from Version Control ,选择服务器的版本控制工具,填写地址即可迁出。
技术分享
在 Android Studio 起始页面也可以进行迁出。
点击 Checkout from Version Control,选择服务器的版本控制工具,填写地址即可迁出。
设置控制git和svn提交提示信息:
技术分享
技术分享
git(github版本控制)
ignore文件提交设置:
技术分享
技术分享
技术分享
SVN版本控制:跟Git和SVN(一定要配置跟系统一样的.exe那样在项目才能同时操作,两不误)
发现svn没有配置svn工具exe;这样就会出现as的插件和在项目目录中单独用TortoiseSVN不能同时用;
技术分享
如下:(ps:这里一定要不要选择升级工作副本,要不然会出现不能同步svn,和配置svn同步提交代码等各种问题)
技术分享
技术分享
所以得修改一下配置:
己独立安装带有 command line 功能的 SVN 客户端,我使用的是TortoiseSVN,据说 1.7 之后开始支持 command line 模式,我现在用的是 1.8.11 版本
如图,安装时必须自定义选择 command line 否则不会安装的
技术分享技术分享
Use Command Line Client 选择浏览到你本地安装 TortoiseSVN 的 svn.exe 文件路径,(注意输入框最右侧有个浏览的按钮,有可能没显示出来,拉伸窗口即可见
技术分享
技术分享
技术分享
配置好后重新下载svn项目代码:(记住这里一定要选择1.8版本到后面才有效,记住这里的1.8不是JDK的版本配置而是SVN自己版本配置)
技术分享
发现此时都已经配置上的svn管理:
技术分享
由于SVN的忽略用开放工具不好设置(ps:git有插件很好管理),所以我们得通过 TortoiseSVN 来添加忽略;
技术分享


 AS常用插件安装配置:
下载不了直接用浏览器下载后,再本地更新:
技术分享
技术分享
离线安装插件:(安装完后,重启as)
技术分享
技术分享
技术分享
常用配置安装的插件:
技术分享
技术分享
个人禁用了一下插件:
CVS Integration : CVS 版本控制系统,用不到。
Google Cloud Tools For Android Studio : Google云 用不到。
Google Login : Google账号登录,`Google Cloud Tools For Android Studio** 插件需用,用不到。
hg4idea : Mercurial 版本控制系统,用不到。

你可以在 Browse repositories 页面中,搜索插件并安装。
我个人额外安装的插件:
.gitignore support : Git 版本控制系统中 .gitignore 文件管理插件。

常碰到的问题:
1:不能自动实现方法;
     在类头部按下,Alt+Enter键,按提示加入;
    技术分享
    技术分享
2:和包名引入;
    在方法按下,Alt+Enter键,按提示加入;
    技术分享
3:as编译器中间有一根线;
    方法一:直接设置不要显示;
    技术分享
    方法二:设置线显示的间距远一点;
    技术分享
4:如何折叠代码
    技术分享
5:设置编译器代码自动换行        技术分享
6:关闭打开Project树的快捷键
    Alt+1
7:   找方法的父类,方面集成
 技术分享    技术分享
8:   Android Studio代码自动提示无效(not available in Power Save mode)
不生效的原因是因为你AS设置成了省电模式,设置成省电模式了的话,AS会禁掉一些辅助功能,达到省电的目的。所以代码自动提示也被禁掉了。
要修改回来的话,通过File选项,然后倒数第二项:Power Save Mode前面的勾点掉就可以了
技术分享  
9:查找那里用过这个类或方法;
 技术分享   技术分享
10:显示代码的行号;
    方法一:临时设置;
    技术分享
方法二:全局设置;
    技术分享    
11:设置快捷键格式样式;
技术分享
12:设置样式:
技术分享
    如果自己不喜欢这种样式。可以自己配置样式;如配置保护色背景(个人还是喜欢Darcula);设置background的色值为(199, 237, 204)
技术分享
    
13:设置开发工具退出弹出框:
技术分享
14:自动保存配置设置:
技术分享
15:设置字体大小:
技术分享
16:配置插件:
技术分享
 17:设置项目编码格式:
技术分享
 18:规范代码格式化配置:
技术分享
技术分享
 19:设置默认web浏览器:
技术分享
 20:看出缩进是 tab 缩进还是空格缩进。建议使用空格缩进。
技术分享
21:检查更新
Android Studio支持自动检查更新。之前尚未发布正式版时,一周有时会有几次更新。你可以设置检查的类型,用以控制更新类型。
Settings --> Updates 。勾选 Check for updates in channel ,即开通了自动检查更新。你可以禁用自动检查更新。右侧的列表,是更新通道。
Stable Channel : 正式版本通道,只会获取最新的正式版本。
Beta Channel : 测试版本通道,只会获取最新的测试版本。
Dev Channel : 开发发布通道,只会获取最新的开发版本。
Canary Channel : 预览发布通道,只会获取最新的预览版本。

以上4个通道中, Stable Channel 最稳定,问题相对较少, Canary Channel 能获得最新版本,问题相对较多。
技术分享
22:自动导入
当你从其他地方复制了一段代码到Android Studio中,默认的Android Studio不会自动导入这段代码中使用到的类的引用。你可以这么设置。
Settings --> Editor --> Auto Import ,勾选 Add unambiguous improts on the fly 。
23、成员变量前缀。
如果你命名成员变量习惯前面加一个m的前缀,但是生成getter和setter的时候,又不希望方法名中有这个m,可以如下设置。
File->Settings->Code Style->Java,然后在右边面板中选择Code Generation标签,Naming,Field这一行,对应的Name prefix中加上m.
24、方法排序。
如果你总是调整自己写的方法,以使互相调用或功能相关的方法能靠近,可以这样设置。
如第23条的步骤,在标签中选择Arrangment,勾住Keep dependent methods together,后面可以自己选择是按广度排序还是按深度排序。
25、新文件的注释模板。
File->Settings,搜索comment,找到File and Code Templates,右边面板,Templates->Class,然后修改编辑框里的内容。下面是接口(Interface)的注释模板。我的注释模板如下:
技术分享
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end  
  
/** 
 * @author: samy(hongfeiliuxing@gmail.com) 
 * @datetime: ${YEAR}-${MONTH}-${DAY}${HOUR}:${MINUTE}:${SECOND}
 * @datetime: ${DATE} ${TIME}
 */  
public class ${NAME} {  
}  
你也可以在Include标签中,备份一下原来的File Header,然后修改它。
  1. # coding = utf-8
  2. ‘‘‘
  3. * @dec:Python model
  4. * @author: samy(hongfeiliuxing@qq.com)
  5. * @datetime: 2015-05-21 23:38
  6. ‘‘‘
  1. # coding = utf-8
  2. ‘‘‘
  3. * @dec:
  4. * @author: samy(hongfeiliuxing@qq.com)
  5. * @datetime: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE}
  6. ‘‘‘
多渠道打包
8.4.1配置渠道

以友盟统计为例;

第一步 在AndroidManifest.xml里配置PlaceHolder:

技术分享

第二步 在build.gradle设置productFlavors

技术分享

以上两步即可。当然也有可视化的方法。

技术分享

技术分享

8.4.2打包

打包也有两种方式,命令行,和可视化界面的。

首先看命令行,在project的根目录下打开命令行。第一次运行的时候,可能会下载一些库文件。当全部打包完的时候,就在module的build文件下生成了相应的apk文件。

技术分享

技术分享

 

下面看可视化的方法。

技术分享

技术分享

技术分享

全部选中。Finish。

技术分享

区别:目前发现有个区别,不知道是不是我操作的问题,命令行打包的apk,是没有证书的,是需要重新签名的。而可视化的操作,是有证书的。

 

调试功能

先编译好要调试的程序。

1.设置断点

技术分享

选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。

 2.开启调试会话

技术分享

点击红色箭头指向的小虫子,开始进入调试。

IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法f2()中,程序的第11行。红色箭头悬停的区域是程序的方法调用栈区。在这个区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早。

 3.单步调试

3.1 step over

技术分享

点击红色箭头指向的按钮,程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行)

3.2 step into

 技术分享

点击红色箭头指向的按钮,程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。具体步骤如下:

在自定义方法发f1()处设置断点,执行调试

技术分享

 点击技术分享

技术分享

 3.3 Force step into 

技术分享

该按钮在调试的时候能进入任何方法。

3.4 step out

技术分享

 如果在调试的时候你进入了一个方法(如f2()),并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。

3.5 Drop frame

技术分享

 点击该按钮后,你将返回到当前方法的调用处(如上图,程序会回到main()中)重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。

4. 高级调试

4.1 跨断点调试

设置多个断点,开启调试。

技术分享

 想移动到下一个断点,点击如下图:

技术分享

程序将运行一个断点到下一个断点之间需要执行的代码。如果后面代码没有断点,再次点击该按钮将会执行完程序。

4.2 查看断点

技术分享

 点击箭头指向的按钮,可以查看你曾经设置过的断点并可设置断点的一些属性。

技术分享

箭头1指向的是你曾经设置过的断点,箭头2可以设置条件断点(满足某个条件的时候,暂停程序的执行,如 c==97)。结束调试后,应该在箭头1处把所设的断点删除(选择要删除的断点后,点击上方的红色减号)。

 4.3 设置变量值

技术分享

 调试开始后,在红箭头指向的区域可以给指定的变量赋值(鼠标左键选择变量,右键弹出菜单选择setValue...)。这个功能可以更加快速的检测你的条件语句和循环语句。

  








padding: 0px;">技术分享

 点击该按钮后,你将返回到当前方法的调用处(如上图,程序会回到main()中)重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。

4. 高级调试

4.1 跨断点调试

设置多个断点,开启调试。

技术分享

 想移动到下一个断点,点击如下图:

技术分享

程序将运行一个断点到下一个断点之间需要执行的代码。如果后面代码没有断点,再次点击该按钮将会执行完程序。

4.2 查看断点

技术分享

 点击箭头指向的按钮,可以查看你曾经设置过的断点并可设置断点的一些属性。

技术分享

箭头1指向的是你曾经设置过的断点,箭头2可以设置条件断点(满足某个条件的时候,暂停程序的执行,如 c==97)。结束调试后,应该在箭头1处把所设的断点删除(选择要删除的断点后,点击上方的红色减号)。

 4.3 设置变量值

技术分享

 调试开始后,在红箭头指向的区域可以给指定的变量赋值(鼠标左键选择变量,右键弹出菜单选择setValue...)。这个功能可以更加快速的检测你的条件语句和循环语句。

  








评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!