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开发之旅——实现简易版微信的登陆、注册界面的编写与简单交互。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 月下载量上千次Android实现二维码生成器app源码分享

    在360上面上线了一个月,下载量上千余次.这里把代码都分享出来,供大家学习哈!还包括教大家如何接入广告,赚点小钱花花,喜欢的帮忙顶一个,大神见了勿喷,小学僧刚学Android没多久.首先介绍这款应用:APP是一款二维码生成器,虽然如何制作二维码教程网上有很多,我这里再唠叨一下并把我的所有功能模块代码都分享出来. 在这里我们需要一个辅助类RGBLuminanceSource,这个类Google也提供了,我们直接粘贴过去就可以使用了 package com.njupt.liyao; import c

  • Android编程实现二维码的生成与解析

    本文实例讲述了Android编程实现二维码的生成与解析.分享给大家供大家参考,具体如下: 直接上代码,代码上面有具体的解析,并且提供jar供下载:二维码Jar包.rar. 根据文本生成对应的二维码: // 生成QR图 private void createImage() { try { // 需要引入core包 QRCodeWriter writer = new QRCodeWriter(); String text = qr_text.getText().toString(); Log.i(T

  • android 微信 sdk api调用不成功解决方案

    最近一直在调用微信的API,却发现一直调用不成功,纠结了好久,各方面找教程,找官方,官方里的文档也只是写得很模糊,说是按三步走. 1.申请App_ID 2.填写包名3. 获取程序签名的md5值, 这三步只要你走对了就能调通,可是大家都不知道有时候我们打包的keystore和我们打包的keystore获取到的程序签名的md5是不一样的.我们在申请的时候填的程序签名值是正式打包的,但我们在eclipse部署上去的却是用的我们默认的debug.keystore.而这样导致的后果就是程序签名不一样,会一

  • Android仿微信二维码和条形码

    本文实例为大家分享了Android仿微信二维码和条形码的具体代码,供大家参考,具体内容如下 package your.QRCode.namespace; import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Map; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHi

  • Android上使用ZXing识别条形码与二维码的方法

    目前有越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文所述实例就使用了ZXing 1.6实现条码/二维码识别.ZXing是个很经典的条码/二维码识别的开源类库,早在很久以前,就有开发者在J2ME上使用ZXing了,只不过需要支持JSR-234规范(自动对焦)的手机才能发挥其威力,而目前已经有不少Android手机具备自动对焦的功能. 本文代码运行的结果如下,使用91手机助手截图时,无法截

  • Android基于google Zxing实现各类二维码扫描效果

    随着微信的到来,二维码越来越火爆,随处能看到二维码,比如商城里面,肯德基,餐厅等等,对于二维码扫描我们使用的是google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包,之前我项目中的二维码扫描功能只实现了扫描功能,其UI真的是其丑无比,一个好的应用软件,其UI界面也要被大众所接纳,不然人家就不会用你的软件啦,所以说应用软件功能和界面一样都很重要,例如微信,相信微信UI被很多应用软件所模仿,我也仿照微信扫描二维码效果进行模仿,虽然

  • Android学习项目之简易版微信为例(二)

    1 概述 从这篇开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样,需要从main开始写代码逻辑,大部分逻辑控制代码都由自己来实现.事实上,Android已经为我们提供了一个程序运行的框架,我们只需要往框架中填入我们所需的内容即可,这里的内容主要是:四大组件--Activity.Service.ContentProvider.BroadCast.在这四大组件中,可以实现

  • Android 第三方应用接入微信平台研究情况分享(二)

    微信平台开放后倒是挺火的,许多第三方应用都想试下,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发现网上的相关资料还是挺少的,这里把我的整个研究情况给出来,希望可以共同学习. 第三方应用接入微信平台(1) 二.第三方应用与微信通信的时序图 2.接收微信的请求信息 前面四步和之前的"1.向微信发送消息"是一样的,不需要重复执行,这里给出来只是为了 流程的整体性.当我们注册后,应用图标会出现在微信聊天的列

  • 基于Android实现个性彩色好看的二维码

    我编码的风格,先给大家展示下效果图,亲们感觉效果还不错,很满意的话,请继续往下阅读. 之前呢,也写过用安卓实现二维码生成彩色的二维码和带logo的二维码,也知道可以使用QRCode和ZXing两种方式,然后这一篇呢也是写二维码使用BarcodeFormat.QR_CODE,主要也是看见很多的非常漂亮的二维码,这里呢主要模仿qq的二维码,并且也高仿实现了长按发送给朋友和保存到图库的功能,觉得不错呢就请多支持下,哪里不好呢也可以说出来.好了我们一步一步来. 第一步:简单二维码实现 先来个最简单的二维

  • Android学习项目之简易版微信为例(一)

    这是"Android学习之路"系列文章的开篇,可能会让大家有些失望--这篇文章中我们不介绍简易版微信的实现(不过不是标题党哦,我会在后续文章中一步步实现这个应用程序的).这里主要是和广大朋友们聊聊一个非Java程序员对Android操作系统的理解以及一个Android工程的目录结构,为进一步学习做准备. 1 缘起 智能手机的出现与普及为人们的生活.工作带来了极大的便利,我们可以用手机随时随地.随心所欲地购物.玩游戏.聊天.听音乐等等.一个个精心设计.体验良好的移动客户端应用,让用户们爱

  • Android版微信跳一跳小游戏利用技术手段达到高分的操作方法

    本文主要来讲个个好玩的东西,近来微信刚出的跳一跳微信小程序的游戏很火,看到很多人都达到了二三百分就各种刷朋友圈了. 甩手一个表情 最终我们达到的分数却是这样的: 羡慕吧 一定会有人拍手叫好,"黄金右手"!说真的,我已经不用右手好多年,而且我玩这个游戏压根就没用手,而是意念!哈哈,别喷我,开个玩笑而已,肯定是利用技术手段啦,什么技术?python喽-哈哈,不过不是我写的,我自己是做Android开发的,我对于python从来没有接触,只是恰好在蛋哥公众号看到关于这个游戏的文章,觉得有意思

  • Android实现简易版打地鼠

    本文实例为大家分享了Android实现简易版打地鼠的具体代码,供大家参考,具体内容如下 目标效果: 1.activity_main.xml页面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schema

  • Android使用ViewBinding的详细步骤(Kotlin简易版)

    ViewBinding 是什么 2020年的3月份 巨佬 JakeWharton 开源的 butterknife 被官宣 停止维护,在github 上 说明 Attention: This tool is now deprecated. Please switch to view binding. Existing versions will continue to work, obviously, but only critical bug fixes for integration with

  • python游戏实战项目之智能五子棋简易版

    目录 导语 正文 总结 导语 前段时间不是制作了一款升级版本五子棋的嘛! 但是居然有粉丝私信我说: "准备拿到代码玩一下ok过去了!太难了准备放收藏夹落灰q@q~" 所噶,今天先放一个简易版本的五子棋给大家看看!学习嘛~从简单到难 还是慢慢来撒~ 学玩这篇可以学下一篇难一点的撒: Pygame实战:下五子棋吗?信不信我让你几步你也赢不了?​​​​​​​ 正文 嘿嘿!这五子棋只有人机对战了哈!不要看人机对战感觉很简单,其实代码量也超多滴. 主要代码:都有注释的撒!就不一步一步介绍了. i

  • 安卓版微信跳一跳辅助 跳一跳辅助Java代码

    安卓版微信跳一跳辅助,java实现,具体内容如下 已经看到网上有大神用各种方式实现了,我这是属于简易版ADB命令式实现. 操作方法 1.光标移动到起始点,点击FORM 2.光标移动到目标点,点击TO 3.小人已经跳过去了 原理说明 安装APP,通过设置起点和目标点位置,获得弹跳的毫秒数,发送请求到连接手机的电脑中,电脑执行adb命令起跳. 具体实现 本人的测试设备是Mate9,android版本为7.0,由于在非Root环境下,普通安卓应用并不能通过Runtime.getRuntime().ex

  • 如何在Android App中集成支付宝和微信支付功能

    前言 本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介绍吧. 集成支付宝支付 没想到现在 App 里集成支付宝是这么的简单,我还折腾了好久- 好了,开始,假设你已经完成了支付宝那些繁杂的申请啥的工作,进入开发了. 首先,去下载官方的 DEMO : App支付客户端DEMO&SDK. 导入开发资源 解压后把里面的 jar 包拿出来放到你工程的 lib 目

  • C#调用OpenCV开发简易版美图工具【推荐】

    前言 在C#调用OpenCV其实非常简单,因为C#中有很多OPenCV的开源类库. 本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作. 准备工作 首先,我们先创建一个WPF项目. 然后,在Nuget上搜索OpenCVSharp,如下图: 接着,我们选择OpenCVSharp3-AnyCPU选项进行安装 . 安装了OpenCVSharp3-AnyCPU后,我们的项目会自动引入4个类库,如下图: 到这里,我们的准备工作就完成了,非常

  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的做法,是到身边找问题,然后编程实现.比如说,我学了高等数学,我是不是应该考虑下如何去用编程实现求导或者积分操作,如果想不出怎么办,是不是应该 baidu 一下,别人是如何实现数值积分或是符号积分的.我们每天买东西都要用到加减甚至乘除,那么我是否能编写个简单的计算器,如果命令行太丑的话,我是否能够快速

随机推荐