题外话

不得不说这是一个老生常谈的话题,从我们开始学习一门新语言或者接触一个新的开发平台,面临的第一个问题就是开发工具的选择与熟悉,写这个话题一方面是MDG第一篇总结,另一方面也是知乎上一个用户问的一个问题,他想让我推荐一本以Android Studio(后面都简称as)为开发工具的Android入门书籍,其实做久了Android的都知道,网上讲解as的系列文章有很多(我把不错的都列在文章结尾),然后呢,Android入门书籍也有很多,其中大家公认的郭神的《第一行代码》算是经典,但是这本书写的比较早,里面的代码所用的开发工具还都基于eclipse,然后这对于我们新进入Android开发领域的同学似乎有点犯难了,总觉得有本两者结合的书那该有多好。其实这些都无可厚非,这篇文章想从Android Studio下手(当然我会挑常用的来列)来聊聊开发工具的一些琐碎的东西。

不得不说我是一个JetBrains公司的超级粉,从Web开发的IntelliJ IDEA到前端开发的WebStorm,从Python开发的PyCharm到Android开发的as(基于JetBrains的IntelliJ IDEA Community Edition),从我一开始学习了其中一个,然后切换到其他任何一个,其实都不是很困难,因为他们有很多相似的地方。这里先不谈这些,言归正传:我把开发工具的熟悉呢分为三个方面:代码编辑、编译调试、发布部署,这也是按照我们项目开发的流程来的。在说这个之前,可能有必要提下它与eclipse的工程区别:

  • as是单个工程的开发模式;其实JetBrains公司的其它几款产品也有类似开发模式。
  • as中的application相当于eclispe中的workspace
  • as中的module相当于eclipse中的project

1. 关注Tips

如果你在第一次打开之后设置了不再显示,也没有关系,可以从菜单——>Help——>Tip of the day中找到:

image

另外值得一提的是,国外开发者整理的Tips库Android-Studio-Tips-by-Philippe-Breault

2. Android Studio项目目录

关于项目目录的一些菜单,如下图这部分:

image image

  • 文件和导航关联
    我们在写代码的时候经常需要打开某个文件的时候,想在左边的文件树上自动打开关联到位置,这样很方便的找寻本目录下的其他文件或者其他的相关文件,AS提供了这几种方案:
  1. 通过点击图中红框圈住的最左边的小圆圈
  2. 通过设置勾选AutoScroll to SourceAutoScroll from source
  3. 通过点击小圆圈右边的折叠导航按钮打开Navigation Bar,操作方式就是打开文件的时候,然后就会出现一个下拉,基本就是这个文件所在目录的文件列表,还可以使用上下左右的键位来选择其他目录。
  • AS针对左边项目目录提供两种视图:平铺和树状(如上图),这里有一点值得要提的是,当我们想在同一个目录下同时建立两个空文件夹时,在这两种视图模式下,记得要把Hide Empty Middle PackageCompact Empty Middle Package给勾掉
  • 如果我们想在类中的成员显示在左边导航,记得勾选Show Members

3. 常用设置

  • 中文乱码:找到IDE preferences -> Appearance,在右侧勾选上“Override default fonts by”,然后在第一个下拉框中选择字体为“simsun”,然后apply,重启IDE,可以解决。
  • 设置快捷键:IDE preferences -> Keymap 可以选择自己喜欢的Eclipse快捷键或者其他的。当然也可以修改或者删除
  • 设置行号:IDE preferences -> Editor -> General -> Appearance -> Show line numbers 勾选 ,然后点击应用。
  • 设置主题:找到IDE preferences -> Appearance ,右侧Theme,我自己有在用Darcula。
  • Eclipse工程导入AS:直接通过File -> Import Project然后在弹出的对话框中选择项目,注意Project和Module的区别。
  • 右键删除项目:我们首先需要通过在Module Setting中移除module,即在打开的对话框点击减号,然后回到项目可以发现右键菜单的delete选项。
  • 我们只有每次引用一些类的时候必须要导包,而Studio可以通过设置自动导包:
    到 Preferences -> Editor —> General -> Auto Import -> Java 把以下选项勾上就OK了

image

4.常用快捷键

操作 Mac OSX Win/Linux
注释代码(//) Cmd + / Ctrl + /
注释代码(/**/) Cmd + Option + / Ctrl + Shift + /
格式化代码 Cmd + Option + L Ctrl + Alt + L
清除无效包引用 Option + Control + O Alt + Ctrl + O
查找 Cmd + F Ctrl + F
查找+替换 Cmd + R Ctrl + R
上下移动代码 Option + Shift + Up/Down Alt + Shift + Up/Down
删除行 Cmd + Delete Ctrl + Y
扩大缩小选中范围 Option + Up/Down Ctrl + W/Ctrl + Shift + W
快捷生成结构体 Cmd + Option + T Ctrl + Alt + T
快捷覆写方法 Cmd + O Ctrl + O
快捷定位到行首/尾 Cmd + Left/Right Ctrl + Left/Right
折叠展开代码块 Cmd + Plus,Minus Ctrl + Plus/Minus
折叠展开全部代码块 Cmd + Shift + Plus,Minus Ctrl + Shift + Plus,Minus
文件方法结构 Cmd + F12 Ctrl + F12
查找调用的位置 Ctrl + Option + H Ctrl + Alt + H
大小写转换 Cmd + Shift + U Ctrl + Shift + U

5. Gradle基础

先来看项目结构:

  • src/main/ //源代码
  • src/androidTest/ //测试代码

源代码下面:

  • java/ //Java代码
  • resources/ //资源文件

另外还有针对Android特有的文件和文件夹:

  • AndroidManifest.xml
  • res/
  • assets/
  • aidl/
  • rs/
  • jni/
  • jniLibs/

对于旧工程不满足默认的项目工程目录,所以我们还需要灵活配置,让它们重新映射到新的资源文件或者文件夹里面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
androidTest.setRoot('tests')
}
}

项目构建

通常情况下任务约定由assemble(编译)、check(检查)、build(构建)、clean(清理) 其中build包含了assemble和check

Build Types:
默认Android plugin提供了debug和release两个构建变量,当然,我们同时也可以自定义构建变量,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
jnidebug {
initWith(buildTypes.debug)
applicationIdSuffix ".jnidebug"
jniDebuggable true
}
}
}

上面新建了一个jnidebug的构建变量,另外为了保证可以安装在同一个设备上,我们这里修改了他们的applicationId,即加上分别加上后缀’.debug’和’.jnidebug’,另外通过initWith方法来指定jniDebug是从debug这个基础上的一个副本,然后通过jniDebuggable配置来启用JNI组件的构建调试。

除此之外,我们也可以用构建变量添加指定的代码和资源文件,对于每个构建变量,在一个新的sourceSet被创建后,它都有一个默认位置:src/<buildtypename>,如:src/debug/java 目录,它可以用来放只在编译debug APK时才会被编译的代码,这也就意味着构建变量名字不能是main或者androidTest(插件强制的),它们必须是独一无二的。

像其他源码集一样,它可以被重新定位:

1
2
3
android {
sourceSets.jnidebug.setRoot('foo/jnidebug')
}

当然,对应我们也会生成一个新的assembleJnidebug任务,它和默认的debug/release一样。

签名

签名一个App需要下面这几样:

  • A keystore
  • A keystore password
  • A key alias name
  • A key password
  • The store type
移动开发者/技术爱好者/喜欢开源与分享,欢迎关注微信公众号MobDevGroup,移动开发在线分享:MobDevGroup,我会长期分享干货在上面。