android的起源
2003年10月,Andy Rubin等人一起创办了Android公司。
2005年8月,Google收购了这家公司。
2008年推出了Android系统的第一个版本
Android系统架构
1、Linux内核层
基于Linux内核的,为Android系统的各种硬件提供了底层的驱动,如:显示驱动、音频驱动、照相机驱动、蓝牙驱动、WI-FI驱动、电源管理
2、系统运行库
通过一些C/C++库来为Android系统提供了主要的特性支持。如:SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持
Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为ART运行环境),它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalivk虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,他针对于手机内存、CPU性能有限等情况做了优化处理
3、应用框架层
提供了构建应用程序时可能用到的各种API
4、应用层
所有安装在手机上的应用程序都属于这一层
android版本
查看android系统版本及数据: http://developer.android.com/about/dashboard/
2014年Google I/O大会上,Google推出了号称世上版本改动最大的Android5.0系统,其中使用ART环境代替Dalvik虚拟机,大大提升了应用的运行速度,还提出了Material Design 的概念来优化应用的界面设计、还推出了 Android Wear 、Android Auto、Android TV系统,从而进军可穿戴设备、汽车、电视等全新领域
2015年Google I/O大会上推出了Android6.0系统,加入了运行时权限功能
2016年Google I/O大会推出了Android7.0系统,加入了多窗口模式功能,这也是目前最新的Android系统版本
Android应用开发特色
- 四大组件
activity:凡是在应用中你看到的东西,都放在activity中
service:无法看到,但是会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的
BroadCast Receiver:允许你的应用接收来自各处的广播消息,当然应用也可以向外发出广播消息
Content Provider:微应用程序之间共享数据提供了可能
-
丰富的系统控件
-
SQLite数据库
轻量级、运算速度极快的嵌入式关系型数据库。不仅仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便
- 强大的多媒体
丰富的多媒体 服务,如音乐、视频、录音、拍照、闹铃等。
- 地理位置定位
搭建开发环境
准备工具
- JDK:Java语言的软件开发工具包,包含了Java的运行环境、工具集合、基础类库等
- Android sdk:
- Android Studio
搭建开发环境
http://developer.android.com/studio/index.html
郭霖百度网盘:http://pan.baidu.com/s/1numABMDb
分析第一个Android程序
1、.gradle和.idea
这是android studio自动生成的一些文件
2、app
项目中的代码、资源、等内容几乎都是放置在这个目录下的
- build:包含一些在编译时自动生成的文件
- libs:如果项目中用到了第三方jar包,需要把这些jar包放到libs目录下,放在这个目录下的jar包都会被自动添加到构建路径中去
- androidTest:编写androidTest测试用例,可以对项目进行一些自动化测试
- Java:放置Java代码
- res:项目中使用到的所有图片、布局、字符串等资源都存放在这个目录下。图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下
- AndroidManifest.xml:整个Android项目的配置文件,程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明
- test:用来编写 Unit test测试用例的,是对项目进行自动化测试的另一种方式
- .gitignore:讲app模块内的指定的目录或者文件夹排除在版本控制之外
- app.imml:自动生成
- build.gradle:指定很多项目构建相关的配置
- proguard-rules.pro:指定项目代码的混淆规则
3、build
主要包含了一些在编译时自动生成的文件
4、gradle
包含了gradle wrapper的配置文件
5、gitignore
用来将指定的目录或者文件排除在版本控制之外
6、build.gradle
项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的
7、gradle.properties
全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本
8、gradlew(在Linux/Mac系统中使用)和gradle.bat(在Windows中使用)
这两个文件是用来在命令行中执行gradle命令的,
9、helloWorld.iml
iml文件是所有 IntelliJ IDEA项目都会自动生成的一个文件,不需要修改这个文件中的任何内容
10、local.properties
指定本机中的Android SDK路径,通常内容都是自动生成的,并不需要修改。除非你的本机中的SDK位置发生了变化,那么就将这个文件中的路径改成新的位置即可
11、setting.gradle
用来指定项目中所有引入的模块。通常情况下这个模块的引入都是自动完成的,需要手动修改的比较少,
详解项目中的资源
打开res目录:
drawable:存放图片
mipmap:应用图标
values:存放字符串、样式、颜色等配置
layout:存放布局文件
详解build.gradle文件
apply plugin: ‘com.android.application’//应用程序模块(直接运行);如果改为com.android.library表示库模块(只能作为代码库依附于别的应用程序模块来运行)
android {
compileSdkVersion 24 //指定项目的编译版本 24表示使用Android7.0系统的SDK编译
buildToolsVersion "24.0.2" //项目构建工具的版本 24.0.2是目前最新版本,有更新时Android studio会自动更新
defaultConfig {
applicationId "com.exapmle.hello"//指定项目的包名,如果想在后面进行修改,可以在这里进行修改
minSdkVersion 15 //项目最低兼容的Android系统版本 15表示最低兼容到Android4.0系统
targetSdkVersion 24 //指定的值表示你在项目版本上已经做了充分的测试
versionCode 1 //项目版本号
versionName "1.0" //项目的版本名
}
buildTypes {
release { //正式版安装文件的配置
minifyEnabled false //是否对项目的代码进行混淆,true表示混淆、false表示不混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //proguardFiles指定混淆时使用的规则文件,proguard-android.txt在Android SDK下,里面所有项目通用 的混淆规则,proguard-rules.pro当前项目的根目录下,里面可以编写当前项目的特有混淆 规则
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) //本地依赖声明,表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径中
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1' //远程依赖
testCompile 'junit:junit:4.12'//声明测试用例 的库
}
Android日志工具log
Log.v():verbose 打印那些最为琐碎的信息、意义最小的日志信息
Log.d():debug 比verbose高一级 打印调试信息、对你调试程序和分析问题应该有帮助
Log.i():info 比debug级别高一级 用于打印一些比较重要的数据,可以帮你分析用户行为数据
Log.w():warm 比info高一级 打印一些警告信息,提示程序在这个地方可能会有潜在风险,最好去修复一下这些出现警告的地方
Log.e():error 比warm高一级 用于打印程序中的错误信息
为什么使用log不使用 System.out.println
System.out.println缺点:日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分
日志控制级别的好处:快速的找到所关心的日志
关键字过滤:在输入框里输入关键字的内容、关键字过滤是支持正则表达式的