[Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

作者:泥沙砖瓦浆木匠

网站:http://blog.csdn.net/jeffli1993

个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。

交流QQ群:【编程之美 365234583】http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_AonqzL0rpdQAjjqlHQQ

如果我的帮到了你,是否乐意捐助一下或请一杯啤酒也好呢?有你支持,干的更好~

点这参与众筹 我的支付宝:13958686678

1.1前言

泥瓦匠又和大家见面了,在移动平台干过原生态开发,也干过hybrid应用。可以看看相关的文章 Android
UI
 。所以多多少少在这块还是有点了解。现在很多高级语言可以开发app程序,包括Android,到我觉得目前Java语言开发Android程序还是很火,很重要的。自然,Java的底子不可少。可以看看泥瓦匠写的不少基础 Java
Basic
 。

我们生活在一个通讯的时代,我经历过得2.5G时代,也就是GPRS等的时代,前面还有2G(GSM等)、1G,后面则大家熟悉的3G 4G的时代,明显的显示是下载速度的变化。Android则是一个这个时代通讯的平台系统。自然其中包括Android源自于PC系统的基础,其功能包括所谓的内核系统、网络、文件、2D、3D图形、数据库等。其中里面我们经常会使用其中的功能,他们组成了安卓(Andriod)。

本文提纲如下:

1.2 浅析Android架构

1.3 HelloWord的工程结构(★★★☆☆)

1.4 编译中学习(★★★★☆)

1.5 总结

1.2浅析Android架构

Android其实也不难,泥瓦匠老是会说一些不大不小的话。但是我感觉还是有点道理,比如Android是技术,技术来源于生活。所以我们要学会学着把技术还原到生活中,这样其实我们就知道其起源,其原理。对了我们还可以类比,比如

我们完全可以把Android当作一个地球(叫做安卓地球)。

问: 安卓地球为什么会自转,会公转?(谁驱动)

答曰:安卓地球自转工作来自太阳对它的作用。自然同理可得:Android也有属于它的一套驱动系统,它叫做Linux内核(Linux Kernel),里面包括着各种底层的驱动(蓝牙 USB WiFi等)和一些像对电源的管理。然后我们以后的一切操作都是基于这个基石搭建的。

二问:安卓地球上为什么有海,陆地和空气?(拥有什么)

答曰:安卓地球里面拥有很多主要功能的实现。Android有一套库(library),比如我们常见存储数据操作的SQLite库,提供了数据库和对数据的操作。还有WebKit库位浏览Web提供支持。还有很多,我后面用图总结。另外这里同一层的有一个核心库和虚拟机(Dalvik),叫作Android运行时。这词虽然有点拗口,但是泥瓦匠会给你解释解释。下面我们也会详细介绍。

三问:安卓地球上的(码)农民能种田,(码)渔民能捕鱼。这是地球对使用者的帮助。

答曰:安卓地球公开了其操作系统的各种功能,使他们能开发应用程序时用这些功能。我们把它叫做应用框架(Application Framework)。

最后问:那些安卓地球上吃饭,泡脚的人享受着的生活。这是看得见摸得着的。那是安卓地球在应用程序使用层上,也就是我们经常提起的应用程序。称为应用程序(Application)。

泥瓦匠的记忆宫殿:我觉得好记性不如烂笔头,好笔头不如来画个图。所以我总结学习需要方法,学习需要思路。下面我给出的是Android架构浅析的总结图:

1.3HelloWord的工程结构

跟着泥瓦匠动手吧,扯了一下架构。觉得‘纸上学来总觉浅绝知此事要躬行’。说干就干吧。首先码农程序员最熟悉的Hello World的爱人了解透彻,别看这个小程序,其实学问很大。细节注意往往是一个人的转折点哦。

elicpse → 右键 new android application → next.. → finish

图中,红色框框中是我们要了解的知识。因为现在Android版本2.3开始形成了新的里程碑,所以我们需要在兼容方面,也就是图中Mininum Require SDK 和 Target SDK 的设置。下面是Compile With,因为这要懂得下Dalvik VM,因为我们知道不同版本的编译下会有点不同的区别。或是修改或是新增。DalvikVM 和 JVM到底有什么区别呢?区别不大,但效果很大。为何呢?

因为,在PC端JVM 通常我们javac 然后 .java文件到 .class及其打包下的 .jar。他们是基于堆栈架构,DVM呢?DVM其实也是到字节文件那块而已。有什么不同呢?

答案在这里:DVM(dalvik vm)基于寄存器架构,其过程是: .java → javac → .class → dx.bat → .dex → .odex化。而odex化 把文件预先提取出来作用 加快软件加载速度和开机速度。大大使我们在Android系统上,操作觉得方便流畅。然后你们会发现旁边多了一个工程目录,这是我们要讲的重点:

下面我们来看看这工程的含义,其中难点我也会标注:

  1. src: 存放应用程序的.java源代码。
  2. gen: 编译器生成的R.java文件,存放res文件夹下所有资源的id
  3. project.properties: 指定当前工程采用的开发工具包的版本
  4. libs: 当前工程所依赖的jar包.
  5. assets: 程序中用到的所有资产,HTML、文本文件、数据库等
  6. bin: 生成过程中ADT生成的文件,他们生成Android应用二进制文件,包含运行时所需一切.(难点下节点讲)
  7. res(resources): 资源文件.

    drawable: 存放程序所用的图片.

    layout: 存放android的布局文件.

    menu: 存放android的OptionsMenu菜单的布局.

    values (应用程序所需要的数据. 会在R文件中生成id)

    strings.xml 存放android字符串.

    dimens.xml 存放屏幕适配所用到的尺寸.

    style.xml 存放android下显示的样式.

    values-sw600dp 7寸平板所对应的值

    values-sw720dp-land 10寸平板所对应的值

    values-v11 指定3.0版本以上的手机显示的样式.

    values-v14 指定4.0版本以上的手机显示的样式.

  8. AndroidManifest.xml: android应用程序的入口文件. 声明了android里边的组件. 和相关配置信息.
  9. proguard-project.txt: 加密当前程序所使用.(难点下节点讲)

大家和瓦匠想的一样,很想跑起来试试,那就跑呗:右键项目 → run as Android application 即可。

其中补充下,项目中一个重要文件:清单文件 AndroidManifest.xml,其内容如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?xml version="1.0"
encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="org.nsg.main"

    android:versionCode="1"

    android:versionName="1.0"
>

    <uses-sdk

        android:minSdkVersion="19"

        android:targetSdkVersion="19"
/>

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme"
>

        <activity

            android:name="org.nsg.main.HelloActivity"

            android:label="@string/app_name"
>

            <intent-filter>

                <action android:name="android.intent.action.MAIN"
/>

                <category android:name="android.intent.category.LAUNCHER"
/>

            </intent-filter>

        </activity>

    </application>

</manifest>

其中定义了版本代码,应用运行所需的操作系统版本,还有些基础的logo,名称等配置。值得泥瓦匠一说的是,在activity元素里面有个元素<intent-filter>的,它的作用:

1、意图筛选器名称android.intent.action.MAIN,表明应用入口点。

2、意图筛选器类别android.intent.category.LAUNCHER,表明应用从设备启动器图标启动。

泡杯热咖啡,冬天暖暖。然后休息会,我们下面讲编译时。

1.4 编译中学习

泥瓦匠,怎么说编译中学习,我们需要学习什么呢?

答曰:编译中学习,编译工程的变化,及DVM的一些特征。

当我们右键 run 的时候,大家会发现工程目录下的bin文件夹会发生变化,如图所示:

这些都是什么呢?让我们意义认识他们吧。

  • dexedlibs:编译后apk所需要的支持包
  • res:里面有所需要的一切资源:视频 图片等
  • lasses.dex:其实类似java文件编译后的class。只不过android就一个文件里面搞定。
  • apk:二进制流形式的文件
  • 下面两个则是一些引用清单。

为什么说DVM很支持或者很适合在移动终端使用呢。其中很多有趣的特性分析给大家:

1、dex文件把所有编译后的文件整到一起,健身了文件的尺寸和IO操作,也提高了类的查找。

2、基于寄存器,代码执行效率高。

其他也有很多,大家可以去找这方面的DVM知识。

1.5 总结

Android第一篇我觉得是不是讲的太多了,不管了,反正泥瓦匠都认为应该知道的东西。别见怪哦~

还是那句话,泥瓦匠想说:

如以上文章或链接对你有帮助的话,别忘了在文章按钮或到页面右下角点击 “赞一个” 按钮哦。你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章

时间: 2024-10-09 23:49:35

[Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析的相关文章

浅谈Android应用保护(二):Anti-Analysis的方法和工具

本文内容翻译自国外文献,原文链接请参看文章底部 之前讲到过,应用开发者为了保护自己的应用不被别人分析和篡改,会将应用的安全性寄托在某个(些)机制上.可以被用来保护应用的机制有很多,效果和实现难度也是各有特点.有这样一类应用保护方法,叫做针对逆向工具的对抗(Anti-Analysis). 针对逆向工具的对抗,简单来讲就是利用逆向工具自身的缺陷或者是Android特有的机制,使应用逆向分析工具在工作过程中失效或者报错崩溃,分析过程无法继续实施.从而达到保护应用的目的. 这种保护应用的方式的优点就是实

浅谈Android多屏幕的事

浅谈Android多屏幕的事 一部手机可以同时看片.聊天,还可以腾出一支手来撸!这么吊的功能(非N版本,非第三方也能实现,你不知道吧)摆在你面前,你不享用?不关注它是怎样实现的?你来,我就满足你的欲望! 一部手机可以同时看片.聊天,还可以腾出一支手来撸==!就像这样: 是时候告别来回切换应用屏幕的酸爽了,还可以在分屏模式下两Activity间直接拖放数据! 好高大上的样子!这是怎么实现的?别急,我们一一道来: kitkat(4.4)版本对多任务分屏的实现 由于相关的代码和功能被封装及隐藏起来,所

浅谈 Android Service

 浅谈Android Service的基本用法: 关于Service最基本的用法自然是启动和停止操作. 启动Service有两种方式: 1.通过startService(Intent intent)方式启动,启动时会自动执行onCreate(),onStartCommand()方法. 2.通过bindService(Intent intent,ServiceConnection connection,int flag) 第一个参数是一个Intent对象,第二个参数是连接Service的实例,

浅谈Android五大布局

Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLayout(线性布局).FrameLayout(单帧布局).RelativeLayout(相对布局).AbsoluteLayout(绝对布局)和TableLayout(表格布局). LinearLayout: LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后

浅谈Android五大布局(二)——RelativeLayout和TableLayout

在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局RelativeLayout(相对布局)和TableLayout(表格布局)相对之前布局结构稍显复杂一点,所以这里另起篇幅进行介绍. RelativeLayout: RelativeLayout按照各子元素之间的位置关系完成布局.在此布局中的子元素里与位置相关的属性将生效.例如android:layout_be

浅谈Android onClick与onLongClick事件触发的问题

之前做按钮的点击事件一直没有注意一些细节,今天做了一个按钮需要有点击和长点击触发不同效果,直接让Activity implements OnClickListener, OnLongClickListener然后添加了相应的处理函数. @Override public void onClick(View v) { // TODO Auto-generated method stub } @Override public boolean onLongClick(View v) { // TODO

浅谈Android保护技术__代码混淆

浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字.比如改写成单个字母,或是简短的无意义字母组合,甚至改写成"__"这样的符号,使得阅读的人无法根据名字猜测其用途.对于支持反射的语言,代码混淆有可能与反射发生冲突.代码混淆并不能真正阻止反向工程,只能增大其难度.因此,对于对安全性要求很高的场合,仅仅

安卓开发_浅谈Android动画(四)

Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属性动画类 方法 描述 setDuration(long duration) 设置动画持续时间的方法 setEvaluator(TypeEvaluator value) 设置插值计算的类型 setInterpolator(TimeInterpolator value) 设置时间插值器的类型 addUp

浅谈Android五大布局(二)——RelativeLayout和TableLayout【转】

http://www.cnblogs.com/wisekingokok/archive/2011/08/24/2152004.html 在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局RelativeLayout(相对布局)和TableLayout(表格布局)相对之前布局结构稍显复杂一点,所以这里另起篇幅进行介绍. RelativeLayout: Relat