说明:本笔记节奏,严格按照图书章节,望见谅,所以代码会上传github,特别简单,我会省略!
android的由来,android的历史,以及它的野史,请百度,谷歌
对于这种知识,个人认为知道就好
........................
.......................
Android 系统架构
Android 可以大致分为四层架构,五块区域。
1. Linux内核层
Android系统是基础Linux2.6内核的,这一层为android设备的各种硬件提供了底层的驱动,如显示 驱动,音频驱动,照相机驱动,蓝牙驱动,wi-fi驱动,电源管理器等。
2. 系统运行库层
这一层通过一些c/c++库来为android系统提供主要的特性支持。如SQLIte库提供了数据库的支持,OpengGL|ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。
同样在这一层还有android运行时库,主要提供一些核心库,能够容许开发者使用java语言来编写应用。另外android运行时中还包含Dalvik虚拟机,它使得每个android应用都能运行在独立的进程中,并且拥有自己的Dalvik虚拟机实例。相对于java虚拟机,Dalvik是专门为移动设备定制的,它针对手机memory,cpu性能做出了优化处理。
3. 应用框架层
这一层主演是提供了构建应用程序时可能用到的各种API,android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用这些API来构建自己的应用程序。
4. 应用层
所有安装在手机上的应用程序都是属于这一层,如系统自带的联系人,短信等程序,或者从第三方市场下载的app。
Android已发布的版本
由于android版本发展太迅速!这里不做具体说明,从2008年9月,谷歌正式发布Android系统1.0系统, 到写笔记这一天是Android 6.0
Android应用开发特色
1. 四大组件
Android系统的四大组件分别是活动(Activity),服务(Service),广播接收器(Broadcast Receiver)和内容提供者(ContentProvider),其中活动是所以android应用程序的门面,凡是在应用中你看到的东西,都是放在活动中的。而服务就比较低调,你无法看到它,但它一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的,广播接收器可以容许你的应用接收各处的广播消息,比如电话,短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享提供了可能,比如你想要读取系统电话本的联系人,就需要通过内容提供器来实现。
2. 丰富的系统控件
Android系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写好看的界面,当然也也可以自定义控件。
3. SQLite数据库
Andriod系统自带了这种轻量级,运算速度快的嵌入式关系型数据库。它支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得方便。
4. 地理位置定位
移动设备和PC相比起来,地理位置定位可以算是很大的一个亮点,现在的Android手机都内置了GPS,走到哪里都可以定位自己的位置,再结合功能强大的地图功能,LBS这一领域潜力无限。
5. 强大的多媒体
Android系统还提供了丰富的多媒体服务,如音乐,视频,录音,拍照等等,这一切都可以在程序中通过代码进行控制,让你的应用变得丰富多彩。
6. 传感器
Android手机都会有内置多种传感器,如加速传感求,方向传感器等等,这也算是移动设备的一大亮点。通过灵活的使用这些传感器,可以做出很多在pc上根本无法实现的应用。
手把手带你搭建开发环境
本书采用android studio 2.0进行开发,大家可以参看 Android Studio入门到精通 http://blog.csdn.net/yanbober/article/details/45306483
第一个Andriod程序
书上的例子,Hello World! 如有需要请下载:https://github.com/RelocationTime/First_Row_Code.git
1.3.3 分析你的项目
由于本人使用的是android studio 2.0作为开发工具,所以不对eclipse + adt 做 介绍,但是我会介绍一下一个主要的目录及文件。
1. src
这个目录是放置我们所有的Java代码的地方,它这这里的含义和普通的java项目下的src目录是完全一样的
2. libs
这里放置的是所有用到的libs,以后的各种开源库都放置在其中。
3. res
这里面放置,我们项目里,所有要用到的资源,包括图片,各种布局,动画,选择器等等
4. AndroidManifest.xm
这个目录,个人觉得是最重要的,是整个项目的配置文件,四大组件都需要注册,但在AS中会自动注册,不需要我们手动注册,还可以给应用程序添加权限声明,指定最低 兼容版本和目标版本,这个目录需要大家用心多多体验!
以上四个是AS 和 Eclipse都有的,其他不做介绍,要是深入学习AS, 请百度http://blog.csdn.net/yanbober/article/details/45306483
开始简单分析代码:
package com.example.rescue.firstcode; //1
import android.support.v7.app.AppCompatActivity; //2
import android.os.Bundle; ///2.1
public class MainActivity extends AppCompatActivity { //3
@Override
protected void onCreate(Bundle savedInstanceState) { //4
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //5
}
}
详细讲述,以后将不做说明:
// 1 : 为我们的包定义
// 2:是我们代码中用到的类,进行导入
// 3 : 是我们的主类,java语法不会,请绕行,extends 继承的是Activitiy的子类,书上是继承Activity,这里用到的是AS环境下,本质上是一样的,都是Activity的子类
// 4 : 是我们必须重写的方法
// 5 : 是我们设置页面所显示的布局, 可以理解为显示的是什么界面放在我们的手机页面中,R.layout.activity_main, 是什么?下面我们介绍
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.rescue.firstcode.MainActivity"> // 1
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv"
android:text="Hello World!" /> // 2
</RelativeLayout>
进行个人认识,进行讲解:
xml语言不会,请自行百度,大家只要知道,开始标签,结束标签,属性它的本质认识,就可 以,比如RelativeLayout这个标签,必须有自己的开始和结束标签 ,以及它的属性<–
android:layout_width=”match_parent”
android:layout_height=”match_parent” ><–/>
对书上的认识点,清楚之后,请看我的总结
1. 每个组件必须指定它的宽高
2. 为什么有的属性定义为”@+id/tv”,有点却是”@id/tv”
认识: @+:是自己的属性标签,请记住是自己的,针对自己做的标示,而@/是引用的标示,意思就是,它不是自己的,是引用别人的,注意是别人的!这下大家应该知道@+和@/的原理吧,这是我自学过程中,不懂的地方
3. id 请不要用数字,特殊符号,大写字母,我说的是最好
4. xmlns:android=”http://schemas.android.com/apk/res/android”是什么意思?它是xml的域名空间,大家深入学习一下xml知识,就懂了,我只是提示一下
前行必备,掌握日志工具的作用
日志很重要,很重要,很重要
通过上一节的学习,大家应该成功创建自己的第一个程序了,对目录结构,运行流程也有一定的认识了, 也许会有一点不懂,但没关系,慢慢来,随着代码的不断练习,你会熟练的,加油!
日志的介绍
Log.v()
v:verbose :冗长地,啰唆地,累赘地,是它的英文意思,也是它的等级,是最低的,打印的东西,就是冗长地,啰唆地,累赘地
Log.d()
d: debug :调试信息; 除虫; 诊断; 是它的英文意思,比verbose高一级,用于打印一些调试信息,很有用。
Log.i()
i : info;信息的英文意思,打印的比较重要,可以帮助你分析用户行为的那种,比debug高一级。
Log.w()
w : warn: 警告的英文意思,这个是提示程序在这个地方会有潜在的风险,最好修复一下警告的地方,比info高一级.
Log.e()
e: error:错误的意思,这个是必须处理的任务,是出现了严重的问题,导致程序无法运行
注意事项:
1. 如何eclipse logcat下方打印不出来,肯定是设备失去焦点,或者模拟器掉线了
解决: 进入DDMS视图,在Devices窗口中点击当前设备,就可以
2. [2016-01-06 14:11:18 - Note] The connection to adb is down, and a severe error has occured.
[2016-01-06 14:11:18 - Note] You must restart adb and Eclipse.
[2016-01-06 14:11:18 - Note] Please ensure that adb is correctly located at ‘D:\Users \LYP\AppData\Local\Android\sdk\platform-tools\adb.exe’ and can be executed.
这个问题很常见,本质上是adb设备的端口被占用,解决方法,可以看我的另一个博客:blog.csdn.net/android_lyp/article/details/50469031
3.为什么使用Log, 而不使用System.out
其实我一开始是,特别喜欢使用syso,因为我java基础很好,善于调试,但是慢慢的,我喜欢上了LogCat,理由很简单,LogCat强大,会比syso好太多,大家慢慢使用,就会有深刻的认识
第一章结束