57

PM技术课 | Android那些事儿

 5 years ago
source link: https://www.tuicool.com/articles/zauuE3U
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android最初由安迪·鲁宾(Andy Rubin)等人在2003年开发,2005年被Google收购,现在Android 系统是由谷歌及其他公司带领的开放手机联盟开发的。那我们本文就一起来了解一下关于Android那些事儿~

MZrmA3f.jpg!web

Android简介

Android 是一个开源的,基于 Linux 的操作系统,运行在智能手机或者平板电脑。因为开源,所以每个厂商都可以免费使用,我们常见的小米、华为、OPPO、VIVO、三星等厂商的智能手机都是基于Android的,这些手机厂商在Android系统的基础上进行了修改,形成了自己“定制版”的操作系统,比如小米开发的MIUI。值得一提的是,不少智能电视也是基于Android 系统的,比如小米电视。

Android最初由安迪·鲁宾(Andy Rubin)等人在2003年开发,2005年被Google收购,现在Android 系统是由谷歌及其他公司带领的开放手机联盟开发的。

谷歌在2007年发布了第一个测试版本的 Android 软件开发工具包,为了推广Android系统,Google公司为Android系统提供了统一的APP开发方法,这意味着开发者只需要开发一次,就可以运行在数以亿计的Android设备上。

数以亿计的市场吸引着众多的开发者加入Android开发的行列,这也促使了Android系统更加强大。

6vYNn2F.jpg!web

Android 应用程序一般使用 Google提供的免费开发工具Android Studio开发,采用 Java或者Kotlin语言开发。一旦开发完成,Android 应用程序很容易打包,并在应用市场上发布。国内有豌豆荚、应用宝等独立应用商店,也有小米应用商店、华为应用商店等手机厂商自带的应用商店,国外主要是Google Play 和亚马逊应用商店。

Android APP最开始采用Java语言开发。

Java是由美国甲骨文公司开发维护的一门开源语言,但2010年8月,甲骨文公司就开始对Google无授权使用Java语言侵犯了公司的专利在美国加州北区地方法院提起控诉,要求高达90亿美元的赔偿。案件最终上诉到美国联邦巡回上诉法院,直到2016年5月,旧金山联邦法院认定Android不构成侵权,最终判定Google胜诉。

虽然胜诉了,但Google仍然心有余悸,竭力避免对Java的过度依赖。

2019年,谷歌宣布,Kotlin 编程语言是 Android 应用程序开发人员的首选语言。谷歌在声明中写道:“Android 的开发将越来越以 Kotlin 为先,许多新的API 和特性将首先在 Kotlin 中提供。如果你要开始一个新项目,你应该用 Kotlin 来写。用 Kotlin 编写通常意味着更少的代码——更少用于类型、测试和维护方面的代码。”

RniuIbI.jpg!web

Android UI

用户界面(User Interface,UI)是系统和用户进行交互和信息交换的介质,我们看到了文字、图片、视频等东西都是UI。

产品UI是用户对产品最直接的感受,UI设计也是软件开发的重中之重。

e26zM3m.jpg!web

Android 应用中所有用户界面元素都是使用 View 和 ViewGroup构建而成,View在屏幕上绘制可供用户交互的内容,ViewGroup 对象用于储存其他 View(和 ViewGroup)对象,以便定义界面的布局。

View可以简单理解为视图,ViewGroup可以理解为视图的组合。View包括控件和控件之间的布局(layout)。

QjAFNzb.jpg!web

控件

Android 提供了多种可在 UI 中使用的控件,如文本字段、复选框、按钮、图片等。

6rABZzu.jpg!web

Android部分控件效果

常用控件列表如下:

yyeAreJ.jpg!web

每个控件都有id、width、height等常见属性。

MNfiemJ.jpg!web

布局

布局确定控件之间的相对的位置,包括线性布局(LinearLayout)、相对布局(RelativeLayout)、表格布局(TableLayout)、网格布局 (GridLayout)

线性布局,使用单个水平行或垂直行来组织子项的布局,它会在窗口长度超出屏幕长度时创建一个滚动条。

2umIfem.jpg!web

相对布局,指定子对象彼此之间的相对位置(比如,子对象 A 在子对象 B 左侧)或子对象与父对象的相对位置(比如:子对象与父对象顶部对齐)。

