PM技術(shù)課 | Android那些事兒
Android最初由安迪·魯賓(Andy Rubin)等人在2003年開發(fā),2005年被Google收購(gòu),現(xiàn)在Android 系統(tǒng)是由谷歌及其他公司帶領(lǐng)的開放手機(jī)聯(lián)盟開發(fā)的。那我們本文就一起來(lái)了解一下關(guān)于Android那些事兒~
Android簡(jiǎn)介
Android 是一個(gè)開源的,基于 Linux 的操作系統(tǒng),運(yùn)行在智能手機(jī)或者平板電腦。因?yàn)殚_源,所以每個(gè)廠商都可以免費(fèi)使用,我們常見的小米、華為、OPPO、VIVO、三星等廠商的智能手機(jī)都是基于Android的,這些手機(jī)廠商在Android系統(tǒng)的基礎(chǔ)上進(jìn)行了修改,形成了自己“定制版”的操作系統(tǒng),比如小米開發(fā)的MIUI。值得一提的是,不少智能電視也是基于Android 系統(tǒng)的,比如小米電視。
Android最初由安迪·魯賓(Andy Rubin)等人在2003年開發(fā),2005年被Google收購(gòu),現(xiàn)在Android 系統(tǒng)是由谷歌及其他公司帶領(lǐng)的開放手機(jī)聯(lián)盟開發(fā)的。
谷歌在2007年發(fā)布了第一個(gè)測(cè)試版本的 Android 軟件開發(fā)工具包,為了推廣Android系統(tǒng),Google公司為Android系統(tǒng)提供了統(tǒng)一的APP開發(fā)方法,這意味著開發(fā)者只需要開發(fā)一次,就可以運(yùn)行在數(shù)以億計(jì)的Android設(shè)備上。
數(shù)以億計(jì)的市場(chǎng)吸引著眾多的開發(fā)者加入Android開發(fā)的行列,這也促使了Android系統(tǒng)更加強(qiáng)大。
Android 應(yīng)用程序一般使用 Google提供的免費(fèi)開發(fā)工具Android Studio開發(fā),采用 Java或者Kotlin語(yǔ)言開發(fā)。一旦開發(fā)完成,Android 應(yīng)用程序很容易打包,并在應(yīng)用市場(chǎng)上發(fā)布。國(guó)內(nèi)有豌豆莢、應(yīng)用寶等獨(dú)立應(yīng)用商店,也有小米應(yīng)用商店、華為應(yīng)用商店等手機(jī)廠商自帶的應(yīng)用商店,國(guó)外主要是Google Play 和亞馬遜應(yīng)用商店。
Android APP最開始采用Java語(yǔ)言開發(fā)。
Java是由美國(guó)甲骨文公司開發(fā)維護(hù)的一門開源語(yǔ)言,但2010年8月,甲骨文公司就開始對(duì)Google無(wú)授權(quán)使用Java語(yǔ)言侵犯了公司的專利在美國(guó)加州北區(qū)地方法院提起控訴,要求高達(dá)90億美元的賠償。案件最終上訴到美國(guó)聯(lián)邦巡回上訴法院,直到2016年5月,舊金山聯(lián)邦法院認(rèn)定Android不構(gòu)成侵權(quán),最終判定Google勝訴。
雖然勝訴了,但Google仍然心有余悸,竭力避免對(duì)Java的過度依賴。
2019年,谷歌宣布,Kotlin 編程語(yǔ)言是 Android 應(yīng)用程序開發(fā)人員的首選語(yǔ)言。谷歌在聲明中寫道:“Android 的開發(fā)將越來(lái)越以 Kotlin 為先,許多新的API 和特性將首先在 Kotlin 中提供。如果你要開始一個(gè)新項(xiàng)目,你應(yīng)該用 Kotlin 來(lái)寫。用 Kotlin 編寫通常意味著更少的代碼——更少用于類型、測(cè)試和維護(hù)方面的代碼?!?/p>
Android UI
用戶界面(User Interface,UI)是系統(tǒng)和用戶進(jìn)行交互和信息交換的介質(zhì),我們看到了文字、圖片、視頻等東西都是UI。
產(chǎn)品UI是用戶對(duì)產(chǎn)品最直接的感受,UI設(shè)計(jì)也是軟件開發(fā)的重中之重。
Android 應(yīng)用中所有用戶界面元素都是使用 View 和 ViewGroup構(gòu)建而成,View在屏幕上繪制可供用戶交互的內(nèi)容,ViewGroup 對(duì)象用于儲(chǔ)存其他 View(和 ViewGroup)對(duì)象,以便定義界面的布局。
View可以簡(jiǎn)單理解為視圖,ViewGroup可以理解為視圖的組合。View包括控件和控件之間的布局(layout)。
控件
Android 提供了多種可在 UI 中使用的控件,如文本字段、復(fù)選框、按鈕、圖片等。
Android部分控件效果
常用控件列表如下:
每個(gè)控件都有id、width、height等常見屬性。
布局
布局確定控件之間的相對(duì)的位置,包括線性布局(LinearLayout)、相對(duì)布局(RelativeLayout)、表格布局(TableLayout)、網(wǎng)格布局 (GridLayout)
線性布局,使用單個(gè)水平行或垂直行來(lái)組織子項(xiàng)的布局,它會(huì)在窗口長(zhǎng)度超出屏幕長(zhǎng)度時(shí)創(chuàng)建一個(gè)滾動(dòng)條。
相對(duì)布局,指定子對(duì)象彼此之間的相對(duì)位置(比如,子對(duì)象 A 在子對(duì)象 B 左側(cè))或子對(duì)象與父對(duì)象的相對(duì)位置(比如:子對(duì)象與父對(duì)象頂部對(duì)齊)。
列表視圖,實(shí)現(xiàn)滾動(dòng)的單列列表。
網(wǎng)格視圖,實(shí)現(xiàn)滾動(dòng)的行列表格。
Android系統(tǒng)權(quán)限
在默認(rèn)情況下任何應(yīng)用都沒有權(quán)限執(zhí)行對(duì)其他應(yīng)用、操作系統(tǒng)或用戶有不利影響的任何操作,這包括讀取或?qū)懭胗脩舻乃接袛?shù)據(jù)(比如聯(lián)系人或電子郵件)、讀取或?qū)懭肫渌麘?yīng)用程序的文件、執(zhí)行網(wǎng)絡(luò)訪問、使設(shè)備保持喚醒狀態(tài)等。
Android 應(yīng)用默認(rèn)情況下未關(guān)聯(lián)權(quán)限,如果要使用這些權(quán)限,必須向系統(tǒng)申請(qǐng)權(quán)限。經(jīng)常使用的有兩種權(quán)限,分別是正常權(quán)限和危險(xiǎn)權(quán)限。
正常權(quán)限指應(yīng)用需要訪問外部數(shù)據(jù)或資源,但對(duì)用戶隱私或其他應(yīng)用操作風(fēng)險(xiǎn)很小的區(qū)域。比如:設(shè)置時(shí)區(qū)的權(quán)限就是正常權(quán)限,如果應(yīng)用聲明其需要正常權(quán)限,系統(tǒng)會(huì)自動(dòng)向應(yīng)用授予該權(quán)限。
危險(xiǎn)權(quán)限指應(yīng)用需要涉及用戶隱私信息的數(shù)據(jù)或資源,或者可能對(duì)用戶存儲(chǔ)的數(shù)據(jù)或其他應(yīng)用的操作產(chǎn)生影響的區(qū)域。比如,能夠讀取用戶的聯(lián)系人屬于危險(xiǎn)權(quán)限,如果應(yīng)用聲明其需要危險(xiǎn)權(quán)限,則用戶必須明確向應(yīng)用授予該權(quán)限。
從技術(shù)上看,申請(qǐng)權(quán)限必須在應(yīng)用清單中包含一個(gè)或多個(gè) <uses-permission> 標(biāo)記。比如,需要獲取短信的權(quán)限:
<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顯示屏?
市場(chǎng)上的iPhone手機(jī)、iPad只有數(shù)十款,但Android手機(jī)確有成千上萬(wàn)種,隨著支持Android系統(tǒng)的設(shè)備(手機(jī)、平板、電視、手表)的增多,設(shè)備碎片化、品牌碎片化、系統(tǒng)碎片化(基于Google原生系統(tǒng),小米定制的MIUI、華為定制的EMUI等)、屏幕尺寸碎片化(5寸、5.5寸、6寸等)、屏幕分辨率碎片化(320×480、480×800、720×1280、1080×1920等)的程度也在不斷地加深。
Google公司也意識(shí)到了這個(gè)問題,并在Android開發(fā)官方網(wǎng)站提供了常用的適配屏幕的解決方案,主要有下面幾種解決方案。完整鏈接如下:https://developer.android.com/guide/practices/screens_support?hl=zh-CN。
1)靈活布局
默認(rèn)情況下,Android 會(huì)調(diào)整頁(yè)面布局的大小以適應(yīng)當(dāng)前屏幕。 為了確保布局調(diào)整能夠很好地適應(yīng)屏幕尺寸的變化,開發(fā)者需要靈活地實(shí)現(xiàn)布局。
必須遵循的核心原則是避免對(duì)界面組件的位置和大小進(jìn)行硬編碼,比如:使用相對(duì)布局就比絕對(duì)布局要好,應(yīng)該允許拉伸視圖尺寸并指定視圖相對(duì)于父視圖或其他同級(jí)視圖的位置,這樣即便布局?jǐn)U大,期望的順序和相對(duì)大小也會(huì)保持不變。
2)替代布局
靈活布局非常重要,但還應(yīng)該設(shè)計(jì)不同的布局,以便根據(jù)不同設(shè)備(比如:手機(jī)、平板電腦)上的可用空間優(yōu)化用戶體驗(yàn)。 因此,Android 提供 Alternative layouts 文件,而系統(tǒng)會(huì)在運(yùn)行時(shí)根據(jù)當(dāng)前設(shè)備的屏幕尺寸應(yīng)用這些文件。
我們常見的APP也會(huì)同時(shí)提供智能手機(jī)版本和平板電腦版本,但這也意味著額外的開發(fā)成本。
同一個(gè)應(yīng)用針對(duì)不同的屏幕尺寸使用不同的布局
3)可拉伸圖片
由于布局應(yīng)該可拉伸以適應(yīng)當(dāng)前屏幕,因此附加到任何布局視圖的圖片也應(yīng)該可拉伸。但是,朝任意方向拉伸普通位圖可能會(huì)導(dǎo)致奇怪的縮放失真及圖片傾斜。為解決此問題,Android 支持九宮位圖(.9.png),任意拉伸的九宮位圖,圖像依然可以保持了“原狀”,沒有失真。
4)像素密度
像素密度是屏幕上單位面積內(nèi)的像素?cái)?shù),稱為 dpi(每英寸的點(diǎn)數(shù))。 它與分辨率不同,后者是屏幕上像素的總數(shù)。
尺寸相同但像素密度不同的兩個(gè)設(shè)備的夸大示例
如果應(yīng)用在不同像素密度的屏幕上顯示時(shí),保留了界面設(shè)計(jì)的物理尺寸,說(shuō)明它實(shí)現(xiàn)了“不受密度制約”。 保持不受密度制約很重要,因?yàn)槿绻贿@樣,界面元素(例如按鈕)在低密度屏幕上顯示時(shí)可能會(huì)變大,在高密度屏幕上顯示時(shí),則可能會(huì)變小。通過提供密度無(wú)關(guān)像素(dp 或 dip)而不是像素 (px) 作為測(cè)量單位,Android 系統(tǒng)可幫助實(shí)現(xiàn)不受密度制約的屏幕顯示。
本文由@李艷賓 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash, 基于CC0協(xié)議
已關(guān)注up哦