Android 入门


Android 由 Google  和开放手机联盟领导开发,Linux 开源操作系统,用于智能手机和平板电脑
思路是 大概了解 按需学习
理解基本的Android编程,完成本教程以后,你将具备Android开发的中等专业知识水平

Android 四层 系统架构

从高到低分层  应用程序层 > 应用程序框架层 >系统运行库层 > linux核心层
应用程序层 Applications 提供 系统级的应用程序 如 浏览器 电话本 email 拔号器等
应用程序框架层Application Framwork 应用程序框架
可扩展的视图 Views   构建应用程序  包括列表 lists 网格 grids 文本框 text boxes 按钮 buttons 可嵌入web浏览器
内容提供器 Content Providers  使得应用程序 访问另个应用程序的数据 如联系人数据库   或共享它们自己的数据
资源管理器 Resource Manager 非代码资源的访问 如本地字符串 图形 和布局文件  layout files   
通知管理器  Notification Manager  使得应用程序 在状态栏中显示自定义的提示信息
活动管理器  Activity Manager  用来管理应用程序生命周期并提供常用的导航回退功能
库系统运行库
libc 系统c库 基于embedded linux设备定制
Surface Manager  对显示子系统的管理 为多个应用程序提 2D和3D图层的无缝融合 界面管理
Media Framework 媒体框架库
SQLite对应用程序可用 功能强劲 轻关系型 数据库引擎
OpenGL|ES 3D效果渲染 用硬件3D加速 用高度优化的3D软加速
FreeType  位图 bitmap 和矢量 vector字体显示
WebKit 最新的web浏览器引擎 支持Android浏览器和可嵌入web视图
SSL  安全的部分 SGL  底层的2D图形引擎

Android 运行库
Core Library Android该核心库提供了JAVA编程语言核心库的大多数功能
Dalvik虚拟机 依赖linux内核功能 线程机制和底层内存管理机制
Android 应用程序在自己的进程中运行 拥有独立的Dalvik虚拟机实例 Dalvik设备同时高效运行多个虚拟系统
Dalvik虚拟机执行.dex Dalvik可执行文件 该格式文件对小内存优化 虚拟机基于寄存器
类经由JAVA编译器编译后通过SDK中dx工具转化成.dex格式由虚拟机执行
Android核心系统服务
依赖Linux内核 如安全性 内存管理 进程管理  网络协议栈和驱动模型
Linux 内核也作为硬件和软件栈之间的抽象层
JVM与Dalvik虚拟机的区别
Dalvik基于寄存器 JVM基于栈 基于寄存器的虚拟机大程序编译花费时间短
VM字节码由.class文件组成 每个文件个class JVM运行时为每个类装载字节码
相反Dalvik程序只包含个.dex文件 文件包含了程序所有的类 Java编译器创建JVM字节码后 Dalvik的dx编译器删除.class文件
重新把编译成Dalvik字节码 然后写进个.dex文件中
开发环境准备
JDK  / Android Studio
开发工具
Android Studio 是 Google 基于 IntelliJ IDEA 的 Android 集成 开发工具  使用企业多
ADT-Bundle是 Google 集成好Eclipse 和 ADT开发工具 创建 Android App hello world

Android 基本概念

Android 应用程序通过工程 manifest 绑定在一起
manifest 描述 组件以及组件的作用
6个组件是Android应用程序的基石
Android 有四大组件分别是Activity/Service/Content Provider/BroadcastReceiver
四大组件一起组成了完整的Android程序 六大组件外加 Intent 和 Notification
Activity
Android 指个完整的占个屏幕的页面 理解成个网页一样
Activity 显示控件 视图  监听处理用户的事件 做出响应等
Activity 间通过Intent通信
Activity 实际上是个XML文件可被Android系统以可视化的界面展现
Activity与个Java后台程序相联系 Java程序控制页面的启动 展示数据等信息
页面上展示的内容 通过Activity本身的xml文件配置
也可以由相联系的Java文件来控制 Activity对应哪个Java程序 通过ID 连接
Service服务 是Android程序中不可见 部分
负责更新数据源 触发通知等
没有界面的长生命周期 适合监控 或后台运行的程序
Android 服务分为本地服务和远程服务
前者只能由托管服务的应用程序访问
后者是指由设备上其  应用程序进行远程访问的服务
Content Provider 内容提供器
App运行需要很多外部数据作为支撑 数据 由内容提供器 存储 共享
配置自己的Content Provider来存取其  应用程序 或通过其  应用程序Content Provider获取数据
系统本身也提供Content Provider 如联系人信息等
这些数据 存储在文件系统 SQLite数据库 或 其  媒介
BroadcastReceiver 广播接收器
没有用户界面 启动个 activity 或 serice 响应 收到的信息 或用NotificationManager 来通知用户
通知可以用很多种方式来吸引用户的注意力 闪动背灯 震动 播放声音等
是在状态栏上放个持久的图标 用户可以打开它并获取消息
Intent也是 重要的组件 各种组件之间通信的桥梁 执行很多相关的任务
而Notification是通知组件 主要 推送用户信息

Android App 项目文件

app
 manifests
   AndroidManifest.xml
 java
 res
AndroidManifest.xml文件mainfests文件夹下叫做清单文件 描述整个项目信息 包括项目名称SDK版本等清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.localgo.localgo">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        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>
        <activity android:name=".DisplayMessageActivity"></activity>
        <activity android:name=".ProfileActivity"></activity>
    </application>
