譯自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0-changes.html —— By NashLegend
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的晉源網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!原譯文在Github上:https://github.com/NashLegend/ProjectBabel/blob/master/Android%205.0%20Changes.md
前排渣翻譯預(yù)警,如果你能提供更好更專(zhuān)業(yè)的翻譯或者提出修改意見(jiàn)就好了……
另外本篇只對(duì)Android 5.0特性作了說(shuō)明,至于對(duì)應(yīng)的API方面的變化,參考下一篇:Android 5.0 API的變化
除了新增特性和功能之外,Android 5.0還包含了一系列的變化,包括API變化、行為變化,系統(tǒng)增強(qiáng)以及bug修復(fù)。這篇文檔將重點(diǎn)闡述一些你應(yīng)該知道并應(yīng)用到你的app里面的關(guān)鍵的變化。
如果你之前已經(jīng)發(fā)布過(guò)一個(gè)Android app,請(qǐng)注意您的app有可能會(huì)受到Android 5.0的這些新變化的影響。
如果想看一些新平臺(tái)的更高級(jí)的特性,請(qǐng)看這里
在Android 5.0中,ART運(yùn)行時(shí)取代Dalvik成為默認(rèn)運(yùn)行環(huán)境,ART于Android 4.4時(shí)代作為試驗(yàn)特性引入
如果想看ART的新特性概述,請(qǐng)看這里,幾個(gè)主要的特性如下:
提前編譯(AOT)
增強(qiáng)的垃圾回收
增強(qiáng)的debug支持
多數(shù)Android應(yīng)用地ART模式下運(yùn)行是沒(méi)有問(wèn)題的,但是有些情況下卻不能。要查看適配ART的注意事項(xiàng),請(qǐng)看這里,尤其要注意的是下面的情況:
你的app使用了JNI來(lái)運(yùn)行C/C++代碼
你使用了產(chǎn)生非標(biāo)準(zhǔn)代碼的(比如一些代碼混淆工具)
你使用了不兼容compacting garbage collection的技術(shù)
請(qǐng)確保你的通知將Android 5.0的最新變化考慮了進(jìn)來(lái),要獲知更多如何為Android 5.0以及更高版本系統(tǒng)設(shè)計(jì)你的通知的信息,請(qǐng)看這里
通知使用深色文字以及白色(或者很淺色)的背景以適配material design樣式的桌面插件。請(qǐng)確保你的所有通知樣式統(tǒng)一,如果你的通知看起來(lái)有問(wèn)題,請(qǐng)修正它們:
使用 setColor()設(shè)置通知圖標(biāo)的背景(基準(zhǔn))色。
修改或者移除包含顏色的資源。系統(tǒng)在action icons和通知欄圖標(biāo)中了忽略所有非透明通道。你應(yīng)該認(rèn)為這些圖標(biāo)只有alpha通道。系統(tǒng)會(huì)把通知圖標(biāo)繪制到白色背景,把a(bǔ)ction icons繪制到深灰色背景。
如果你現(xiàn)在在通知里通過(guò)Ringtone, MediaPlayer, or Vibrator 類(lèi)添加了聲音和震動(dòng),請(qǐng)移除這些代碼以便系統(tǒng)能夠在優(yōu)先模式
下正確的播放通知聲和震動(dòng)。你應(yīng)該使用Notification.Builder方法添加聲音和震動(dòng)才對(duì)。
將設(shè)備設(shè)置為靜音模式將使設(shè)備進(jìn)入優(yōu)先模式
。如果你將設(shè)備設(shè)置為普通模式或者震動(dòng)模式,設(shè)備將退出這種優(yōu)先模式
。
(注:優(yōu)先模式指僅對(duì)于高優(yōu)先級(jí)的通知播放通知聲和振動(dòng),靜音模式下自動(dòng)開(kāi)啟——靜音模式下仍然有聲音聽(tīng)起來(lái)很煩人的樣子——另外也可以手動(dòng)直接開(kāi)啟)
以前Android使用STREAM_MUSIC作為master stream以控制平板設(shè)備的音量。在Android 5.0上,平板和手機(jī)設(shè)備的master volume stream已經(jīng)統(tǒng)一了起來(lái),由STREAM_RING 或者 STREAM_NOTIFICATION控制。
現(xiàn)在,默認(rèn)情況下,通知將顯示在用戶(hù)的鎖屏界面上,用戶(hù)出于保護(hù)隱私可以選擇不展示這些信息,系統(tǒng)會(huì)使用其他提示來(lái)表示通知的文字內(nèi)容,如果想自定義這些隱私化的文字,請(qǐng)使用setPublicVersion()方法
如果通知不包含私人信息或者你想要允許在通知上控制媒體,請(qǐng)調(diào)用 setVisibility()方法并獎(jiǎng)通知的可見(jiàn)級(jí)別設(shè)置為VISIBILITY_PUBLIC
如果你使用展示和控制媒體播放的通知,請(qǐng)考慮使用最新的Notification.MediaStyle模版以取代自定義的RemoteViews.RemoteView對(duì)象,無(wú)論你使用哪種方法,確保通知的可見(jiàn)性為VISIBILITY_PUBLIC,這樣你可以在鎖屏界面進(jìn)行控制。請(qǐng)注意,自Android 5.0以后,系統(tǒng)不會(huì)將RemoteControlClient對(duì)象展示在鎖屏界面上,要獲知更多信息,請(qǐng)查看如果你的app使用了RemoteControlClient(其實(shí)就在下面)
現(xiàn)在通知可以以一個(gè)懸浮小窗口的形式出現(xiàn)了,當(dāng)然設(shè)備得是未鎖屏且點(diǎn)亮屏幕狀態(tài)。這些通知看起來(lái)像是你的通知的精簡(jiǎn)版一樣,除了這些通知也可以使用action buttons。用戶(hù)可以在當(dāng)前正在使用的app里面選擇執(zhí)行也可以忽略通知?jiǎng)幼鞫槐仉x開(kāi)當(dāng)前app。
下面是有可能觸發(fā)浮動(dòng)通知的情況。
用戶(hù)的activity處于全屏狀態(tài)。
通知具有高優(yōu)先級(jí)并且使用了鈴聲或者震動(dòng)。
這種情況下就要使用浮動(dòng)通知。
RemoteControlClient類(lèi)現(xiàn)在已經(jīng)廢棄,請(qǐng)盡快改用MediaSessionAPI.
Android 5.0的鎖屏界面并不會(huì)顯示你的MediaSession 或者 RemoteControlClient的控制界面。你的應(yīng)用應(yīng)該通過(guò)通知提供一個(gè)鎖屏界面的控制界面,這樣,在擁有鎖屏和未鎖屏狀態(tài)下的連貫的用戶(hù)體驗(yàn)的同時(shí)給予你的應(yīng)用更多對(duì)于媒體按鈕的控制權(quán)。
Android 5.0提供了一個(gè)新的Notification.MediaStyle模版以實(shí)現(xiàn)上述目的。你可以在Notification.Builder.addAction()為Notification.MediaStyle添加動(dòng)作。通過(guò)setSettion()方法告訴系統(tǒng)這個(gè)通知控制一個(gè)媒體播放會(huì)話(huà)。
請(qǐng)確保將通知的可見(jiàn)性設(shè)置為VISIBILITY_PUBLIC以確保能顯示在通知界面。要查看更多信息,請(qǐng)看鎖屏界面通知。
如果你的app運(yùn)行在Androdi TV或者可穿戴設(shè)備上,若要展示媒體控制,請(qǐng)使用MediaSession類(lèi),如果你的應(yīng)用要接收Android設(shè)備的媒體按鈕事件的話(huà),請(qǐng)使用MediaSession類(lèi)。
隨著Android 5.0 concurrent documents and activities tasks特性的引入,ActivityManager.getRecentTasks()方法被廢棄以保護(hù)用戶(hù)隱私。為了后向兼容性,這個(gè)方法仍然后返回一小部分結(jié)果,比如調(diào)用此方法的應(yīng)用的的task以及一些非敏感任務(wù)(比如桌面)。如果你的app使用這個(gè)方法獲得自身的task的話(huà),請(qǐng)使用getAppTasks()
Android 5.0引入了64位支持,增加了尋址空間和系統(tǒng)表現(xiàn)的同時(shí)完美兼容現(xiàn)在的32位系統(tǒng)。64位支持同樣增強(qiáng)了OpenSSL的加密性能。此外,這個(gè)版本還增加了新的多媒體NDK API以及OpenGL ES3.1支持。
要使用64位支持,到這里下載NDK Revision 10c,查看這里以獲取更多此版NDK的信息。
Context.bindService()方法現(xiàn)在需要指定explicit Intent。如果implicit intent的話(huà)將拋出一個(gè)錯(cuò)誤。為確保app安全性,請(qǐng)?jiān)趩?dòng)或者綁定service的時(shí)候使用explicit intent,不要為service定義intent filters。
Android 5.0 改變了app的默認(rèn)行為。
如果你的系統(tǒng)target api為21以上:
系統(tǒng)默認(rèn)禁止了mixed content和第三方cookie??梢允褂胹etMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。
The system now intelligently chooses portions of the HTML document to draw. This new default behavior helps to reduce memory footprint and increase performance. If you want to render the whole document at once, disable this optimization by calling enableSlowWholeDocumentDraw().
系統(tǒng)現(xiàn)在可以智能選擇HTML文檔的portion來(lái)繪制。這種新特性可以減少內(nèi)存footprint并改進(jìn)性能。若要一次性渲染整個(gè)HTML文檔,可以調(diào)用這個(gè)方法enableSlowWholeDocumentDraw()
**如果你的app的target api低于21: **系統(tǒng)允許mixed content和第三方cookie,并且總是一次性渲染整個(gè)HTML文檔。
如Permissions文檔所述,Android應(yīng)用可以自定義permissions以限定調(diào)用某個(gè)組件的方式。應(yīng)用在manifest文件中定義這此自定義permissions。
只有少數(shù)情況下我們才需要自定義permissions,很多情況下使用自定義permissions是沒(méi)有必要且容易引發(fā)潛在危險(xiǎn)的,這取決于這些permossioms的保護(hù)級(jí)別。
Android系統(tǒng)同時(shí)引入了一種新特性以確保一個(gè)特定的自定義permissions只能被一個(gè)app定義,除非其他app有相同的簽名。
任何app都可以自定義任何permissions,所以有可能不同的app正好使用了重名的自定義permissions。比如兩個(gè)有相似功能的app就有可能這么干,或者App們可能會(huì)引入擁有相同的自定義權(quán)限的公共庫(kù)或者代碼示例。
在Android 4.4之前這樣做是沒(méi)有問(wèn)題的。從Android 5.0開(kāi)始,系統(tǒng)加入了不同簽名的應(yīng)用的自定義權(quán)限必有具有唯一性的限制,如果用戶(hù)想要安裝一個(gè)擁有和某個(gè)已安裝app有相同自定義權(quán)限但是簽名不同的app,系統(tǒng)將禁止安裝。
Android 5.0以后,app仍然可以像以前一樣自定義permissions和通過(guò)請(qǐng)求其他app的權(quán)限。但是有了現(xiàn)在的限制之后,你應(yīng)該認(rèn)真考慮一下這些變化對(duì)你的app的影響。
下面幾點(diǎn)是你要考慮的:
你的應(yīng)用是否在manifest聲明了元素。如果是的話(huà),它們是否對(duì)于你的app或者service是必須的,或者,是否可以用系統(tǒng)默認(rèn)permissions代替。
如果你使用了元素,你知道它們是哪里來(lái)的嗎。
你是否真的希望別人通過(guò)請(qǐng)求你的自定義權(quán)限。
你是否只是復(fù)制粘貼了別人的包含元素的代碼,這些permissions是否必須。
你的app是否使用了別人有可能使用的permissions名字。
安裝和升級(jí)軟件
如上所述,Android 5.0以后的設(shè)備對(duì)于哪些有相同自定義permissions卻沒(méi)有相同簽名的app是禁止安裝的(文檔真啰嗦,這里直接省了,具體看上面)
一些建議
在運(yùn)行Android 5.0或者更高版本的設(shè)備上,我們建議您立即檢查、作出修改、發(fā)布新版……
如果你使用了你不必須的自定義permissions,刪除它們。
如果你的app必須使用自定義permissions的話(huà),請(qǐng)修改它們以確保權(quán)限名的唯一性,比如可以以包名開(kāi)頭。
如果你有一套的不同簽名的app使用一個(gè)自定義permissions以共用一個(gè)組件,請(qǐng)確保這個(gè)自定義permissions只被定義了一次。
如果你的一套app重命名相同,那么隨意,同名無(wú)所謂。
下面有一段TLS/SSL相關(guān)的,不懂就不翻譯了……
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。