大小:16.77M
更新时间:23-09-06
系统:Pc
本款android从入门到精通pdf是由明日科技编著,是一本android入门书籍。全书由浅入深,循序渐进,以初、中级程序员为对象,从了解Android和搭建开发环境学起,再学习Android开发的基础技术,然后学习Android开发的高级内容,最后学习如何开发一个完整项目。讲解过程中步骤详尽、版式新颖,并在操作的内容图片上进行了标注,让读者在阅读时一目了然,从而快速掌握书中内容,能够适合作为软件开发入门者的自学用书,也适合作为高等院校相关专业的教学参考书。
《android从入门到精通》从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了Android应用程序开发应该掌握的各方面技术。
全书共分15章,内容包括Android快速入门、Android模拟器与常用命令、用户界面设计、高级用户界面设计、基本程序单元Activity、Android应用核心Intent、Android事件处理、资源访问、图形图像处理技术、多媒体应用开发、Content Provider实现数据共享线程与消息处理、Service应用、网络编程及Internet应用和基于Android的家庭理财通。
所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会Android应用程序开发的精髓,快速提高开发技能。
《android从入门到精通》提供了从入门到编程高手所必备的各类知识,共分3篇。
第1篇:基础篇。本篇内容包括Android快速入门、Android模拟器与常用命令、用户界面设计、高级用户界面设计、基本程序单元Activity、Android应用核心Intent、Android事件处理、资源访问,并结合大量的图示、范例、经典应用和视频等使读者快速掌握Android应用开发的基础知识,并为以后编程奠定坚实的基础。
第2篇:高级篇。本篇内容包括图形图像处理技术、多媒体应用开发、Content Provider实现数据共享、线程与消息处理、Service应用、网络编程及Internet应用,并结合大量的图示、范例、经典应用和录像等使读者快速掌握Android开发中的高级内容,学习完本篇,读者可以掌握更深一层的Android开发技术。
第3篇:项目实战篇。本篇通过一个完整的家庭理财通实例,运用软件工程的设计思想,介绍如何进行Android桌面应用程序的开发。书中按照“系统分析→系统设计→系统开发及运行环境→数据库与数据表设计→创建项目→系统文件夹组织结构→公共类设计→登录模块设计→系统主窗体设计→收入管理模块设计→便签管理模块设计→系统设置模块设计→运行项目→将程序安装到Android手机上”的流程进行介绍,带领读者一步步亲身体验开发项目的全过程。
1、下载并解压,得出pdf文件
2、如果打不开本文件,请务必下载pdf阅读器
3、安装后,在打开解压得出的pdf文件
4、双击进行阅读
第1篇 基础篇 第1章 Android快速入门 教学录像:1小时19分钟 1.1 什么是Android 1.1.1 平台特性 1.1.2 平台架构 1.1.3 Android市场 1.2 搭建Android开发环境 1.2.1 系统需求 1.2.2 JDK的下载 1.2.3 JDK的安装 1.2.4 Android SDK的下载与安装 1.2.5 Eclipse的下载与安装 1.2.6 Eclipse的汉化 1.2.7 ADT插件的安装及配置 1.3 第一个Android程序 1.3.1 创建Android应用程序 1.3.2 Android项目结构说明 1.3.3 运行Android应用程序 1.3.4 调试Android应用程序 1.3.5 Android应用开发流程 1.4 小结 1.5 实践与练习 第2章 Android模拟器与常用命令 教学录像:47分钟 2.1 使用Android模拟器 2.1.1 模拟器概述 2.1.2 Android虚拟设备和模拟器 2.1.3 Android模拟器启动与停止 2.1.4 控制模拟器 2.1.5 模拟器与磁盘镜像 2.1.6 Android .0模拟器介绍 2.1.7 模拟器限制 2.1.8 范例1:设置模拟器语言 2.1.9 范例2:设置时区和时间 2.1.10 范例3:设置模拟器桌面背景 2.2 SDK中常用命令 2.2.1 adb命令 2.2.2 android命令 2.2.3 emulator命令 2.2.4 mksdcard命令 2.2.5 范例1:在SD卡上创建/删除文件夹 2.2.6 范例2:使用DDMS透视图管理SD卡 2.3 经典范例 2.3.1 安装搜狗拼音输入法 2.3.2 卸载搜狗拼音输入法 2.3.3 使用模拟器拨打电话 2.4 小结 2.5 实践与练习 第3章 用户界面设计 教学录像:4小时57分钟 3.1 控制UI界面 3.1.1 使用XML布局文件控制UI界面 3.1.2 在代码中控制UI界面 3.1.3 使用XML和Java代码混合控制UI界面 3.1.4 开发自定义的View 3.2 布局管理器 3.2.1 线性布局 3.2.2 表格布局 3.2.3 帧布局 3.2.4 相对布局 3.2.5 范例1:使用表格布局与线性布局实现分类工具栏 3.2.6 范例2:布局个性游戏开始界面 3.3 基本组件 3.3.1 文本框与编辑框 3.3.2 按钮 3.3.3 单选按钮和复选框 3.3.4 图像视图 3.3.5 列表选择框 3.3.6 列表视图 3.3.7 日期、时间拾取器 3.3.8 计时器 3.3.9 范例1:实现跟踪鼠标单击状态的图片按钮 3.3.10 范例2:实现带图标的ListView 3.4 经典范例 3.4.1 我同意游戏条款 3.4.2 猜猜鸡蛋放在哪只鞋子里 3.5 小结 3.6 实践与练习 第4章 高级用户界面设计 教学录像:2小时46分钟 4.1 高级组件 4.1.1 自动完成文本框 4.1.2 进度条 4.1.3 拖动条和星级评分条 4.1.4 选项卡 4.1.5 图像切换器 4.1.6 网格视图 4.1.7 画廊视图 4.1.8 范例1:显示在标题上的进度条 4.1.9 范例2:幻灯片式图片浏览器 4.2 消息提示框与对话框 4.2.1 使用Toast显示消息提示框 4.2.2 使用Notification在状态栏上显示通知 4.2.3 使用AlertDialog创建对话框 4.2.4 范例1:询问是否退出的对话框 4.2.5 范例2:带图标的列表对话框 4.3 经典范例 4.3.1 实现仿Windows 图片预览窗格效果 4.3.2 状态栏中显示代表登录状态的图标 4.4 小结 4.5 实践与练习 第5章 基本程序单元Activity 教学录像:2小时4分钟 5.1 Activity概述 5.2 创建、配置、启动和关闭Activity 5.2.1 创建Activity 5.2.2 配置Activity 5.2.3 启动和关闭Activity 5.2.4 范例1:实现启动和关闭Activity 5.2.5 范例2:实现应用对话框主题的关于Activity 5.3 多个Activity的使用 5.3.1 使用Bundle在Activity之间交换数据 5.3.2 调用另一个Activity并返回结果 5.3.3 范例1:实现根据身高计算标准体重 5.3.4 范例2:带选择头像的用户注册页面 5.4 使用Fragment 5.4.1 创建Fragment 5.4.2 在Activity中添加Fragment 5.5 经典范例 5.5.1 仿QQ客户端登录界面 5.5.2 带查看原图功能的图像浏览器 5.6 小结 5.7 实践与练习 第6章 Android应用核心Intent 教学录像:39分钟 6.1 Intent对象 6.1.1 组件名称(Component Name) 6.1.2 动作(Action) 6.1.3 数据(Data) 6.1.4 种类(Category) 6.1.5 额外(Extras) 6.1.6 标记(Flags) 6.1.7 范例1:在Activity间使用Intent传递信息 6.1.8 范例2:返回系统Home桌面 6.2 Intent使用 6.2.1 Intent过滤器 6.2.2 范例1:使用包含预定义动作的隐式Intent 6.2.3 范例2:使用包含自定义动作的隐式Intent 6.3 经典范例 6.3.1 使用Intent拨打电话 6.3.2 使用Intent打开网页 6.4 小结 6.5 实践与练习 第7章 Android事件处理 教学录像:37分钟 7.1 事件处理概述 7.2 处理键盘事件 7.2.1 物理按键简介 7.2.2 范例1:屏蔽后退键 7.2.3 范例2:提示音量增加事件 7.3 处理触摸事件 7.3.1 范例1:按钮触摸事件 7.3.2 范例2:检测触摸事件 7.4 手势的创建与识别 7.4.1 手势的创建 7.4.2 手势的导出 7.4.3 手势的识别 7.5 经典范例 7.5.1 查看手势对应分值 7.5.2 使用手势输入数字 7.6 小结 7.7 实践与练习 第8章 资源访问 教学录像:2小时56分钟 8.1 字符串(string)资源 8.1.1 定义字符串资源文件 8.1.2 使用字符串资源 8.2 颜色(color)资源 8.2.1 颜色值的定义 8.2.2 定义颜色资源文件 8.2.3 使用颜色资源 8.3 尺寸(dimen)资源 8.3.1 Android支持的尺寸单位 8.3.2 定义尺寸资源文件 8.3.3 使用尺寸资源 8.3.4 范例1:通过字符串、颜色和尺寸资源改变文字及样式 8.3.5 范例2:逐渐加宽的彩虹桥背景 8.4 布局(Layout)资源 8.5 数组(array)资源 8.5.1 定义数组资源文件 8.5.2 使用数组资源 8.6 Drawable资源 8.6.1 图片资源 8.6.2 StateListDrawable资源 8.6.3 范例1:使用9-Patch图片实现不失真按钮背景 8.6.4 范例2:控制按钮是否可用 8.7 样式(style)和主题(theme)资源 8.7.1 样式资源 8.7.2 主题资源 8.8 原始XML资源 8.9 菜单(menu)资源 8.9.1 定义菜单资源文件 8.9.2 使用菜单资源 8.9.3 范例1:创建上下文菜单 8.9.4 范例2:创建带子菜单的选项菜单 8.10 Android程序国际化 8.11 经典范例 8.11.1 背景半透明效果的Activity 8.11.2 实现了国际化的选项菜单 8.12 小结 8.13 实践与练习 第2篇 高级篇 第9章 图形图像处理技术 教学录像:2小时56分钟 9.1 常用绘图类 9.1.1 Paint类 9.1.2 Canvas类 9.1.3 Bitmap类 9.1.4 BitmapFactory类 9.2 绘制2D图像 9.2.1 绘制几何图形 9.2.2 绘制文本 9.2.3 绘制路径 9.2.4 绘制图片 9.2.5 范例1:绘制Android的机器人 9.2.6 范例2:实现简易涂鸦板 9.3 为图形添加特效 9.3.1 旋转图像 9.3.2 缩放图像 9.3.3 倾斜图像 9.3.4 平移图像 9.3.5 使用BitmapShader渲染图像 9.3.6 范例1:实现带描边的圆角图片 9.3.7 范例2:实现放大镜效果 9.4 Android中的动画 9.4.1 实现逐帧动画 9.4.2 实现补间动画 9.4.3 范例1:忐忑的精灵 9.4.4 范例2:旋转、平移、缩放和透明度渐变的补间动画 9.5 经典范例 9.5.1 在GridView中显示SD卡上的全部图片 9.5.2 迷途奔跑的野猪 9.6 小结 9.7 实践与练习 第10章 多媒体应用开发 教学录像:1小时36分钟 10.1 播放音频与视频 10.1.1 使用MediaPlayer播放音频 10.1.2 使用SoundPool播放音频 10.1.3 使用VideoView播放视频 10.1.4 使用MediaPlayer和SurfaceView播放视频 10.1.5 范例1:播放SD卡上的全部音频文件 10.1.6 范例2:带音量控制的音乐播放器 10.2 控制相机拍照 10.3 经典范例 10.3.1 为游戏界面添加背景音乐和按键音 10.3.2 制作开场动画 10.4 小结 10.5 实践与练习 第11章 ContentProvider实现数据共享 教学录像:42分钟 11.1 Content Provider概述 11.1.1 数据模型 11.1.2 URI的用法 11.2 预定义Content Provider 11.2.1 查询数据 11.2.2 增加记录 11.2.3 增加新值 11.2.4 批量更新记录 11.2.5 删除记录 11.2.6 范例1:系统内置联系人的使用 11.2.7 范例2:查询联系人ID和姓名 11.3 自定义Content Provider 11.3.1 继承ContentProvider类 11.3.2 声明Content Provider 11.4 经典范例 11.4.1 查询联系人姓名和电话 11.4.2 自动补全联系人姓名 11.5 小结 11.6 实践与练习 第12章 线程与消息处理 教学录像:50分钟 12.1 实现多线程 12.1.1 创建线程 12.1.2 开启线程 12.1.3 线程的休眠 12.1.4 中断线程 12.1.5 范例1:通过实现Runnable接口来创建线程 12.1.6 范例2:开启一个新线程播放背景音乐 12.2 Handler消息传递机制 12.2.1 循环者(Looper)简介 12.2.2 消息处理类(Handler)简介 12.2.3 消息类(Message)简介 12.2.4 范例1:开启新线程获取网络图片并显示到ImageView中 12.2.5 范例2:开启新线程实现电子广告牌 12.3 经典范例 12.3.1 多彩的霓虹灯 12.3.2 简易打地鼠游戏 12.4 小结 12.5 实践与练习 第13章 Service应用 教学录像:48分钟 13.1 Service概述 13.1.1 Service的分类 13.1.2 Service类中的重要方法 13.1.3 Service的声明 13.2 创建Started Service 13.2.1 继承IntentService类 13.2.2 继承Service类 13.2.3 启动服务 13.2.4 停止服务 13.2.5 实例1:继承IntentService输出当前时间 13.2.6 实例2:继承Service输出当前时间 13.3 创建Bound Service 13.3.1 继承Binder类 13.3.2 使用Messenger类 13.3.3 绑定到服务 13.3.4 实例1:继承Binder类绑定服务显示时间 13.3.5 实例2:使用Messenger类绑定服务显示时间 13.4 管理Service的生命周期 13.5 经典范例 13.5.1 视力保护程序 13.5.2 查看当前运行服务信息 13.6 小结 13.7 实践与练习 第14章 网络编程及Internet应用 教学录像:1小时36分钟 14.1 通过HTTP访问网络 14.1.1 使用HttpURLConnection访问网络 14.1.2 使用HttpClient访问网络 14.1.3 范例1:从指定网站下载文件 14.1.4 范例2:访问需要登录后才能访问的页面 14.2 使用WebView显示网页 14.2.1 使用WebView组件浏览网页 14.2.2 使用WebView加载HTML代码 14.2.3 让WebView支持JavaScript 14.3 经典范例 14.3.1 打造功能实用的网页浏览器 14.3.2 获取天气预报 14.4 小结 14.5 实践与练习 第3篇 项目实战篇 第15章 基于Android的家庭理财通 教学录像:51分钟 15.1 系统分析 15.1.1 需求分析 15.1.2 可行性分析 15.1.3 编写项目计划书 15.2 系统设计 15.2.1 系统目标 15.2.2 系统功能结构 15.2.3 系统业务流程 15.2.4 系统编码规范 15.3 系统开发及运行环境 15.4 数据库与数据表设计 15.4.1 数据库分析 15.4.2 创建数据库 15.4.3 创建数据表 15.5 创建项目 15.6 系统文件夹组织结构 15.7 公共类设计 15.7.1 数据模型公共类 15.7.2 Dao公共类 15.8 登录模块设计 15.8.1 设计登录布局文件 15.8.2 登录功能的实现 15.8.3 退出登录窗口 15.9 系统主窗体设计 15.9.1 设计系统主窗体布局文件 15.9.2 显示各功能窗口 15.9.3 定义文本及图片组件 15.9.4 定义功能图标及说明文字 15.9.5 设置功能图标及说明文字 15.10 收入管理模块设计 15.10.1 设计新增收入布局文件 15.10.2 设置收入时间 15.10.3 添加收入信息 15.10.4 重置新增收入窗口中的各个控件 15.10.5 设计收入信息浏览布局文件 15.10.6 显示所有的收入信息 15.10.7 单击指定项时打开详细信息 15.10.8 设计修改/删除收入布局文件 15.10.9 显示指定编号的收入信息 15.10.10 修改收入信息 15.10.11 删除收入信息 15.11 便签管理模块设计 15.11.1 设计新增便签布局文件 15.11.2 添加便签信息 15.11.3 清空便签文本框 15.11.4 设计便签信息浏览布局文件 15.11.5 显示所有的便签信息 15.11.6 单击指定项时打开详细信息 15.11.7 设计修改/删除便签布局文件 15.11.8 显示指定编号的便签信息 15.11.9 修改便签信息 15.11.10 删除便签信息 15.12 系统设置模块设计 15.12.1 设计系统设置布局文件 15.12.2 设置登录密码 15.12.3 重置密码文本框 15.13 运行项目 15.14 将程序安装到Android手机上 15.15 开发中常见问题与解决方法 15.15.1 程序在装有Android系统的手机上无法运行 15.15.2 无法将最新修改在Android模拟器中体现 15.15.3 退出系统后还能使用记录的密码登录 15.16 小结
同类热门
类似软件
Android任务驱动式教程37.84M172人在用Android任务驱动式教程是一本高清pdf格式的电子书,书本以eclipse为集成开发环境,结合作者近年来在手机软件研发和教学中积累的经验,以一个企业级的手机研发项目--手机文件管理器的开发过程为主线,详细介绍了android平台开发的相关知识。另外软
查看android 7.1.1正式版(原生系统)510M3014人在用android 7.1.1正式版,又称之为安卓7.1.1正式版,是谷歌官方推出的最新版本的android原生系统,用户可以在OTA升级,不过目前可以升级的只有谷歌自家的手机和部分原生Android手机,包括Nexus6、Nexus 5X、Nexus 6P
查看android驱动开发与移植实战详解5.14M313人在用android驱动开发与移植实战详解是一本pdf高清版的电子图书,已经附带了pdf福昕阅读器在软件包中,用户可以即下即看。android安卓系统是谷歌公司推出的一款手机系统,是基于linux内核开发的,能够迅速建立手机软件的解决方案。该系统采用了webk
查看android 4游戏编程入门经典pdf3.55M291人在用《android 4游戏编程入门经典》是专为游戏开发的初学者量身打造的一款android开发入门教程,作者[美]Mario Zechner和Robert Green,曾繁贰、于建业和王炜译,清华大学出版社出版。全书最大亮点是:它教你如何从零开始学习and
查看轻松学Android开发pdf37M252人在用轻松学Android开发pdf是目前学习Android开发的最好的入门图书,由于Android的持续火爆,关于这方面的图书也是卖得很好。全书以图解的方式显示了如何学习Android编程,拥有282幅教学插图、105个典型示例、455分钟视频教程、以及53
查看疯狂android讲义第3版233.07M379人在用 如何更好的学习android开发?这里小编为广大网友带来了疯狂android讲义第3版pdf下载,pdf高清无水印版,是目前最好的一本介绍Android应用开发的实用图书,曾获评CSDN年度具有技术影响力十大原创图书,作者李刚。 全书介
查看Android开发工具(adt plugin for eclipse)32.07M261人在用adt plugin for eclipse是一个eclipse插件,作为一款超级专业的Android应用程序开发工具,adt plugin for eclipse可以让你快速的建立一个Android项目,创建应用程序的界面,基于Android框架API
查看android开发入门教程42.02M278人在用随着互联网的时代一步一步向人类走来,如果在短时间内掌握计算机编程有关的技巧,不管到哪里都非常吃香。因此小编特意给用户准备了android编程教程,在这套教程中一共包含了5项学习知识,分别是Android实例与详解、Android网络开发技术实战详解、An
查看google android开发入门与实战高清版35.85M200人在用说到google android,它实际上是Google开发的基于Linux平台的开源手机操作系统,包括了操作系统、用户界面、用户程序、移动电话工作所需要的全部软件,并不存在任何以往阻碍移动产业创新的专有权障碍。如果用户想要学会这一技术,光凭间的那的视频
查看热门标签
网友评论1人参与,1条评论
最新排行
mysql入门很简单169.1M黄缙华pdf扫描版 mysql入门很简单是一本MySql数据库的入门书籍,获得大量好评,5次印刷,畅销15000册,由黄缙华编著。本书以初学者的角度出发,由浅入深,循序渐进地介绍了mysql数据库应用与开发的相关知识,包括MySQL数据库基础,Windows平台下安装
查看360个人图书馆电脑版82.83Mv2.3.2官方版 360个人图书馆电脑版是360官方提供的一款电脑在线文档资讯软件,该软件能让您将创作的文章、图片和在网上看到的好文章和美图统统放到属于自己的图书馆中,日积月累形成自己真正的个人知识库和知识门户。用户一经注册,即可获得属于自己的个人图书馆空间,可以把
查看响应式web设计html5和css3实战第2版10.6Mpdf扫描版响应式web设计是一种统一的解决方案,可以让web作品适配手机,平板和桌面电脑。但如何才能更好的学习和入门呢?响应式web设计html5和css3实战第2版将为用户提供最全面的讲解,是一本html和css3的实战手册,由英国程序员本·弗莱恩编著。本书涵盖
查看python入门经典教材45.5M中文完整版 python是诞生于一种开放源代码的脚本编程语言,语言风格清晰,具有较强的可读性,应用非常广泛。可对于部分新手程序员来讲,想要灵活运用python必须拥有一套秘籍,而小编今天分享的“python入门经典”就是非常优秀的秘籍,通过该书读者不仅能掌握p
查看c#从入门到精通第3版119.82M明日科技pdf扫描版c#从入门到精通第3版是一本C#语言的入门书籍,由明日科技C#程序开发团队数十名程序员编著。本书内容由浅入深,循序渐进,全书以初、中级程序员为对象,先从C#语言基础学起,再学习C#的核心技术,然后学习C#的高级应用,最后学习开发一个完整项目。讲解过程中步
查看构建oracle高可用环境58.61M陈吉平pdf扫描版构建oracle高可用环境是一本介绍管理OracLe高可用数据库的经验之书,由陈吉平著作,电子工业出版社出版。全书内容横跨主机、存储、数据库三大领域,全面介绍oracle及周边环境的高可用性,所有的内容都包括了作者多年来Oracle高可用数据库的经验,在
查看数据重现文件系统原理精解与数据恢复最佳实践31.66M马林pdf扫描版数据重现文件系统原理精解与数据恢复最佳实践是一本全面介绍Windows及非Windows文件系统的数据恢复技术书籍,简称为数据重现,由马林编著。全书内容丰富翔实,主要介绍了使用较为广泛的MBR分区体系,还详细介绍了Apple、GPT等分区体系;在文件系统
查看iPhone游戏开发实践指南36.52M戴利pdf扫描版 iPhone游戏开发实践指南是一本iphone游戏开发实践手册,由美国iphone开发程序员戴利编著。本书是新手的完美入门手册。作者将带领你走过开发iPhone热门二维游戏的每个细节。在本书中,你将学习如何构建二维贴图地图游戏Sir Lamorak
查看联想lj2200使用说明书3.22M在第一次安装和使用该产品之前,简单阅读联想lj2200说明书绝对会给您在操作方面带来一些帮助,如果购买打印机时没有赠送说明书,那么请直接下载本站提供的说明书,里面从打印机的安装到打印功能的使用都有详细介绍,还不会使用打印机的朋友可以好好学习下啦,尤其是那
查看主板维修从入门到精通49.35M主板维修从入门到精通为讲解电脑主板维修知识的专业技术图书。书中从最基础的电路知识讲起,一步步地引导读者从入门到提高,掌握电脑主板维修技术。在讲述各个电路的时候,都是先从原理讲起,并配以大量图片,然后再讲解针对该电路故障的详细检测方法及维修技巧。主板维修要
查看深入浅出oracle dba入门进阶与诊断案例4.78M盖国强pdf扫描版 深入浅出oracle dba入门进阶与诊断案例是一本Oracle数据库的入门进阶书籍,由盖国强编著。本书从基础出发,逐层深入,并结合实际工作中的诊断案例进行全面讲解,力图从点到面,让读者对每个主题都有深入的了解和认识。全书是ITPUB技术丛书的第三
查看google android开发入门与实战高清版35.85MPDF版说到google android,它实际上是Google开发的基于Linux平台的开源手机操作系统,包括了操作系统、用户界面、用户程序、移动电话工作所需要的全部软件,并不存在任何以往阻碍移动产业创新的专有权障碍。如果用户想要学会这一技术,光凭间的那的视频
查看大数据挑战与nosql数据库技术1.95M完整版 大数据挑战与nosql数据库技术是一本NoSQL数据库数据操作手册,由陆嘉恒编著。本书内容丰富翔实,主要从理论、系统、应用三个方面详细讲述了大数据的技术知识,并针对NoSQL数据库技术做了深入的分享,是学习大数据技术的地图、指南手册,可以帮助读者跳
查看
第1楼 湖北省恩施州电信 网友