第一行代码第一章笔记

来源:互联网 发布:java 毫秒格式 编辑:程序博客网 时间:2024/04/28 01:29

今天看了郭神的第一行代码第二版第一章总结的笔记,感觉收获了很多,谢谢郭神

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缺点:日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分

日志控制级别的好处:快速的找到所关心的日志

关键字过滤:在输入框里输入关键字的内容、关键字过滤是支持正则表达式的

0 0
原创粉丝点击