IzuUjub.jpg!web

列表视图,实现滚动的单列列表。

BZ7ZriU.jpg!web

网格视图,实现滚动的行列表格。

jyIreea.jpg!web

Android系统权限

在默认情况下任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作,这包括读取或写入用户的私有数据(比如联系人或电子邮件)、读取或写入其他应用程序的文件、执行网络访问、使设备保持唤醒状态等。

Android 应用默认情况下未关联权限,如果要使用这些权限,必须向系统申请权限。经常使用的有两种权限,分别是正常权限和危险权限。

正常权限指应用需要访问外部数据或资源,但对用户隐私或其他应用操作风险很小的区域。比如:设置时区的权限就是正常权限,如果应用声明其需要正常权限,系统会自动向应用授予该权限。

危险权限指应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。比如,能够读取用户的联系人属于危险权限,如果应用声明其需要危险权限,则用户必须明确向应用授予该权限。

从技术上看,申请权限必须在应用清单中包含一个或多个 <uses-permission> 标记。比如,需要获取短信的权限:

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

package=”com.android.app.myapp” >

<uses-permission android:name=”android.permission.RECEIVE_SMS” />

</manifest>

八卦:如何适配Android显示屏?

zeARZrF.jpg!web

市场上的iPhone手机、iPad只有数十款,但Android手机确有成千上万种,随着支持Android系统的设备(手机、平板、电视、手表)的增多,设备碎片化、品牌碎片化、系统碎片化(基于Google原生系统,小米定制的MIUI、华为定制的EMUI等)、屏幕尺寸碎片化(5寸、5.5寸、6寸等)、屏幕分辨率碎片化(320×480、480×800、720×1280、1080×1920等)的程度也在不断地加深。

Google公司也意识到了这个问题,并在Android开发官方网站提供了常用的适配屏幕的解决方案,主要有下面几种解决方案。完整链接如下:https://developer.android.com/guide/practices/screens_support?hl=zh-CN。

1)灵活布局

默认情况下,Android 会调整页面布局的大小以适应当前屏幕。 为了确保布局调整能够很好地适应屏幕尺寸的变化,开发者需要灵活地实现布局。

必须遵循的核心原则是避免对界面组件的位置和大小进行硬编码,比如:使用相对布局就比绝对布局要好,应该允许拉伸视图尺寸并指定视图相对于父视图或其他同级视图的位置,这样即便布局扩大,期望的顺序和相对大小也会保持不变。

yquMR3F.jpg!web

2)替代布局

灵活布局非常重要,但还应该设计不同的布局,以便根据不同设备(比如:手机、平板电脑)上的可用空间优化用户体验。 因此,Android 提供 Alternative layouts 文件,而系统会在运行时根据当前设备的屏幕尺寸应用这些文件。

我们常见的APP也会同时提供智能手机版本和平板电脑版本,但这也意味着额外的开发成本。

RNFraqI.jpg!web

同一个应用针对不同的屏幕尺寸使用不同的布局

3)可拉伸图片

由于布局应该可拉伸以适应当前屏幕,因此附加到任何布局视图的图片也应该可拉伸。但是,朝任意方向拉伸普通位图可能会导致奇怪的缩放失真及图片倾斜。为解决此问题,Android 支持九宫位图(.9.png),任意拉伸的九宫位图,图像依然可以保持了“原状”,没有失真。

AVzEbiI.jpg!web

4)像素密度

像素密度是屏幕上单位面积内的像素数,称为 dpi(每英寸的点数)。 它与分辨率不同,后者是屏幕上像素的总数。

aEVFN3E.jpg!web

尺寸相同但像素密度不同的两个设备的夸大示例

如果应用在不同像素密度的屏幕上显示时,保留了界面设计的物理尺寸,说明它实现了“不受密度制约”。 保持不受密度制约很重要,因为如果不这样,界面元素(例如按钮)在低密度屏幕上显示时可能会变大,在高密度屏幕上显示时,则可能会变小。通过提供密度无关像素(dp 或 dip)而不是像素 (px) 作为测量单位,Android 系统可帮助实现不受密度制约的屏幕显示。

本文由@李艳宾 原创发布于人人都是产品经理,未经许可,禁止转载

题图来自Unsplash, 基于CC0协议


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK