1、Android介绍

1.1 Android的系统架构

下面这张图展示了Android的系统架构:

图中可见,Android大致可以分为四层架构,五块区域:

  • Linux内核层(Linux Kernel)

    • Android系统时基于Linux2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、WiFi驱动、电源管理等。
  • 系统运行层
    • 这一层通过一些C/C++库来为Android系统提供了主要的热性支持,比如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供浏览器内核的支持等。同时,在这一层还有Android运行时库,它提供了一些核心库,能允许开发者使用Java来编写Android应用。其中,关键是Dalvik虚拟机,它使得我们每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例,相比Java虚拟机(JVM),Dalvik是专门为移动设备定制的,它对手机内存、CPU性能有限等情况做了优化处理。
  • 应用框架层(Application Framework)
    • 这一层主要提供了构建应用时可能用到的API,Android自带的一些核心应用程序就是使用这些API完成的,开发者可以通过使用这些API构建自己的应用程序。比如有活动管理器、View系统。内容提供器、通知管理器等。
  • 应用层(Applications)
    • 所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者我们从Google Play上下载的程序,包括我们自己开发的应用程序。

1.2Android应用特色

目前Android的最新版本是5.0版,Android主要有什么特色呢,下面我们来一一介绍一下:

  • 四大组件
  • 丰富的系统控件
  • SQLite数据库等持久化技术
  • 地理位置定位
  • 强大的多媒体
  • 传感器

  1.2.1,四大组件

    什么是四大组件?分别是活动(Activity)、服务(Service)、广播接收器(BroadCast Receiver)和内容提供器(Content Provider)。其中活动(Activity)就是Android应用程序中看得东西,也是用户打开一个应用程序的门面,并且与用户交互的界面,比较高调。服务(Service),则比较低调了,一直在后台默默的付出,即使用户退出了,服务仍然是可以继续运行的。广播接收器(BroadCast Receiver),则允许你的应用接收来自各处的广播消息,比如电话、短信等,可以根据广播名称不同,做相应的操作处理,当然了, 除了可以接受别人发来的广播消息,自身也可以向外发出广播消息,自产自销。内容提供器(Content Provider),则为应用程序之间共享数据提供了可能,比如你想要读取系统电话本中的联系人,就需要通过内容提供器来实现。
 

1.2.2,丰富的系统控件

    Android系统为开发者提供了丰富的系统控件,我们可以编写漂亮的界面,也可以通过扩展系统控件,自定义控件来满足自我的需求,常见控件有:TextView、Buttion、EditText、一些布局控件等。
 

1.2.3,持久化技术

    Android系统还自带了SQLite数据库,SQLite数据库是一种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。
 

1.2.4,地理位置定位

    移动设备和PC相比,地理位置定位是一大亮点,现在基本Android手机都内置了GPS,我们可以通过GPS,结合我们的创意,打造一款基于LBS的产品,是不是很酷的事情啊,再说,目前火热的LBS应用也不是空穴来风的,不过在天朝,因为可恶的GFW,只能用些本土化的地图API,比如百度地图、高德地图。要是哪天能用上大谷歌的地图,那才是高大上啊。
 

1.2.5,强大的多媒体

    Android系统提供了丰富的多媒体服务,比如音乐、视频、录音、拍照、闹铃等,这一切都可以在程序中通过代码来进行控制,让你的应用变得更加丰富多彩。
 

1.2.6,传感器

    Android手机中内置了多种传感器,比如加速传感器、方向传感器,这是移动设备的一大特点,我们可以灵活地使用这些传感器,可以做出很多在PC上无法实现的应用。比如“微信摇一摇"_你懂得,“搜歌摇一摇”等功能。

1.3Android开发环境

开发环境搭建所需要的软件,配置等攻略,相信大家网上搜一搜,这类文章太多了。这里只强调重要几个工具:Android SDK、Eclipse、ADT。

 1.3.1,Android SDK

    Android SDK谷歌提供的Android开发工具包,在开发Android程序时,我们需要引用该工具包,里面包含了开发Android应用程序的API。
 