</manifest>
package是包名 application开始 以 android 开头的行
描述 项目程序的信息 是描述图标
主题信息 引用资源文件夹中的values 文件夹下面的资源信息
以 activity 开头的行则描述本程序涉及到哪些界面 活动 Activity活动对应个屏幕的UI界面
描述了该页面的一些信息  这个 android.intent.action.MAIN 表明 这个活动是本程序的入口页面
在应用程序中的每个活动必须在 AndroidManifest.xml 文件中声明
java文件夹 存放 java 源程序 以Activity结尾的 每个文件 对应 个Activity的页面 也就是和下面资源文件夹 res 中的layout里面的内容绑定
res文件夹 提供资源 外部化应用资源 有利于资源 单独维护 如图像和代码中的字符串
为特定设备配置提供备用资源  将 分组到专门命名的资源目录中 在运行时 Android 会根据当前配置使用适当的资源
例如  可能需要根据屏幕尺寸提供不同的 UI 布局 或 根据语言设置提供不同的字符串
外部化应用资源后  使用在项目 R 类中生成的资源 ID 访问这些资源 而资源 是在这个res文件夹下面 包括图片 布局文件 菜单等
drawable 资源
可拉伸 存放 位图的文件夹 称之为位图资源 存放jpg png等图片资源的文件夹
需要根据 高 中 低 三种不同分辨率 放置三种不同清晰度的图片 便于系统调用 可能需要存放不同尺寸的图片
drawable资源有两种
一种是 图像资源 .jpg 等 叫Image Asset 是图像资源 拥有固定大小和尺寸 有放大和缩小 问题 要存放多个不同尺寸的版本供调用
一种是 xml类型的drawable资源 叫Vector Asset 响亮资源 是一系列命令 适应不同尺寸或分辨率
如 ic_card_giftcard_black_24dp.xml 文件的内容
描述的是个黑色的公文包 代码中出了常见的尺寸等信息 那个 pathData 描述形状
Android Studio 自带了一些 右键单击 drawable 文件夹 选择 New-Vector Assett就能看到了
<vector xmlns:android="http://schemas.android.com/apk/res/android"
  android:width="24dp"
  android:height="24dp"
  android:viewportWidth="24.0"
  android:viewportHeight="24.0">
<path
  android:fillColor="#FF000000"
  android:pathData="M20,6h-2.18c0.11,-0.31 0.18,-0.65 0.18,-1 0,-1.66 -1.34,-3 -3,-3 -1.05,0 -1.96,0.54 -2.5,1.35l-0.5,0.67 -0.5,-0.68C10.96,2.54 10.05,2 9,2 7.34,2 6,3.34 6,5c0,0.35 0.07,0.69 0.18,1L4,6c-1.11,0 -1.99,0.89 -1.99,2L2,19c0,1.11 0.89,2 2,2h26c1.11,0 2,-0.89 2,-2L22,8c0,-1.11 -0.89,-2 -2,-2zM15,4c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM9,4c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM20,19L4,19v-2h26v2zM20,14L4,14L4,8h5.08L7,10.83 8.62,12 11,8.76l1,-1.36 1,1.36L15.38,12 17,10.83 14.92,8L20,8v6z"/>
</vector>
layout资源 layout文件夹存放 布局资源 指Android 活动 和 视图
Android占用个屏幕UI 界面称 为Activity 活动 页面中的按钮 标签 文本字段 等称为 View 视图
活动通常包含 多个视图 也就是 页面里面有按钮啊 文本之类
布局文件 是XML文件 Android 视图 从XML文件加载 描述了位置 大小等等视图信息
布局资源 每个文件都将根据其文件名 不包含扩展名 生成个唯一的常量 这些常量也就是其ID
与 java 源文件绑定 或 被其  页面调用 layout 文件 都是xml文件 每个xml文件 定义 TextView ImageView 等
values 资源
Android 存放 数组 颜色 尺寸 字符串 样式 的 文件夹 通常有文件
/res/values/strings.xml
/res/values/colors.xml
/res/values/dimens.xml
/res/values/attrs.xml
/res/values/styles.xml
统一存放所有的变量的地方 如主题颜色 app名称 Logo的样式等
values资源下 统一定义 统一修改
values 资源定义 尖括号定义资源类型 name 表示资源名称 里面表示内容
<string name="app_name">乐购</string>
<string name="edit_message">请输入您想查询的地点</string>
minmap  Android 存放 程序启动图标的 文件夹  只存放这个启动图标 就是桌面图标

Android 资源访问R类/R.java

Android开发 应当始终外部化资源  资源存放在res文件夹中 利于资源 单独维护
Android开发 外部资源 通过其资源 ID来访问
资源ID 在项目中 R类中定义
R.java 类是由 aapt 工具自动生成  用户本身不用修改添加
只要在资源中申明了ID 那么R类会自动将该资源添加到其中
编译应用时 aapt 会生成 R 类 其中包含 res/ 目录中所有资源的资源 ID
资源类型 有对应的 R 子类( 如 R.drawable 对应于所有可绘制对象资源)
而该类型的每个资源都有对应的静态整型数 如 R.drawable.icon 这个整型数 是可用来检索资源的资源ID
定义资源ID 包括两个部分
个是资源类型 如string  drawable 和 layout 等
个是资源名称 不包括其扩展名(当然也可以是xml中 android:name 属性中的值)
访问资源有两种方式
一种是在Java程序
一种是在XML文件
Java程序 访问资源
设置内容显示为某个 activity 可以使用 R.layout.activity 名称的方式 其中layout是资源类型
后面的是资源名称 setContentView(R.layout.activity_display_message);
#这种方式是在XML文件中访问资源 使用@开头表示什么类型 然后价格斜杠后面写上资源名称 @string/hello
Android官网
//developer.android.google.cn/index.html 不需要梯子
//github.com/coder-pig/Android-Storage-Box
按需学习