Android学习之路——简易版微信为例(一)
这是“Android学习之路”系列文章的开篇,可能会让大家有些失望——这篇文章中我们不介绍简易版微信的实现(不过不是标题党哦,我会在后续博文中一步步实现这个应用程序的)。这里主要是和广大园友们聊聊一个非Java程序员对Android操作系统的理解以及一个Android工程的目录结构,为进一步学习做准备。
1 缘起
智能手机的出现与普及为人们的生活、工作带来了极大的便利,我们可以用手机随时随地、随心所欲地购物、玩游戏、聊天、听音乐等等。一个个精心设计、体验良好的移动客户端应用,让用户们爱不释手,人们现在已经越来越离不开智能手机了。这或许是广大程序员学习移动应用开发的一个重要原因吧,这也是我学习Android开发的原因之一。
下面来说说为什么想写一个关于Android开发的系列博文。博主目前是做PC端软件的开发,主要做的是使用C++编写图像处理与显示的逻辑,软件的前端界面采用的是WPF。去年下半年,公司鼓励前端(WPF)转后端(C++)和后端转前端,作为一个有上进心的程序员,当然要响应领导的号召了^_^。之后就开始WPF学习之旅了,学了一段时间之后,算是有些入门,至少能用WPF做一些简单的功能了。也是在那个时候开始博主开始接触Android,毕竟还是希望在工作之余能够提升一下自己,于是就看了一些博文和相关的书籍。断断续续学了半年,虽然感觉在某些方面与WPF很像,但对Android的理解还是不深刻。于是博主开始思考,怎样才能更好地理解掌握Android呢?对于一个计算机(或工科)专业出身的人来说,所能想到的最好的学习方法便是实践——选择一个不是太复杂的项目,把它一步步做出来,一点点完善它。基于此,决定写一个系列博客,记录自己的学习之路和项目开发之路。微信应用是我们日常使用最频繁的APK了,简易版的微信实现起来应该不会太复杂,所以博主就准备开发一个简易版的微信作为自己Android项目的实践之旅。
2 一个程序员眼中的Android
关于Android的介绍、发展历程、目前使用情况以及未来趋势,在这里就不做赘述了,这些对广大程序员朋友来说肯定都有所了解。本节主要是讲讲自己以从程序员的角度对Android的一点浅薄的理解,当然,一千个读者心里有一千个哈姆雷特,每个人对Android的理解都会不一样,这里介绍的仅是本人的个人见解。
Android是一个基于Linux内核改造而来的、面向手机端(当然现在Android已经是发展到各个硬件平台上了,包括Android TV、Android Wear等等)的操作系统。Android系统本质上和普通的Linux桌面PC发行版没什么区别,Android可以视为手机端Linux的发行版,只不过Google做了完善的封装,以至于我们几乎感觉不到Linux的存在。这里所讲的封装有两层含义:
(1)对普通用户而言,Android变得更亲民,更大众化,不像Linux那么高冷,需要良好的计算机底子的童鞋才能较好地使用;
(2)对应用开发者而言,不需要接触底层的C代码和系统库函数了,我们面对的是一些用Java写的类库,其中包括著名的Android四大组件(后续我们详细阐述)、一套较完备的UI控件和一些辅助的工具类库。
Android操作系统是分层实现的,其层次结构图如下图所示:
这幅框架结构图,对于一个久经沙场的老兵来说,理解起来也许并不是太困难;但对于一个初入职场不久的小白来说,可能一下子还看的不是很明白。不过没关系,对于像我们这样的小菜来说,完全没必要把所有层次、所有组件都弄清楚:比如Linux Kernel(内核)你有必要一开始就去学习吗?—— 一开始去就去看这些不就是在自讨苦吃么^_^!?在内核层之上那一层,什么SQLite、OpenGL|ES、SGL、libc、WebKit等等都是一些著名的开源项目,大多是用C语言写的,对开发上层应用的我们来说,也压根没必要一开始就去学习。最后看最上面一层——Application层,Home、Contacts、Phone……这些其实是系统内置的一些应用,和我们开发的应用没什么区别,所以也没必要花太多时间去了解。对开发应用的我们而言,学好下面两层就好了:
第一层:Application Framework层,也就是应用框架层。我们编写应用时所用的大部分组件都来自这里,最主要的包括:
View System,即视图系统,定义了一套UI库,包括布局类和控件类,用它们就可以定义应用程序的界面了,这个库很庞大,也是我们学习Android开发的一个难点;
Activity Manager,即活动管理器,活动(Activity)是Android四大组件之一,它管理着和用户界面显示有关的逻辑和生命周期回调;
Content Provider,即内容提供者,同样是Android的四大组件之一。数据是应用程序的核心,使用内容提供者就可以实现跨进程/应用的数据共享了。
Notification Manager,通知管理器,用于手机顶部状态栏显示系统通知,它也是Android的四大组件之一。
Resource Manager,资源管理器,顾名思义,即管理应用程序资源的,如图标、背景图片、常量字符串。
图中还有一些其他组件,如Package Manager(包管理器)、Location Manager(位置管理器)等,这里就不具体介绍了,初学时接触的不多。
第二层:Android Runtime层,也就是安卓运行时层,其实就是一个Java虚拟机——Dalvik虚拟机和一个核心类库。这部分和普通的Java虚拟机在使用方面都是一样的,所以这一层虽然在开发中会接触到,但只要学过Java的,应该都懂。
所以,到此为止,我们应该清楚了学习Android开发要学一些什么了,其实就是在学习Application Framework层,其他的看看就好,如果想进一步深入的话,等到把基础的学扎实了再说吧!
3 Android项目的目录结构
Android开发使用的IDE,主要有Eclipse + Android SDK(Software Develement Kit,软件开发工具包)、Visual Studio + Xamarin(用C#语言开发Android程序)和Android Studio三种可供选择,博主采用的是Android Studio 2.0,下载解压无需安装,直接就可以使用。关于Android Studio的JDK的配置,请度娘参考相关博客,在此就不做赘述了。
有了IDE,我们就可以很方便地创建一个Android工程了(关于工程创建,直接点击下一步下一步即可,在此不再赘述)。下面就让我们在写代码前来认识一下一个新建的Android工程的目录结构,如下图:
目录结构一目了然,我们分别学习一下各级目录结构及其作用。
3.1 清单文件
清单文件即AndroidManifest.xml文件,此文件是Android工程中非常重要的配置文件,用XML来书写。学习过Java Web的童鞋一定知道,在SSH框架中就有许许多多的XML配置文件。Android中的配置文件和SSH框架中的配置文件功能上有些类似,即为框架运行提供必要的数据,新创建工程的AndroidManifest.xml的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.doll.firstapplicationdemo" > <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
简单解释一下:首先manifest根节点,定义了命名空间和包名;接下来是application结点,代表一个应用程序,其中配置应用程序的标签、名称、主题等等;在application结点里面定义了主Activity(有点类似于Web开发中的首页),属性中定义了类名以及意图过滤器(这里就不详细展开了,在后面详细讲解activity时会介绍)。这样,运行程序时,Android框架就可以帮我们建立必要的对象实例,让我们的应用程序运行起来了。其实,博主觉得这个配置文件和Spring框架中的ApplicationContext.xml配置文件的功能很类似。当然,这个配置文件不是一成不变的,和SSH框架的配置文件一样,随着项目的不断完善,我们会向其中写入各种配置信息。
3.2 代码文件夹
代码文件夹包括Java源代码子文件夹和测试代码子文件夹,展开后如下:
1,源代码文件夹
目前该文件夹下,定义一个Activity——MainActivity,这个类在之前介绍的清单配置文件中已经提及;以后我们所编写的程序逻辑类一般都放在这个文件夹下。
2,测试代码文件夹I(androidTest)
在这个文件夹下放置需要使用Android SDK编写的测试代码。当然,一般我们的测试代码都会用到Android SDK,所以大部分的Android测试代码都放在这一目录下。
3,测试代码文件夹II(test)
在这个文件夹下放置不需要使用Android SDK编写的测试代码。
3.3 资源文件夹
资源相当于我们在程序运行之前定义好的数据,也是应用程序的重要组成部分,为此Android Studio专门使用一个文件夹来管理应用程序中使用的资源,其具体目录结构如下:
一个应用程序通常有很多类型的资源,比如:
drawable:可绘制的资源,如背景图片、背景选择器等;
layout:UI布局资源,用于定义用户界面;
mipmap:图片资源,从上图可以看到,分为hdpi(高分辨率)、mdpi(中等分辨率)、xhdpi/xxhdpi/xxxhdpi(超高分辨率…………)的资源,Android框架会根据手机的分辨率自动选择合适的图片用于绘制。
values:在这个文件夹下主要放置一些常量资源,比如:颜色常量、维度(尺寸)常量、字符串常量以及样式常量(定义控件的显示样式,类似CSS)等等。
除了上面介绍的这些资源外,Android还支持其他资源,如动画资源、颜色选择器资源、菜单资源等,这些在以后博文中都会具体阐述。关于以上这些资源如何定义以及如何在其他资源文件或程序代码中引用,也将在之后的博文中做进一步介绍。
4 总结
最后来总结一下,本文介绍了学习Android的缘由、个人对Android操作系统的理解以及目前Android工程的目录结构,其中目录结构相对比较重要。下一篇博文将正式开启我们的APP开发之旅——实现简易版微信的登陆、注册界面的编写与简单交互。
Android学习之路——简易版微信为例(一)的更多相关文章
- Android学习之路——简易版微信为例(三)
最近好久没有更新博文,一则是因为公司最近比较忙,另外自己在Android学习过程和简易版微信的开发过程中碰到了一些绊脚石,所以最近一直在学习充电中.下面来列举一下自己所走过的弯路: (1)本来打算前端 ...
- Android学习之路——简易版微信为例(二)
1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样, ...
- python简易版微信或QQ轰炸
在讲解代码之前我们先来回忆一下,平时我们发送消息时,先打开微信或QQ的界面,在信息栏中输入你要发送的内容在点击发送或通过快捷键发送.如果要发送表情时,先打开微信或QQ的界面,在点击表情包中你要发送 ...
- Android 学习之路和App开发框架
学习之路: 1. http://www.stormzhang.com/android/2014/07/07/learn-android-from-rookie/ 框架: 2. https://gith ...
- ANDROID学习之路 转
版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...
- Android 学习之路
转载:http://stormzhang.com/android/2014/07/07/learn-android-from-rookie/ 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回 ...
- android学习之路资料集合
版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...
- android学习之路--------intent
正式开始学习android,没有看书和视频,所以没有系统的学,只是看到哪个知识点就去学习,今天学习界面之间的跳转,以及传值,主要的知识点是intent, @Override protected voi ...
- Android学习之路书籍推荐
Android开发书籍推荐:从入门到精通系列学习路线书籍介绍 JAVA入门书籍: < Introduction to java programming > < Core java & ...
随机推荐
- .NET小项目之MyKtv(歌曲播放功能实现)
在KTV点歌系统中我们根据需求获取到歌手的歌曲信息,点击歌手的歌曲将其添加到一点歌曲列表中看似简单的一个操作其实涉及很多内容,这也是写这篇Blog的目的—分析歌曲播放的原理. 原理分析 我们应该清楚, ...
- MVC——分页控件
不管是什么类型的网站,分页都是必不可少的功能实现.在这里记录一下我自己接触过的分页控件: 一. MvcPager控件(记得项目里添加MvcPager.dll的引用) 这里面比较常用的就 ——@Html ...
- GZIP 头解析
在用HttpWebRequest对象时,一般我们都没有开启gzip压缩,如果服务端返回的数据比较大,这是我们需要开启gzip压缩,怎么开启呢? 1.给HttpWebRequest对象,添加如下Head ...
- Redis与Memcached的比较
网络IO模型 Memcached 是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, ...
- React:用于搭建UI的JavaScript库
React https://facebook.github.io/react/index.html 2016-08-03 先吐槽一下.看过很多博客.教程.文章,一直想不通为什么大牛们介绍一种新技术一上 ...
- memcached全面剖析--2
理解memcached的内存存储 下面是<memcached全面剖析>的第二部分. 发表日:2008/7/9 作者:前坂徹(Toru Maesaka) 原文链接:http://gihyo. ...
- WPF异步调用WCF服务
wpf调用wcf时,第一次访问总耗时到达几秒,影响界面的用户体验,因此在wpf加载界面和加载数据时采用异步加载,即异步访问wcf服务, 由于是否采用异步加载和服务端无关,仅仅由客户端自己根据需要来选择 ...
- Dede 列表页 缩略图 有显示无则不显示
[field:array runphp='yes']@me = (strpos(@me['litpic'],'defaultpic') ? "" : "<div c ...
- WPF的ScrollViewer鼠标的滚动
在C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个S ...
- wpf image控件循环显示图片 以达到动画效果 问题及解决方案
1>最初方案: 用wpf的image控件循环显示图片,达到动画效果,其实就是在后台代码动态改变Image.Source的值,关键代码: ; i < ; i++)//六百张图片 { Bitm ...