1.3.2,Eclipse

    开发Java应用程序的神器,最好用IDE工具之一,特点是开源、超强的插件功能、可支持多种语言开发。当然除此之外,谷歌也推出了Android Studio,专门针对Android程序定制的,但因为Android Studio才刚推出不久,不太稳定,毕竟新工具问题还是比较多的,Eclipse被应用已经很成熟了,网上各种关于Eclipse疑难杂症的解决方案很多,相比Android Studio就比较少了。
 

1.3.3,ADT

    ADT全称叫做"Android  Development Tools",是谷歌提供的一个Eclipse插件,用于在Eclipse提供一个强大的、集成的Android开发环境。

1.4Android程序结构

下图是Android程序的结构示例图:

通过这张图我们能够对Android程序的结构有一个一目了然的了解:

1.4.1,src

   毫无疑问,src目录是放置我们所有Java代码的地方,它在这里的含义和普通Java项目下的src目录是完全一样的。
 

1.4.2,gen

   这个目录里的内容都是自动生成的,主要有一个R.Java文件,你在项目中添加任何资源都会在其中生成一个相应的资源ID,这个文件永远不要手动去修改它。
 

1.4.3,assets

   这个目录里主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。
 

1.4.4,bin

   这个目录页不需要过多的关注,它主要包含了一些在编译时自动产生的文件。当然,会包括一个编译好的安装包,后缀为.apk的文件。
 

1.4.5,libs

   如果你的项目中使用到了第三方的jar包,就需要把这些jar包放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
 

1.4.6,res

   这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.Java中的内容也是根据这个目录下的文件自动生成的。当然这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。
 

1.4.7,AndroidManifest.xml

   这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件中注册。另外还可以在这个文件给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本。
 

1.4.8,proguard-project.txt

   在发布你的程序时候,有些apk文件容易被人反编译,所以此时这个文件就发挥作用了,用来混淆你的程序代码,让别人不那么容易看到源代码。
 

1.4.9,project.properties

   指定了编译程序时候所用的SDK版本

1.5Logcat工具

日志在任何项目的开发过程中都会起到非常重要的作用,在Android项目中如果你想要查看日志则必须要使用Logcat工具。

    Android提供了一个日志工具类是Log,总共有个等级,级级递增。

1.5.1,Log.v()

  这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是Android 日志里面级别最低的一种。

1.5.2,Log.d()

这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别 debug,比 verbose 高一级。
   

1.5.3,Log.i()

这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为的那种。对应级别 info,比 debug 高一级。

1.5.4,Log.w()

这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。
        

1.5.5,Log.e()

这个方法用于打印程序中的错误信息,比如程序进入到了 catch 语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别 error,比 warn 高一级。

 
    小提醒:定制自己的日志工具

比如,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。
    那该怎么办呢,难道要一行一行把所有打印日志的代码都删掉?显然这不是什么好点子,不仅费时费力,而且以后你继续维护这个项目的时候可能还会需要这些日志。因此,最理想的情况是能够自由地控制日志的打印,当程序处于开发阶段就让日志打印出来,当程序上线了之后就把日志屏蔽掉。[1]

 参考文献:
[1]

"浅谈Android"第一篇:Android系统简介 http://www.cnblogs.com/cr330326/p/4229026.html

 

【Android学习之旅】1、Android入门介绍的更多相关文章

  1. 我的Android学习之旅(转)

    去年大概在七月份的时候误打误撞接触了一阵子Android,之后由于工作时间比较忙,无暇顾及,九月份的时候自己空闲的时间比较多,公司相对来说加班情况没以前严重.开启了个人的Android学习之旅,初衷是 ...

  2. Android学习之旅(一)

    2017-02-27 今天开始,正式开启Android学习之旅,背景从事.Net平台开发快五年了,一直在用C#做Web开发. 前天选购了两本书:<Java 编程思想(第四版)>和<第 ...

  3. 我的Android进阶之旅------>关于android:layout_weight属性的详细解析

    关于androidlayout_weight属性的详细解析 效果一 效果二 图3的布局代码 图4的布局代码 效果三 图7代码 图8代码 效果四 效果五 版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转 ...

  4. 我的Android进阶之旅------>关于android:layout_weight属性的一个面试题

    最近碰到一个面试题,按照下图,由Button和EditText组成的界面下厨布局代码,解决这题目需要使用android:layout_weight的知识. 首先分析上图所示的界面可以看成一下3个部分. ...

  5. 【Android自学之旅】 Android开发环境的搭建

    [Android自学之旅] Android开发环境的搭建 搭建参考教程: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-do ...

  6. android学习点滴一:android环境的搭建

    东一点西一点,很多时间都浪费了.是该系统性的做好自己的东西了. <android学习点滴一:android环境的搭建> [环境变量]变量名:JAVA_HOME变量值:C:\Java\jdk ...

  7. Android的Toast介绍-android学习之旅(三十六)

    Toast简单介绍 Toast是一个很方便的消息提示框.会在桌面显示一个短暂的消息提示.有两个特点: 1.消息不会获得焦点. 2.过一段时间会自己主动消失. Toast的生成步骤 1.调用构造器或者静 ...

  8. Android四大组件之一Service介绍-android学习之旅(十二)

    基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...

  9. Android的ImageView介绍-android学习之旅(二十二)

    ImageView简介 imageView继承于View,主要用于显示图片,凡是Drawable对象都可以用它显示. ImageView直接派生了ImageButton和ZoomButton等组件. ...

随机推荐

  1. Ehcache(02)——ehcache.xml简介

    http://haohaoxuexi.iteye.com/blog/2113728 ehcache.xml简介 ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义Ca ...

  2. CKeditor3.6.2 配置与精简

    一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...

  3. [1.1]Environment preset on a Windows server

    1. Python 3.5.1 (also on your personal computer) 2. Django 1.10.1 (also on your personal computer) 3 ...

  4. Python3批量爬取网页图片

    所谓爬取其实就是获取链接的内容保存到本地.所以爬之前需要先知道要爬的链接是什么. 要爬取的页面是这个:http://findicons.com/pack/2787/beautiful_flat_ico ...

  5. 【转】Ruby入门教程(一)

    1. Ruby环境搭建 在Windows下,搭建Ruby环境,比较简单的方法是在“RubyInstaller”上下载一个合适的版本(D瓜哥使用的是最新版),直接安装就可以了. 另外,吐槽两句,网上有人 ...

  6. PI-webservice05-SAP调用外部webservice

    在用webservice进行数据传输的过程中,SAP系统与.net开发的信息系统之间的数据调用.如何用SAP调用外部的.net系统发布的webservice程序来获取外部的数据,详情请见下文: 1,创 ...

  7. mybatis 关联映射传递多参数方法

    <resultMap type="com.secoo.my.bean.OrderItemComment" id="orderItemResult"> ...

  8. strcpy_s与strcpy的比較

    strcpy_s和strcpy()函数的功能差点儿是一样的.strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串.在程序执行时,这将 ...

  9. Flex中 Array 的IndexOf 的作用

    Flex中 Array 的IndexOf 的作用 1.说明    indexOf用于在索引中从小到大查找,假设查得到就返回索引值,查不到就返回-1: 2.实例 (1)设计源代码 <?xml ve ...

  10. 解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader

    上篇文章中我们掌握了表面剔除和剪裁模式 这篇文章将利用这些知识实现一个简单的,可是又非经常常使用的样例:把一张图片做成圆角矩形 例3:圆角矩形Shader 好吧我承认在做这个样例的时候走了不少弯路,因 ...