鍖椾含鏃堕棿 8 鏈?7 鏃ヤ笂鍗堬紝Google 姝e紡鍙戝竷 Android 9.0 姝e紡鐗堢郴缁燂紝骞跺甯冪郴缁熺増鏈?Android P 琚寮忓懡鍚嶄负浠e彿銆孭ie銆嶃€?/p>

鐩墠锛孏oogle 宸插悜鍏ㄧ悆 Pixel 璁惧鎺ㄩ€佷簡 Android 9.0 姝e紡鐗堢殑鏇存柊銆?/p>

浣滀负蹇犲疄Android鐢ㄦ埛锛屼篃鍚屾牱浣滀负涓€鍚岮ndroid寮€鍙戜汉鍛橈紝姣忎竴涓増鏈殑鍙戝竷閮芥槸涓氬唴澶т簨锛屽綋澶╃殑鍏虫敞蹇呬笉鍙皯锛屼絾涔熷緢鎯劎鏃堕殧灏嗚繎涓€涓湀鎵嶆潵鎬荤粨锛屾帴涓嬫潵锛屾垜灏嗘妸鎴戠湅鍒扮殑涓滆タ鎱㈡參鍒嗕韩銆?/p>

杩欎釜鎵嬫崸鐫€绾㈣眴娲剧殑灏忓彲鐖憋紝涓绘墦鍏ㄦ柊鐨勪汉宸ユ櫤鑳界郴缁燂紝鍙风О璁╂墜鏈哄彉寰楁洿鏅鸿兘銆佹洿蹇紝鑰屼笖鈥滆秺鐢ㄨ秺鎳備綘鈥濓紝鍏舵牳蹇冮棯鍏夌偣涔熷氨鏄鏃朵笅鏈€娴佽鐨勭缁忕綉缁滄満鍣ㄥ涔犵畻娉曠殑铻嶅悎锛屽皢绯荤粺鎵撻€犳垚涓轰竴娆捐兘閫氳繃澶ч噺棰戠箒鐨勪娇鐢ㄦ潵棰勬祴鍜岃绠楃敤鎴疯涓轰範鎯紝骞朵负涔嬪仛鍑烘渶鑸掗€傝皟鏁存柟妗堢殑绯荤粺銆?/p>

閭d箞Android 9.0(API绾у埆28)鍒板簳閮芥彁渚涗簡鍝簺鍔熻兘鍛紵(鎺ヤ笅鏉ユ槸涓€娈靛畼鏂规憳褰?

鍒╃敤 Wi-Fi RTT 杩涜瀹ゅ唴瀹氫綅

Android 9 娣诲姞浜嗗 IEEE 802.11mc Wi-Fi 鍗忚锛堜篃绉颁负 Wi-Fi Round-Trip-Time (RTT)锛夌殑骞冲彴鏀寔锛屼粠鑰岃鎮ㄧ殑搴旂敤鍙互鍒╃敤瀹ゅ唴瀹氫綅鍔熻兘銆?/p>

鍦ㄨ繍琛?Android 9 涓斿叿鏈夌‖浠舵敮鎸佺殑璁惧涓婏紝搴旂敤鍙互浣跨敤 RTT API 鏉ユ祴閲忎笌闄勮繎鏀寔 RTT 鐨?Wi-Fi 鎺ュ叆鐐?/em> (AP) 鐨勮窛绂汇€?璁惧蹇呴』宸插惎鐢ㄤ綅缃湇鍔″苟寮€鍚?Wi-Fi 鎵弿锛堝湪 Settings > Location 涓嬶級锛屽悓鏃舵偍鐨勫簲鐢ㄥ繀椤诲叿鏈?ACCESS_FINE_LOCATION 鏉冮檺銆?/p>

璁惧鏃犻渶杩炴帴鍒版帴鍏ョ偣鍗冲彲浣跨敤 RTT銆?涓轰簡淇濇姢闅愮锛屽彧鏈夋墜鏈哄彲浠ョ‘瀹氫笌鎺ュ叆鐐圭殑璺濈锛涙帴鍏ョ偣鏃犳淇℃伅銆?/p>

濡傛灉鎮ㄧ殑璁惧娴嬮噺涓?3 涓垨鏇村鎺ュ叆鐐圭殑璺濈锛屾偍鍙互浣跨敤涓€涓鐐瑰畾浣嶇畻娉曟潵棰勪及涓庤繖浜涙祴閲忓€兼渶鐩哥鐨勮澶囦綅缃€?缁撴灉閫氬父绮惧噯鑷?1 鑷?2 绫炽€?/p>

閫氳繃杩欑绮剧‘鎬э紝鎮ㄥ彲浠ユ墦閫犳柊鐨勪綋楠岋紝渚嬪妤煎唴瀵艰埅銆佸熀浜庣簿缁嗕綅缃殑鏈嶅姟锛屽鏃犳涔夎闊虫帶鍒讹紙渚嬪锛?em>鈥滄墦寮€杩欑洀鐏€?/em>锛夛紝浠ュ強鍩轰簬浣嶇疆鐨勪俊鎭紙濡?鈥滄浜у搧鏄惁鏈夌壒鍒紭鎯狅紵鈥?/em>锛夈€?/p>

鏄剧ず灞忕己鍙f敮鎸?/h2>

閫氳繃浣跨敤妯℃嫙鍣ㄦ祴璇曞睆骞曠己鍙c€?/p>

Android 9 鏀寔鏈€鏂扮殑鍏ㄩ潰灞忥紝鍏朵腑鍖呭惈涓烘憚鍍忓ご鍜屾壃澹板櫒棰勭暀绌洪棿鐨勫睆骞曠己鍙c€?閫氳繃 DisplayCutout 绫诲彲纭畾闈炲姛鑳藉尯鍩熺殑浣嶇疆鍜屽舰鐘讹紝杩欎簺鍖哄煙涓嶅簲鏄剧ず鍐呭銆?瑕佺‘瀹氳繖浜涘睆骞曠己鍙e尯鍩熸槸鍚﹀瓨鍦ㄥ強鍏朵綅缃紝璇蜂娇鐢?getDisplayCutout() 鍑芥暟銆?/p>

鍏ㄦ柊鐨勭獥鍙e竷灞€灞炴€?layoutInDisplayCutoutMode 璁╂偍鐨勫簲鐢ㄥ彲浠ヤ负璁惧灞忓箷缂哄彛鍛ㄥ洿鐨勫唴瀹硅繘琛屽竷灞€銆?鎮ㄥ彲浠ュ皢姝ゅ睘鎬ц涓轰笅鍒楀€间箣涓€锛?/p>

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

鍙互鎸変互涓嬫柟娉曞湪浠讳綍杩愯 Android 9 鐨勮澶囨垨妯℃嫙鍣ㄤ笂妯℃嫙灞忓箷缂哄彛锛?/p>

  1. 鍚敤寮€鍙戣€呴€夐」銆?/li>
  2. 鍦?Developer options 灞忓箷涓紝鍚戜笅婊氬姩鑷?Drawing 閮ㄥ垎骞堕€夋嫨 Simulate a display with a cutout銆?/li>
  3. 閫夋嫨灞忓箷缂哄彛鐨勫ぇ灏忋€?/li>

娉細鎴戜滑寤鸿鎮ㄩ€氳繃浣跨敤杩愯 Android 9 鐨勮澶囨垨妯℃嫙鍣ㄦ祴璇曞睆骞曠己鍙e懆鍥寸殑鍐呭鏄剧ず銆?/p>

Android 9 寮曞叆浜嗗涓€氱煡澧炲己鍔熻兘锛屽彲渚涗互 API 绾у埆 28 鍙婁互涓婄増鏈綔涓虹洰鏍囧钩鍙扮殑寮€鍙戣€呬娇鐢ㄣ€?/p>

闄勫甫浜嗙収鐗囩殑 MessagingStyle銆?/p>

鍚洖澶嶅拰瀵硅瘽鐨?MessagingStyle銆?/p>

鎻愬崌鐭俊浣撻獙

浠?Android 7.0锛圓PI 绾у埆 24锛夊紑濮嬶紝鎮ㄥ彲浠ユ坊鍔犱竴涓搷浣滀互鍥炲鐭俊鎴栫洿鎺ヤ粠閫氱煡涓緭鍏ュ叾浠栨枃鏈€?Android 9 閫氳繃涓嬪垪澧炲己鎻愬崌浜嗚鍔熻兘锛?/p>

  • 绠€鍖栦簡閽堝瀵硅瘽鍙備笌鑰呯殑鏀寔锛?code>Person 绫诲彲鐢ㄤ簬璇嗗埆鍙備笌瀵硅瘽鐨勪汉鍛橈紝鍖呮嫭浠栦滑鐨勫ご鍍忓拰 URI銆?鐜板湪锛岃澶氬叾浠?API锛堝 addMessage()锛夊潎鍙埄鐢?[Person] 绫昏€屼笉鏄?CharSequence銆?Person 绫讳篃鏀寔鏋勫缓鍣ㄨ璁℃ā寮忋€?/p>

  • 鏀寔鍥惧儚锛氱幇鍦紝Android 9 鍙湪鎵嬫満鐨勨€滅煭淇¢€氱煡鈥濅腑鏄剧ず鍥惧儚銆?鎮ㄥ彲浠ヤ娇鐢ㄥ鐭俊浣跨敤 setData()鏉ユ樉绀哄浘鍍忋€?浠ヤ笅浠g爜娈垫紨绀轰簡濡備綍鍒涘缓 Person 鍜屽寘鍚浘鍍忕殑鐭俊銆?/p>

Kotlin

// Create new Person.
val sender = Person()
聽 聽 聽 聽 .setName(name)
聽 聽 聽 聽 .setUri(uri)
聽 聽 聽 聽 .setIcon(null)
聽 聽 聽 聽 .build()
// Create image message.
val message = Message("Picture", time, sender)
聽 聽 聽 聽 .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
聽 聽 聽 聽 .addMessage("Check this out!", 0, sender)
聽 聽 聽 聽 .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
聽 聽 聽 聽 .setName(name)
聽 聽 聽 聽 .setUri(uri)
聽 聽 聽 聽 .setIcon(null)
聽 聽 聽 聽 .build();
// Create image message.
Message message = new Message("Picture", time, sender)
聽 聽 聽 聽 .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
聽 聽 聽 聽 .addMessage("Check this out!", 0, sender)
聽 聽 聽 聽 .addMessage(message);

  • 灏嗗洖澶嶅彟瀛樹负鑽夌锛氬綋鐢ㄦ埛鏃犳剰涓叧闂竴涓煭淇¢€氱煡鏃讹紝鎮ㄧ殑搴旂敤鍙互妫€绱㈢郴缁熷彂閫佺殑 EXTRA_REMOTE_INPUT_DRAFT銆?鎮ㄥ彲浠ヤ娇鐢ㄦ extra 棰勫~鍏呭簲鐢ㄤ腑鐨勬枃鏈瓧娈碉紝浠ヤ究鐢ㄦ埛鍙互瀹屾垚浠栦滑鐨勫洖澶嶃€?/p>

  • 纭畾瀵硅瘽鏄惁涓虹兢缁勫璇濄€傛偍鍙互浣跨敤 setGroupConversation() 浠ユ槑纭‘瀹氬璇濇槸鍚︿负缇ょ粍瀵硅瘽銆?/p>

  • 涓?Intent 璁剧疆璇箟鎿嶄綔锛?code>setSemanticAction() 鍑芥暟鍏佽鎮ㄤ负鎿嶄綔鎻愪緵璇箟鍚箟锛屽鈥滄爣璁颁负宸茶鈥濄€佲€滃垹闄も€濆拰鈥滃洖澶嶁€濈瓑銆?/p>

  • SmartReply锛欰ndroid 9 鏀寔鍦ㄦ偍鐨勭煭淇″簲鐢ㄤ腑鎻愪緵鐩稿悓鐨勫缓璁洖澶嶃€?浣跨敤 RemoteInput.setChoices() 涓虹敤鎴锋彁渚涗竴缁勬爣鍑嗗洖澶嶃€?/p>

娓犻亾璁剧疆銆佸箍鎾拰璇峰嬁鎵撴壈

Android 8.0 寮曞叆浜嗛€氱煡娓犻亾锛屽厑璁告偍涓鸿鏄剧ず鐨勬瘡绉嶉€氱煡绫诲瀷鍒涘缓鍙敱鐢ㄦ埛鑷畾涔夌殑娓犻亾銆?Android 9 閫氳繃涓嬪垪鍙樻洿绠€鍖栭€氱煡娓犻亾璁剧疆锛?/p>

  • 灞忚斀娓犻亾缁勶細鐜板湪锛岀敤鎴峰彲浠ラ拡瀵规煇涓簲鐢ㄥ湪閫氱煡璁剧疆涓睆钄芥暣涓笭閬撶粍銆?鎮ㄥ彲浠ヤ娇鐢?isBlocked() 鍑芥暟纭畾浣曟椂灞忚斀涓€涓笭閬撶粍锛屼粠鑰屼笉浼氬悜璇ョ粍涓殑娓犻亾鍙戦€佷换浣曢€氱煡銆?/p>

    姝ゅ锛屾偍鐨勫簲鐢ㄥ彲浠ヤ娇鐢ㄥ叏鏂扮殑 getNotificationChannelGroup() 鍑芥暟鏌ヨ褰撳墠娓犻亾缁勮缃€?/p>

  • 鍏ㄦ柊鐨勫箍鎾?Intent 绫诲瀷锛氱幇鍦紝褰撻€氱煡娓犻亾鍜屾笭閬撶粍鐨勫睆钄界姸鎬佸彂鐢熷彉鏇存椂锛孉ndroid 绯荤粺灏嗗彂閫佸箍鎾?Intent銆?鎷ユ湁宸插睆钄界殑娓犻亾鎴栨笭閬撶粍鐨勫簲鐢ㄥ彲浠ヤ睛鍚繖浜?Intent 骞跺仛鍑虹浉搴旂殑鍥炲簲銆?鏈夊叧杩欎簺 Intent 鎿嶄綔鍜?extra 鐨勬洿澶氫俊鎭紝璇峰弬闃?NotificationManager 鍙傝€冧腑鏇存柊鐨勫父閲忓垪琛ㄣ€?鏈夊叧鍝嶅簲骞挎挱 Intent 鐨勪俊鎭紝璇峰弬闃呭箍鎾€?/p>

  • NotificationManager.Policy 鏈?3 绉嶆柊鐨勨€滆鍕挎墦鎵扳€濅紭鍏堢骇绫诲埆锛?/p>

    • PRIORITY_CATEGORY_ALARMS 浼樺厛澶勭悊璀︽姤銆?/li>
    • PRIORITY_CATEGORY_MEDIA 浼樺厛澶勭悊濯掍綋婧愮殑澹伴煶锛屽濯掍綋鍜岃闊冲鑸€?/li>
    • PRIORITY_CATEGORY_SYSTEM 浼樺厛澶勭悊绯荤粺澹伴煶銆?/li>
  • NotificationManager.Policy 杩樻湁 7 绉嶆柊鐨勨€滆鍕挎墦鎵扳€濆父閲忥紝鍙互鐢ㄦ潵鎶戝埗瑙嗚涓柇锛?/p>

    • SUPPRESSED_EFFECT_FULL_SCREEN_INTENT 闃叉閫氱煡鍚姩鍏ㄥ睆 Activity銆?/li>
    • SUPPRESSED_EFFECT_LIGHTS 灞忚斀閫氱煡鐏€?/li>
    • SUPPRESSED_EFFECT_PEEK 闃叉閫氱煡鐭殏杩涘叆瑙嗗浘锛堚€滄粦鍑衡€濓級銆?/li>
    • SUPPRESSED_EFFECT_STATUS_BAR 闃叉閫氱煡鏄剧ず鍦ㄦ敮鎸佺姸鎬佹爮鐨勮澶囩殑鐘舵€佹爮涓€?/li>
    • SUPPRESSED_EFFECT_BADGE 鍦ㄦ敮鎸佹爣蹇楃殑璁惧涓婂睆钄芥爣蹇椼€?濡傞渶浜嗚В璇︾粏淇℃伅锛岃鍙傞槄淇敼閫氱煡鏍囧織銆?/li>
    • SUPPRESSED_EFFECT_AMBIENT 鍦ㄦ敮鎸佸井鍏夋樉绀虹殑璁惧涓婂睆钄介€氱煡銆?/li>
    • SUPPRESSED_EFFECT_NOTIFICATION_LIST 闃叉閫氱煡鏄剧ず鍦ㄦ敮鎸佸垪琛ㄨ鍥撅紙濡傞€氱煡鏍忔垨閿佸睆锛夌殑璁惧鐨勫垪琛ㄨ鍥句腑銆?/li>

澶氭憚鍍忓ご鏀寔鍜屾憚鍍忓ご鏇存柊

鍦ㄨ繍琛?Android 9 鐨勮澶囦笂锛屾偍鍙互閫氳繃涓や釜鎴栨洿澶氱墿鐞嗘憚鍍忓ご鏉ュ悓鏃惰闂涓棰戞祦銆俔 鍦ㄩ厤澶囧弻鍓嶇疆鎽勫儚澶存垨鍙屽悗缃憚鍍忓ご鐨勮澶囦笂锛屾偍鍙互鍒涘缓鍙厤澶囧崟鎽勫儚澶寸殑璁惧鎵€涓嶅彲鑳藉疄鐜扮殑鍒涙柊鍔熻兘锛屼緥濡傛棤缂濈缉鏀俱€佽儗鏅櫄鍖栧拰绔嬩綋鎴愬儚銆?閫氳繃璇?API锛屾偍杩樺彲浠ヨ皟鐢ㄩ€昏緫鎴栬瀺鍚堢殑鎽勫儚澶磋棰戞祦锛岃瑙嗛娴佸彲鍦ㄤ袱涓垨鏇村鎽勫儚澶翠箣闂磋嚜鍔ㄥ垏鎹€?/p>

鎽勫儚澶存柟闈㈢殑鍏朵粬鏀硅繘杩樺寘鎷檮鍔犱細璇濆弬鏁板拰 Surface 鍏变韩锛屽墠鑰呮湁鍔╀簬闄嶄綆棣栨鎷嶇収鏈熼棿鐨勫欢杩燂紝鑰屽悗鑰呭垯璁╂憚鍍忓ご瀹㈡埛绔兘澶熷鐞嗗悇绉嶇敤渚嬶紝鑰屾棤闇€鍋滄骞跺惎鍔ㄦ憚鍍忓ご瑙嗛娴併€?鎴戜滑杩橀拡瀵瑰熀浜庢樉绀哄睆鐨?flash 鏀寔鍜?OIS 鏃堕棿鎴宠闂柊澧炰簡涓€浜?API锛岀敤浠ュ疄鐜板簲鐢ㄧ骇鐨勫浘鍍忕ǔ瀹氬寲鍜岀壒鏁堛€?/p>

鍦?Android 9 涓紝澶氭憚鍍忓ご API鏀寔鍗曡壊鎽勫儚澶达紝閫傜敤浜庡叿鏈?FULL 鎴?LIMITED 鍔熻兘鐨勮澶囥€?鍗曡壊杈撳嚭閫氳繃 YUV_420_888 鏍煎紡瀹炵幇锛孻 涓虹伆搴︼紝U (Cb) 涓?128锛孷 (Cr) 涓?128銆?/p>

鍦ㄥ彈鏀寔鐨勮澶囦笂锛孉ndroid 9 杩樻敮鎸佸缃?USB/UVC 鎽勫儚澶淬€?/p>

閫傜敤浜庡彲缁樺埗瀵硅薄鍜屼綅鍥剧殑 ImageDecoder

Android 9 寮曞叆浜?ImageDecoder 绫伙紝鍙彁渚涚幇浠e寲鐨勫浘鍍忚В鐮佹柟娉曘€?浣跨敤璇ョ被鍙栦唬 BitmapFactory 鍜?BitmapFactory.Options API銆?/p>

ImageDecoder 璁╂偍鍙€氳繃瀛楄妭缂撳啿鍖恒€佹枃浠舵垨 URI 鏉ュ垱寤?Drawable 鎴?Bitmap銆?瑕佽В鐮佸浘鍍忥紝璇烽鍏堜互缂栫爜鍥惧儚鐨勬潵婧愪负鍙傛暟锛岃皟鐢?createSource()銆?鐒跺悗锛岄€氳繃浼犻€?ImageDecoder.Source 瀵硅薄鏉ヨ皟鐢?decodeDrawable() 鎴?decodeBitmap()锛屼粠鑰屽垱寤?Drawable] 鎴?Bitmap銆?瑕佹洿鏀归粯璁よ缃紝璇峰皢 OnHeaderDecodedListener 浼犻€掔粰 decodeDrawable() 鎴?decodeBitmap()銆?ImageDecoder 璋冪敤 onHeaderDecoded()锛屼互鍥惧儚鐨勯粯璁ゅ搴﹀拰楂樺害锛堣嫢宸茬煡锛変负鍙傛暟銆?濡傛灉缂栫爜鍥惧儚鏄姩鐢?GIF 鎴?WebP锛?code>decodeDrawable() 灏嗚繑鍥?Drawable锛屽畠鏄?AnimatedImageDrawable 绫荤殑涓€涓疄渚嬨€?/p>

鎮ㄥ彲浠ヤ娇鐢ㄤ笉鍚岀殑鏂规硶鏉ヨ缃浘鍍忓睘鎬э細

  • 瑕佸皢瑙g爜鐨勫浘鍍忕缉鏀惧埌绮剧‘灏哄锛岃灏嗙洰鏍囧昂瀵镐紶閫掔粰 setTargetSize()銆?鎮ㄤ篃鍙互浣跨敤鏍峰浘灏哄鏉ョ缉鏀惧浘鍍忋€?灏嗘牱鍥惧昂瀵哥洿鎺ヤ紶閫掔粰 setTargetSampleSize()銆?/li>
  • 瑕佸湪缂╂斁鍥惧儚鐨勮寖鍥村唴瑁佸壀鍥惧儚锛岃璋冪敤 setCrop()銆?/li>
  • 瑕佸垱寤哄彲鍙樹綅鍥撅紝璇峰皢 true 浼犻€掔粰 setMutableRequired()銆?/li>

閫氳繃 ImageDecoder 杩樺彲浠ヤ负鍦嗚鎴栧渾褰㈤伄缃╀箣绫荤殑鍥惧儚娣诲姞澶嶆潅鐨勫畾鍒舵晥鏋溿€?浠?PostProcessor 绫荤殑涓€涓疄渚嬩綔涓哄弬鏁颁娇鐢?setPostProcessor()锛屾墽琛屾偍鎵€闇€鐨勪换浣曠粯鍥惧懡浠ゃ€?/p>

娉細瀵?AnimatedImageDrawable杩涜鍚庡鐞嗘椂锛屾晥鏋滀細鍑虹幇鍦ㄥ姩鐢荤殑鎵€鏈夊抚涓€?/p>

鍔ㄧ敾

Android 9 寮曞叆浜?AnimatedImageDrawable 绫伙紝鐢ㄤ簬缁樺埗鍜屾樉绀?GIF 鍜?WebP 鍔ㄧ敾鍥惧儚銆?AnimatedImageDrawable 鐨勫伐浣滄柟寮忎笌 AnimatedVectorDrawable 鐨勭浉浼间箣澶勫湪浜庯紝閮芥槸娓叉煋绾跨▼椹卞姩 AnimatedImageDrawable 鐨勫姩鐢汇€?娓叉煋绾跨▼杩樹娇鐢ㄥ伐浣滅嚎绋嬭繘琛岃В鐮侊紝鍥犳锛岃В鐮佷笉浼氬共鎵版覆鏌撶嚎绋嬬殑鍏朵粬鎿嶄綔銆?杩欑瀹炵幇鏈哄埗鍏佽鎮ㄧ殑搴旂敤鍦ㄦ樉绀哄姩鐢诲浘鍍忔椂锛屾棤闇€绠$悊鍏舵洿鏂帮紝涔熶笉浼氬共鎵板簲鐢ㄧ晫闈㈢嚎绋嬩笂鐨勫叾浠栦簨浠躲€?/p>

鍙娇鐢?ImageDecoder 鐨勫疄渚嬪 AnimatedImageDrawable 杩涜瑙g爜銆?浠ヤ笅浠g爜娈垫紨绀哄浣曚娇鐢?ImageDecoder 鏉ヨВ鐮?AnimatedImageDrawable锛?/p>

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
聽 聽 val decodedAnimation = ImageDecoder.decodeDrawable(
聽 聽 聽 聽 ImageDecoder.createSource(resources, R.drawable.my_drawable))

聽 聽 // Prior to start(), the first frame is displayed.
聽 聽 (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
聽 聽 Drawable decodedAnimation = ImageDecoder.decodeDrawable(
聽 聽 聽 聽 ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

聽 聽 if (decodedAnimation instanceof AnimatedImageDrawable) {
聽 聽 聽 聽 // Prior to start(), the first frame is displayed.
聽 聽 聽 聽 ((AnimatedImageDrawable) decodedAnimation).start();
聽 聽 }
}

ImageDecoder 鏈夊嚑涓厑璁告偍杩涗竴姝ヤ慨鏀瑰浘鍍忕殑鍑芥暟銆?渚嬪锛屽彲浣跨敤 setPostProcessor() 鍑芥暟鏉ヤ慨鏀瑰浘鍍忕殑澶栬锛屽搴旂敤鍦嗗舰閬僵鎴栧渾瑙掋€?/p>

HDR VP9 瑙嗛銆丠EIF 鍥惧儚鍘嬬缉鍜?Media API

Android 9 鏂板浜嗗 High Dynamic Range (HDR) VP9 Profile 2 鐨勫唴缃敮鎸侊紝鍥犳锛岀幇鍦ㄦ偍鍙互鍦ㄦ敮鎸?HDR 鐨勮澶囦笂涓虹敤鎴锋彁渚涙潵鑷?YouTube銆丳lay Movies 鍜屽叾浠栨潵婧愮殑閲囩敤 HDR 鐨勫奖鐗囥€?/p>

Android 9 涓哄钩鍙板鍔犱簡瀵?HEIF (heic) 鍥惧儚缂栫爜鐨勬敮鎸併€?MediaMuxer 鍜?MediaExtractor 绫讳腑鍙敮鎸?HEIF 闈欐€佸浘鍍忕ず渚?HEIF 鏀硅繘浜嗗帇缂╋紝鍙妭鐪佸瓨鍌ㄧ┖闂村拰缃戠粶鏁版嵁娴侀噺銆?鍊熷姪 Android 9 璁惧涓婄殑骞冲彴鏀寔锛屼粠鍚庣鏈嶅姟鍣ㄥ彂閫佸拰浣跨敤 HEIF 鍥惧儚杞昏€屾槗涓俱€?纭繚搴旂敤鍏煎杩欑渚夸簬鍏变韩鍜屾樉绀虹殑鏁版嵁鏍煎紡鍚庯紝灏濊瘯鍦ㄥ簲鐢ㄤ腑浣跨敤 HEIF 浣滀负鍥惧儚瀛樺偍鏍煎紡銆?鎮ㄥ彲浠ヤ娇鐢?ImageDecoder 鎴?BitmapFactory 杩涜 jpeg 鍒?heicto 鐨勮浆鎹紝浠ラ€氳繃 jpeg 鑾峰彇浣嶅浘锛屽苟涓斿彲浠ヤ娇鐢?HeifWriter 鍐欏叆鏉ヨ嚜 YUV 瀛楄妭缂撳啿鍖恒€丼urface 鎴?Bitmap 鐨?HEIF 闈欐€佸浘鍍忋€?/p>

杩樺彲閫氳繃 AudioTrack銆?code>AudioRecord 鍜?MediaDrm 绫昏幏鍙栧獟浣撴寚鏍囥€?/p>

Android 9 鍚?MediaDRM 绫绘坊鍔犱簡鍑芥暟浠ヨ幏鍙栨寚鏍囥€侀珮甯﹀鏁板瓧鍐呭淇濇姢 (HDCP) 绾у埆銆佸畨鍏ㄧ骇鍒拰浼氳瘽鏁帮紝骞跺瀹夊叏鎬х骇鍒拰瀹夊叏鍋滄杩涜鏇村鎺у埗銆?濡傞渶浜嗚В鏇村璇︽儏锛岃鍙傞槄 API 宸紓鎶ュ憡銆?/p>

鍦?Android 9 涓紝AAudio API 鍖呭惈 AAudioStream 灞炴€э紝鐢ㄤ簬 usage銆乧ontent type 鍜?input preset銆?浣跨敤杩欎簺灞炴€у彲浠ュ垱寤洪拡瀵?VoIP 鎴栨憚鍍忔満搴旂敤璋冩暣鐨勬祦銆?鎮ㄨ繕鍙互璁剧疆 SessionID灏?AAudio 娴佷笌鍙寘鍚煶鏁堢殑瀛愭贩闊崇浉鍏宠仈銆?浣跨敤 AudioEffect API 鏉ユ帶鍒堕煶鏁堛€?/p>

Android 9 鍖呭惈涓€涓敤浜?DynamicsProcessing 鐨?AudioEffect API銆?鍊熷姪璇ョ被锛屽彲浠ユ瀯寤哄熀浜庨€氶亾鐨勯煶鏁堬紝鐢卞悇绉嶇被鍨嬶紙鍖呮嫭鍧囪 銆佸棰戝甫鍘嬬缉鍜岄檺骞呭櫒锛夌殑澶氫釜闃舵缁勬垚銆?棰戝甫鍜屾椿鍔ㄩ樁娈电殑鏁伴噺鍙厤缃紝鑰屼笖澶у鏁板弬鏁板彲瀹炴椂鎺у埗銆?/p>

JobScheduler 涓殑娴侀噺璐圭敤鏁忔劅搴?/h2>

浠?Android 9 寮€濮嬶紝JobScheduler 鍙互浣跨敤杩愯惀鍟嗘彁渚涚殑缃戠粶鐘舵€佷俊鍙锋潵鏀瑰杽涓庣綉缁滄湁鍏崇殑浣滀笟澶勭悊銆?/p>

浣滀笟鍙互澹版槑鍏堕浼扮殑鏁版嵁澶у皬銆佷俊鍙烽鎻愬彇锛屽苟鎸囧畾鍏蜂綋鐨勭綉缁滆姹傘€?JobScheduler 鐒跺悗鏍规嵁缃戠粶鐘舵€佺鐞嗗伐浣溿€?渚嬪锛屽綋缃戠粶鏄剧ず鎷ュ鏃讹紝JobScheduler 鍙兘浼氬欢杩熻緝澶х殑缃戠粶璇锋眰銆?濡傛灉浣跨敤鐨勬槸涓嶆寜娴侀噺璁¤垂鐨勭綉缁滐紝鍒?JobScheduler 鍙繍琛岄鎻愬彇浣滀笟浠ユ彁鍗囩敤鎴蜂綋楠岋紙渚嬪棰勬彁鍙栨爣棰橈級銆?/p>

娣诲姞浣滀笟鏃讹紝纭繚浣跨敤 setEstimatedNetworkBytes()銆?code>setPrefetch() 鍜?setRequiredNetwork()锛堝鏋滈€傜敤锛夛紝浠ュ府鍔?JobScheduler 姝g‘澶勭悊宸ヤ綔銆?鍦ㄦ墽琛屼綔涓氭椂锛岃纭繚浣跨敤 JobParameters.getNetwork() 杩斿洖鐨?Network 瀵硅薄銆?鍚﹀垯锛屾偍灏嗛殣寮忎娇鐢ㄨ澶囩殑榛樿缃戠粶锛屽叾鍙兘涓嶇鍚堟偍鐨勮姹傦紝浠庤€屽鑷存剰澶栫殑娴侀噺娑堣€椼€?/p>

Neural Networks API 1.1

Android 8.1锛圓PI 绾у埆 27锛変腑寮曞叆浜?Neural Networks API 浠ュ姞蹇?Android 璁惧涓婃満鍣ㄥ涔犵殑閫熷害銆?Android 9 鎵╁睍鍜屾敼杩涗簡璇?API锛屽鍔犱簡瀵逛節绉嶆柊杩愮畻鐨勬敮鎸侊細

  • 鍏冪礌绾ф暟瀛﹁繍绠楋細
    • ANEURALNETWORKS_DIV
    • ANEURALNETWORKS_SUB
  • 鏁扮粍杩愮畻锛?
    • ANEURALNETWORKS_BATCH_TO_SPACE_ND
    • ANEURALNETWORKS_SPACE_TO_BATCH_ND
    • ANEURALNETWORKS_SQUEEZE
    • ANEURALNETWORKS_STRIDED_SLICE
    • ANEURALNETWORKS_TRANSPOSE
    • ANEURALNETWORKS_PAD
    • ANEURALNETWORKS_MEAN

宸茬煡闂锛?/strong> 灏?ANEURALNETWORKS_TENSOR_QUANT8_ASYMM 寮犻噺浼犻€掑埌 ANEURALNETWORKS_PAD 杩愮畻锛堝湪 Android 9 鍙婃洿楂樼増鏈腑鎻愪緵锛夋椂锛孨NAPI 鐨勮緭鍑哄彲鑳戒笌杈冮珮绾у埆鏈哄櫒瀛︿範妗嗘灦锛堝 TensorFlow Lite锛夌殑杈撳嚭涓嶅尮閰嶃€?搴斿彧浼犻€?ANEURALNETWORKS_TENSOR_FLOAT32 鐩村埌闂寰楀埌瑙e喅銆?/p>

姝ゅ锛孉PI 杩樺紩鍏ヤ簡涓€涓柊鍑芥暟锛屽嵆 ANeuralNetworksModel_relaxComputationFloat32toFloat16()锛屽厑璁告偍鎸囧畾鏄惁璁$畻鑼冨洿鍜岀簿搴︿綆鑷?IEEE 754 16 浣嶆诞鐐规牸寮忕殑 ANEURALNETWORKS_TENSOR_FLOAT32銆?/p>

鑷姩濉厖妗嗘灦

Android 9 寮曞叆浜嗗椤规敼杩涳紝鑷姩濉厖鏈嶅姟鍙互鍒╃敤杩欎簺鏀硅繘杩涗竴姝ュ寮虹敤鎴峰~鍐欒〃鍗曟椂鐨勪綋楠屻€?濡傞渶璇︾粏浜嗚В濡備綍鍦ㄦ偍鐨勫簲鐢ㄤ腑浣跨敤鑷姩濉厖鍔熻兘锛岃鍙傞槄鑷姩濉厖妗嗘灦鎸囧崡銆?/p>

瀹夊叏澧炲己鍔熻兘

Android 9 寮曞叆浜嗚嫢骞插畨鍏ㄥ姛鑳斤紝璇﹁浠ヤ笅鍚勮妭鎽樿璇存槑锛?/p>

Android Protected Confirmation

杩愯 Android 9 鎴栨洿楂樼増鏈殑鍙楁敮鎸佽澶囪祴浜堟偍浣跨敤 Android Protected Confirmation 鐨勮兘鍔涖€?浣跨敤璇ュ伐浣滄祦鏃讹紝鎮ㄧ殑搴旂敤浼氬悜鐢ㄦ埛鏄剧ず鎻愮ず锛岃浠栦滑鎵瑰噯涓€涓畝鐭殑澹版槑銆?搴旂敤鍙互閫氳繃杩欎釜澹版槑鍐嶆纭锛岀敤鎴风‘瀹炴兂瀹屾垚涓€椤规晱鎰熶簨鍔★紝渚嬪浠樻銆?/p>

濡傛灉鐢ㄦ埛鎺ュ彈璇ュ0鏄庯紝Android 瀵嗛挜搴撲細鏀跺埌骞跺瓨鍌ㄧ敱瀵嗛挜鍝堝笇娑堟伅韬唤楠岃瘉浠g爜 (HMAC) 淇濇姢鐨勫姞瀵嗙鍚嶃€?Android 瀵嗛挜搴撶‘璁ゆ秷鎭殑鏈夋晥鎬т箣鍚庯紝鎮ㄧ殑搴旂敤鍙互浣跨敤鍦ㄥ彲淇℃墽琛岀幆澧?(TEE) 涓嬮€氳繃 trustedConfirmationRequired 鐢熸垚鐨勫瘑閽ユ潵绛剧讲鐢ㄦ埛宸叉帴鍙楃殑娑堟伅銆?璇ョ鍚嶅叿鏈夊緢楂樼殑鍙俊搴︼紝瀹冭〃绀虹敤鎴峰凡鐪嬭繃澹版槑骞跺悓鎰忓叾鍐呭銆?/p>

娉ㄦ剰锛?/strong>Android Protected Confirmation 涓嶄細涓虹敤鎴锋彁渚涘畨鍏ㄤ俊鎭€氶亾銆?搴旂敤鏃犳硶鎵挎媴 Android 骞冲彴鎵€鎻愪緵鏈哄瘑鎬т繚璇佷箣澶栫殑浠讳綍鍏朵粬淇濊瘉銆?灏ゅ叾鏄紝璇峰嬁浣跨敤璇ュ伐浣滄祦鏄剧ず鎮ㄩ€氬父涓嶄細鏄剧ず鍦ㄧ敤鎴疯澶囦笂鐨勬晱鎰熶俊鎭€?/p>

濡傞渶鑾峰緱 Android Protected Confirmation 鏂板鏀寔鏂归潰鐨勬寚瀵硷紝璇峰弬闃?Android Protected Confirmation 鎸囧崡銆?/p>

缁熶竴鐢熺墿璇嗗埆韬唤楠岃瘉瀵硅瘽妗?/h3>

鍦?Android 9 涓紝绯荤粺浠h〃鎮ㄧ殑搴旂敤鎻愪緵鐢熺墿璇嗗埆韬唤楠岃瘉瀵硅瘽妗嗐€?璇ュ姛鑳藉彲鍒涘缓鏍囧噯鍖栫殑瀵硅瘽妗嗗瑙傘€侀鏍煎拰浣嶇疆锛岃鐢ㄦ埛鏇村姞纭俊锛屼粬浠湪浣跨敤鍙俊鐨勭敓鐗╄瘑鍒嚟鎹鏌ョ▼搴忚繘琛岃韩浠介獙璇併€?/p>

濡傛灉鎮ㄧ殑搴旂敤浣跨敤 FingerprintManager 鍚戠敤鎴锋樉绀烘寚绾硅韩浠介獙璇佸璇濇锛岃鍒囨崲鍒版敼鐢?BiometricPrompt銆?BiometricPrompt 渚濊禆绯荤粺鏉ユ樉绀鸿韩浠介獙璇佸璇濇銆?瀹冭繕浼氭敼鍙樺叾琛屼负锛屼互閫傚簲鐢ㄦ埛鎵€閫夋嫨鐨勭敓鐗╄瘑鍒韩浠介獙璇佺被鍨嬨€?/p>

娉細鍦ㄥ簲鐢ㄤ腑浣跨敤 BiometricPrompt 涔嬪墠锛屽簲璇ュ厛浣跨敤 hasSystemFeature()鍑芥暟浠ョ‘淇濊澶囨敮鎸?FEATURE_FINGERPRINT銆?code>FEATURE_IRIS 鎴?FEATURE_FACE銆?/p>

濡傛灉璁惧涓嶆敮鎸佺敓鐗╄瘑鍒韩浠介獙璇侊紝鍙互鍥為€€涓轰娇鐢?createConfirmDeviceCredentialIntent() 鍑芥暟楠岃瘉鐢ㄦ埛鐨?PIN 鐮併€佸浘妗堟垨瀵嗙爜銆?/p>

纭欢瀹夊叏鎬фā鍧?/h3>

杩愯 Android 9 鎴栨洿楂樼増鏈殑鍙楁敮鎸佽澶囧彲鎷ユ湁 StrongBox Keymaster锛屽畠鏄綅浜庣‖浠跺畨鍏ㄦ€фā鍧椾腑鐨?Keymaster HAL 鐨勪竴绉嶅疄鐜般€?璇ユā鍧楀寘鍚互涓嬬粍鎴愰儴鍒嗭細

  • 鑷繁鐨?CPU銆?/li>
  • 瀹夊叏瀛樺偍绌洪棿銆?/li>
  • 鐪熷疄闅忔満鏁扮敓鎴愬櫒銆?/li>
  • 鍙姷寰¤蒋浠跺寘绡℃敼鍜屾湭缁忔巿鏉冪嚎鍒峰簲鐢ㄧ殑闄勫姞鏈哄埗銆?/li>

妫€鏌ュ瓨鍌ㄥ湪 StrongBox Keymaster 涓殑瀵嗛挜鏃讹紝绯荤粺浼氶€氳繃鍙俊鎵ц鐜 (TEE) 璇佸疄瀵嗛挜鐨勫畬鏁存€с€?/p>

濡傞渶浜嗚В鏈夊叧浣跨敤 Strongbox Keymaster 鐨勬洿澶氫俊鎭紝璇峰弬闃呯‖浠跺畨鍏ㄦ€фā鍧椼€?/p>

淇濇姢瀵瑰瘑閽ュ簱杩涜鐨勫瘑閽ュ鍏?/h3>

Android 9 閫氳繃鍒╃敤 ASN.1鈥戠紪鐮佸瘑閽ユ牸寮忓皢宸插姞瀵嗗瘑閽ュ畨鍏ㄥ鍏ュ瘑閽ュ簱鐨勫姛鑳斤紝鎻愰珮浜嗗瘑閽ヨВ瀵嗙殑瀹夊叏鎬с€?Keymaster 闅忓悗浼氬湪瀵嗛挜搴撲腑灏嗗瘑閽ヨВ瀵嗭紝鍥犳瀵嗛挜鐨勫唴瀹规案杩滀笉浼氫互鏄庢枃褰㈠紡鍑虹幇鍦ㄨ澶囩殑涓绘満鍐呭瓨涓€?/p>

娉細鍙湁闄勫甫 Keymaster 4 鎴栨洿楂樼増鏈殑璁惧鎵嶆敮鎸佽鍔熻兘銆?/p>

璇︾粏浜嗚В濡備綍鏇村畨鍏ㄥ湴瀵煎叆宸插姞瀵嗗瘑閽ャ€?/p>

鍏锋湁瀵嗛挜杞浆鐨?APK 绛惧悕鏂规

Android 9 鏂板浜嗗 APK Signature Scheme v3 鐨勬敮鎸併€傝鏋舵瀯鎻愪緵鐨勯€夋嫨鍙互鍦ㄥ叾绛惧悕鍧椾腑涓烘瘡涓鍚嶈瘉涔﹀姞鍏ヤ竴鏉¤疆杞瘉鎹褰曘€?鍒╃敤姝ゅ姛鑳斤紝搴旂敤鍙互閫氳繃灏?APK 鏂囦欢杩囧幓鐨勭鍚嶈瘉涔﹂摼鎺ュ埌鐜板湪绛剧讲搴旂敤鏃朵娇鐢ㄧ殑璇佷功锛屼粠鑰屼娇鐢ㄦ柊绛惧悕璇佷功鏉ョ缃插簲鐢ㄣ€?/p>

娉細杩愯 Android 8.1锛圓PI 绾у埆 27锛夋垨鏇翠綆鐗堟湰鐨勮澶囦笉鏀寔鏇存敼绛惧悕璇佷功銆?濡傛灉搴旂敤鐨?minSdkVersion 涓?27 鎴栨洿浣庯紝闄や簡鏂扮鍚嶄箣澶栵紝鍙娇鐢ㄦ棫绛惧悕璇佷功鏉ョ缃插簲鐢ㄣ€?/p>

璇︾粏浜嗚В濡備綍浣跨敤 apksigner 杞浆瀵嗛挜銆?/p>

鍙厑璁稿湪鏈攣瀹氳澶囦笂杩涜瀵嗛挜瑙e瘑鐨勯€夐」

Android 9 寮曞叆浜?unlockedDeviceRequired 鏍囧織銆?姝ら€夐」纭畾鍦ㄥ厑璁镐娇鐢ㄦ寚瀹氬瘑閽ュ浠讳綍姝e湪浼犺緭鎴栧瓨鍌ㄧ殑鏁版嵁杩涜瑙e瘑涔嬪墠锛屽瘑閽ュ簱鏄惁瑕佹眰灞忓箷瑙i攣銆?杩欎簺绫诲瀷鐨勫瘑閽ラ潪甯搁€傚悎鐢ㄤ簬鍔犲瘑瑕佸瓨鍌ㄥ湪纾佺洏涓婄殑鏁忔劅鏁版嵁锛屼緥濡傚仴搴锋垨浼佷笟鏁版嵁銆?璇ユ爣蹇椾负鐢ㄦ埛鎻愪緵浜嗘洿楂樼殑淇濊瘉锛屽嵆浣挎墜鏈轰涪澶辨垨琚洍锛屽湪璁惧閿佸畾鐨勬儏鍐典笅锛屾棤娉曞鏁版嵁杩涜瑙e瘑銆?/p>

娉細unlockedDeviceRequired 鏍囧織鍚敤涔嬪悗锛屼粛鐒跺彲浠ラ殢鏃惰繘琛屽姞瀵嗗拰绛惧悕楠岃瘉銆?璇ユ爣蹇楀彲闃叉鍦ㄨ澶囪В閿佹椂鈥滀粎瑙e瘑鈥濇暟鎹€?/p>

鍦ㄨ澶囬攣瀹氭椂瑕佺‘淇濆瘑閽ュ畨鍏ㄤ笉琚В瀵嗭紝鍙€氳繃灏?true 浼犻€掔粰 setUnlockedDeviceRequired() 鍑芥暟鍚敤璇ユ爣蹇椼€?瀹屾垚璇ユ楠や箣鍚庯紝褰撶敤鎴风殑灞忓箷琚攣瀹氭椂锛屼娇鐢ㄨ瀵嗛挜杩涜瑙e瘑鎴栫缃叉暟鎹殑浠讳綍灏濊瘯閮戒細澶辫触銆?閿佸畾璁惧鍦ㄥ彲浠ヨ闂箣鍓嶏紝闇€瑕?PIN 鐮併€佸瘑鐮併€佹寚绾规垨鑰呬竴浜涘叾浠栧彲淇″洜绱犮€?/p>

鏃х増鍔犲瘑鏀寔

闄勫甫 Keymaster 4 鐨?Android 9 璁惧鏀寔涓夐噸鏁版嵁鍔犲瘑绠楁硶锛堢畝绉颁笁閲?DES锛夈€?濡傛灉鎮ㄧ殑搴旂敤涓庨渶瑕佷笁閲?DES 鐨勬棫鐗堢郴缁熻繘琛屼簰鎿嶄綔锛岃浣跨敤杩欑鍔犲瘑鏉ュ姞瀵嗘晱鎰熷嚟鎹€?/p>

濡傞渶璇︾粏浜嗚В濡備綍璁╂偍鐨勫簲鐢ㄦ洿鍔犲畨鍏紝璇峰弬闃?Android 寮€鍙戣€呯殑瀹夊叏鎬с€?/p>

Android 澶囦唤

Android 9 鏂板浜嗕笌澶囦唤鍜岃繕鍘熸湁鍏崇殑鍔熻兘鍜屽紑鍙戣€呴€夐」銆?杩欎簺鏇存敼鐨勮缁嗕俊鎭浠ラ儴鍒嗕笅鎵€绀恒€?/p>

瀹㈡埛绔姞瀵嗗浠?/h3>

Android 9 鏂板浜嗗浣跨敤瀹㈡埛绔瘑閽ュ姞瀵?Android 澶囦唤鐨勬敮鎸併€?婊¤冻涓嬪垪鏉′欢鏃朵細鑷姩鍚敤璇ユ敮鎸佸姛鑳斤細

  • 鐢ㄦ埛宸蹭娇鐢?Android 9 鎴栨洿楂樼増鏈惎鐢ㄥ浠姐€?/li>
  • 鐢ㄦ埛宸蹭负鍏惰澶囪缃睆骞曢攣瀹氾紝闇€瑕?PIN 鐮併€佸浘妗堟垨瀵嗙爜鎵嶈兘瑙i攣銆?/li>

璇ラ殣绉佹帾鏂藉惎鐢ㄤ箣鍚庯紝浠庣敤鎴疯澶囧埗浣滅殑澶囦唤杩樺師鏁版嵁鏃讹紝浼氳姹傛彁渚涜澶囩殑 PIN 鐮併€佸浘妗堟垨瀵嗙爜銆?濡傞渶璇︾粏浜嗚В璇ラ」鍔熻兘鑳屽悗鐨勬妧鏈紝璇峰弬闃?Google 浜戝瘑閽ヤ繚闄╂煖鏈嶅姟鐧界毊涔︺€?/p>

瀹氫箟澶囦唤鎵€闇€鐨勮澶囨潯浠?/h3>

濡傛灉鎮ㄧ殑搴旂敤鏁版嵁鍖呭惈鏁忔劅淇℃伅鎴栧亸濂斤紝Android 9 鍙鎮ㄥ畾涔夎澶囨潯浠讹紙渚嬪鍦ㄥ鎴风鍔犲瘑宸插惎鐢ㄦ垨鑰呮鍦ㄨ繘琛屾湰鍦拌澶囧埌璁惧浼犺緭鏃讹級锛屾暟鎹皢渚濇嵁璇ユ潯浠跺寘鎷湪鐢ㄦ埛鐨勫浠戒腑銆?/p>

濡傞渶浜嗚В鏈夊叧鍦?Android 璁惧涓婂浠芥暟鎹殑璇︾粏淇℃伅锛岃鍙傞槄鏁版嵁澶囦唤姒傝銆?/p>

鏃犻殰纰嶅姛鑳?/h2>

Android 9 寮曞叆浜嗛拡瀵规棤闅滅鍔熻兘妗嗘灦鐨勫寮哄姛鑳斤紝璁╂偍鑳藉鏇磋交鏉惧湴涓哄簲鐢ㄧ殑鐢ㄦ埛鎻愪緵鏇村ソ鐨勪綋楠屻€?/p>

瀵艰埅璇箟

Android 9 涓殑鏂板灞炴€ц鎮ㄥ彲浠ユ洿杞绘澗鍦板畾涔夋棤闅滅鏈嶅姟锛堝挨鍏舵槸灞忓箷闃呰鍣級濡備綍浠庡睆骞曠殑鏌愪釜閮ㄥ垎瀵艰埅鍒板彟涓€涓儴鍒嗐€?杩欎簺灞炴€у彲甯姪瑙嗗姏鍙楁崯鐢ㄦ埛鍦ㄥ簲鐢ㄧ晫闈㈢殑鏂囨湰涔嬮棿蹇€熺Щ鍔紝骞跺厑璁镐粬浠繘琛岄€夋嫨銆?/p>

渚嬪锛屽湪璐墿搴旂敤涓紝灞忓箷闃呰鍣ㄥ彲浠ュ府鍔╃敤鎴蜂粠鏌愪釜浜ゆ槗绫诲埆鐩存帴瀵艰埅鑷充笅涓€涓氦鏄撶被鍒紝鍦ㄨ浆鍒颁笅涓€涓被鍒箣鍓嶏紝灞忓箷闃呰鍣ㄦ棤闇€璇诲彇褰撳墠绫诲埆涓殑鎵€鏈変氦鏄撱€?/p>

鏃犻殰纰嶅姛鑳界獥鏍兼爣棰?/p>

鍦?Android 8.1锛圓PI 绾у埆 27锛夊拰鏇翠綆鐗堟湰涓紝鏃犻殰纰嶆湇鍔℃湁鏃舵棤娉曠‘瀹氬睆骞曠殑鏌愪釜绐楁牸鏄綍鏃舵洿鏂扮殑锛屼緥濡傛煇涓?Activity 灏嗕竴涓?Fragment 鏇挎崲涓哄彟涓€涓?Fragment 鐨勬椂鍊欍€?绐楁牸鐢辨寜鐓ч€昏緫鍏崇郴鍒嗙粍銆佽瑙変笂鐩稿叧鐨勭晫闈㈠厓绱犵粍鎴愶紝鍏朵腑閫氬父鍖呭惈涓€涓?Fragment銆?/p>

鍦?Android 9 涓紝鍙负杩欎簺绐楁牸鎻愪緵 鏃犻殰纰嶅姛鑳界獥鏍兼爣棰?/em>锛屽嵆鍙崟鐙瘑鍒殑鏍囬銆?濡傛灉鏌愪釜绐楁牸鍏锋湁鏃犻殰纰嶅姛鑳界獥鏍兼爣棰橈紝褰撶獥鏍兼敼鍙樻椂锛屾棤闅滅鏈嶅姟鍙帴鏀舵洿璇︾粏鐨勪俊鎭€?渚濋潬杩欑鍔熻兘锛屾湇鍔″彲浠ヤ负鐢ㄦ埛鎻愪緵鏈夊叧鐣岄潰鍙樺寲鐨勬洿绮剧粏淇℃伅銆?/p>

瑕佹寚瀹氭煇涓獥鏍肩殑鏍囬锛岃浣跨敤 android:accessibilityPaneTitle 灞炴€с€?鎮ㄤ篃鍙互鏇存柊鍦ㄨ繍琛屾椂浣跨敤 setAccessibilityPaneTitle() 鏇挎崲鐨勬煇涓晫闈㈢獥鏍肩殑鏍囬銆?渚嬪锛屾偍鍙互涓烘煇涓?Fragment 瀵硅薄鐨勫唴瀹瑰尯鍩熸彁渚涙爣棰樸€?/p>

鍩轰簬鏍囬鐨勫鑸?/p>

濡傛灉鎮ㄧ殑搴旂敤鏄剧ず鐨勬枃鏈唴瀹瑰寘鍚€昏緫鏍囬锛屽垯瀵逛簬琛ㄧず杩欎簺鏍囬鐨?View 瀹炰緥锛岃灏?android:accessibilityHeading 灞炴€ц缃负 true銆?閫氳繃娣诲姞杩欎簺鏍囬锛屾棤闅滅鏈嶅姟鍙府鍔╃敤鎴风洿鎺ヤ粠涓€涓爣棰樺鑸嚦涓嬩竴涓爣棰樸€?浠讳綍鏃犻殰纰嶆湇鍔¢兘鍙互浣跨敤杩欑鍔熻兘锛屼互鏀瑰杽鐢ㄦ埛鐣岄潰鐨勫鑸綋楠屻€?/p>

缇ょ粍瀵艰埅鍜岃緭鍑?/p>

浼犵粺涓婏紝灞忓箷闃呰鍣ㄤ竴鐩翠娇鐢?android:focusable 灞炴€ф潵纭畾浣曟椂搴旇灏?ViewGroup 鎴栦竴绯诲垪 View 瀵硅薄浣滀负涓€涓暣浣撹繘琛岃鍙栥€?杩欐牱锛岀敤鎴峰氨鍙互浜嗚В锛岃繖浜涜鍥惧湪閫昏緫涓婂郊姝ょ浉鍏炽€?/p>

鍦?Android 8.1 鍜屾洿浣庣増鏈腑锛屾偍闇€瑕佸皢 ViewGroup 涓殑姣忎釜 View 瀵硅薄鏍囪涓轰笉鍙仛鐒︼紝骞跺皢 ViewGroup 鏈韩鏍囪涓哄彲鑱氱劍銆?杩欑瀹夋帓瀵艰嚧 View 鐨勬煇浜涘疄渚嬭鏍囪涓哄彲鑱氱劍锛屼粠鑰屼娇寰楅敭鐩樺鑸彉寰楁洿涓虹箒鐞愩€?/p>

浠?Android 9 寮€濮嬶紝濡傛灉灏?View 瀵硅薄鏍囪涓哄彲鑱氱劍浼氫骇鐢熶笉鑹悗鏋滐紝鍒欏彲浠ヤ娇鐢?android:screenReaderFocusable 灞炴€т唬鏇?android:focusable 灞炴€с€?灞忓箷闃呰鍣ㄨ仛鐒﹀湪鎵€鏈夊皢 android:screenReaderFocusable 鎴?android:focusable 璁剧疆涓?true 鐨勫厓绱犱笂銆?/p>

渚挎嵎鎿嶄綔

Android 9 鏂板浜嗕竴浜涙柟渚跨敤鎴锋墽琛屾搷浣滅殑鏀寔鍔熻兘锛?/p>

璁块棶鎻愮ず锛?鏃犻殰纰嶅姛鑳芥鏋朵腑鐨勬柊澧炲姛鑳藉彲璁╂偍鍦ㄥ簲鐢ㄧ晫闈腑璁块棶鎻愮ず銆?浣跨敤 getTooltipText() 璇诲彇鎻愮ず鏂囨湰锛屼娇鐢?ACTION_SHOW_TOOLTIP 鍜?ACTION_HIDE_TOOLTIP 鏉ユ寚绀?View 鐨勫疄渚嬫樉绀烘垨闅愯棌鎻愮ず銆?/p>

鏂板鍏ㄥ眬鎿嶄綔锛?Android 9 鍦?AccessibilityService 绫讳腑寮曞叆浜嗗涓や釜棰濆璁惧鎿嶄綔鐨勬敮鎸併€?鎮ㄧ殑 Service 鍙互甯姪鐢ㄦ埛鍒嗗埆浣跨敤 GLOBAL_ACTION_LOCK_SCREEN 鍜?GLOBAL_ACTION_TAKE_SCREENSHOT 鎿嶄綔閿佸畾鍏惰澶囧苟杩涜灞忓箷鎴浘銆?/p>

绐楀彛鍙樻洿璇︽儏

Android 9 璁╂偍鍙互鍦ㄥ簲鐢ㄥ悓鏃堕噸缁樺涓獥鍙f椂锛屾洿杞绘澗鍦拌窡韪簲鐢ㄧ獥鍙g殑鏇存柊銆?褰撳彂鐢?TYPE_WINDOWS_CHANGED 浜嬩欢鏃讹紝鍙娇鐢?getWindowChanges() API 鏉ョ‘瀹氱獥鍙e彂鐢熺殑鍙樻洿銆?鍦ㄥ绐楀彛鏇存柊鏈熼棿锛屾瘡涓獥鍙i兘浼氱敓鎴愯嚜宸辩殑涓€缁勪簨浠躲€?getSource() 鍑芥暟杩斿洖涓庢瘡涓簨浠剁浉鍏宠仈鐨勭獥鍙g殑鏍硅鍥俱€?/p>

濡傛灉搴旂敤宸蹭负鍏?View 瀵硅薄瀹氫箟鏃犻殰纰嶅姛鑳界獥鏍兼爣棰橈紝鎮ㄧ殑 Service 灏嗗彲浠ヨ瘑鍒簲鐢ㄧ晫闈綍鏃惰繘琛屾洿鏂般€?TYPE_WINDOW_STATE_CHANGED 浜嬩欢鍙戠敓鏃讹紝鍙娇鐢?getContentChangeTypes() 鎵€杩斿洖鐨勭被鍨嬫潵纭畾绐楀彛鍙戠敓鐨勫彉鏇淬€?渚嬪锛屾鏋跺彲浠ユ娴嬬獥鏍间綍鏃舵湁鏂版爣棰樻垨鑰呯獥鏍间綍鏃舵秷澶便€?/p>

Google 鑷村姏浜庝负鎵€鏈?Android 鐢ㄦ埛鏀瑰杽鏃犻殰纰嶅姛鑳斤紝鎻愪緵澧炲己鍔熻兘浠ヤ究璁╂偍鏋勫缓 Service锛屽璇濊鎻愮ず 灞忓箷闃呰鍣紝渚涢渶瑕佹棤闅滅鍔熻兘鐨勭敤鎴蜂娇鐢ㄣ€?濡傞渶浜嗚В鏈夊叧濡備綍璁╂偍鐨勫簲鐢ㄦ洿渚夸簬璁块棶浠ュ強濡備綍鏋勫缓鏃犻殰纰?Service 鐨勬洿澶氫俊鎭紝璇峰弬闃呮棤闅滅鍔熻兘銆?/p>

鏃嬭浆

涓洪伩鍏嶆棤鎰忕殑鏃嬭浆锛屾垜浠柊澧炰簡涓€绉嶆ā寮忥紝鍝€曡澶囦綅缃彂鐢熷彉鍖栵紝涔熶細鍥哄畾鍦ㄥ綋鍓嶅睆骞曟柟鍚戜笂銆?蹇呰鏃剁敤鎴峰彲浠ラ€氳繃鎸夌郴缁熸爮涓婄殑涓€涓寜閽墜鍔ㄨЕ鍙戞棆杞€?/p>

澶у鏁版儏鍐典笅锛屽搴旂敤鐨勫吋瀹规€у奖鍝嶅井涓嶈冻閬撱€?涓嶈繃锛屽鏋滄偍鐨勫簲鐢ㄦ湁浠讳綍鑷畾涔夋棆杞涓猴紝鎴栦娇鐢ㄤ簡浠讳綍闈炲父瑙勭殑灞忓箷鏂瑰悜璁剧疆锛屽垯鍙兘浼氶亣鍒颁互鍓嶇敤鎴锋棆杞閫夐」濮嬬粓璁剧疆涓虹旱鍚戞椂琚拷瑙嗙殑闂銆?鎴戜滑榧撳姳鎮ㄥ瑙嗕竴涓嬫偍鐨勫簲鐢ㄦ墍鏈夊叧閿?Activity 涓殑鏃嬭浆琛屼负锛屽苟纭繚鎮ㄧ殑鎵€鏈夊睆骞曟柟鍚戣缃粛鍙彁渚涙渶浣充綋楠屻€?/p>

濡傞渶浜嗚В鏇村璇︽儏锛岃鍙傞槄鐩稿叧鐨勮涓哄彉鏇淬€?/p>

涓€涓柊鐨勬棆杞ā寮忓厑璁哥敤鎴峰湪蹇呰鏃跺埄鐢ㄧ郴缁熸爮涓婄殑涓€涓寜閽墜鍔ㄨЕ鍙戞棆杞€?/p>

鏂囨湰

Android 9 涓哄钩鍙版彁渚涗簡浠ヤ笅涓庢枃鏈浉鍏崇殑鍔熻兘锛?/p>

  • 鏂囨湰棰勫厛璁$畻锛?code>PrecomputedText 绫讳娇鎮ㄨ兘鎻愬墠璁$畻鍜岀紦瀛樻墍闇€淇℃伅锛屾敼鍠勪簡鏂囨湰娓叉煋鎬ц兘銆?瀹冭繕浣挎偍鐨勫簲鐢ㄥ彲浠ュ湪涓荤嚎绋嬩箣澶栨墽琛屾枃鏈竷灞€銆?/p>

  • 鏀惧ぇ鍣細Magnifier 绫绘槸涓€绉嶅彲鎻愪緵鏀惧ぇ鍣?API 鐨勫井浠讹紝鍙湪鎵€鏈夊簲鐢ㄤ腑瀹炵幇涓€鑷寸殑鏀惧ぇ鍣ㄥ姛鑳戒綋楠屻€?/p>

  • Smart Linkify锛欰ndroid 9 澧炲己浜?TextClassifier 绫伙紝璇ョ被鍙埄鐢ㄦ満鍣ㄥ涔犲湪閫夊畾鏂囨湰涓瘑鍒竴浜涘疄浣撳苟寤鸿閲囧彇鐩稿簲鐨勬搷浣溿€?渚嬪锛?code>TextClassifier 鍙互璁╂偍鐨勫簲鐢ㄦ娴嬪埌鐢ㄦ埛閫夋嫨浜嗙數璇濆彿鐮併€?鐒跺悗锛屾偍鐨勫簲鐢ㄥ彲浠ュ缓璁敤鎴蜂娇鐢ㄨ鍙风爜鎷ㄦ墦鐢佃瘽銆?TextClassifier 涓殑鍔熻兘鍙栦唬浜?Linkify 绫荤殑鍔熻兘銆?/p>

  • 鏂囨湰甯冨眬锛氬€熷姪鍑犵渚挎嵎鍑芥暟鍜屽睘鎬э紝鍙互鏇磋交鏉惧湴瀹炵幇鐣岄潰璁捐銆?濡傞渶浜嗚В璇︾粏淇℃伅锛岃鍙傞槄 TextView 鍙傝€冩枃妗c€?/p>

DEX 鏂囦欢鐨?ART 鎻愬墠杞崲

鍦ㄨ繍琛?Android 9 鎴栨洿楂樼増鏈殑璁惧涓婏紝Android 杩愯鏃?(ART) 鎻愬墠缂栬瘧鍣ㄩ€氳繃灏嗗簲鐢ㄨ蒋浠跺寘涓殑 DEX 鏂囦欢杞崲涓烘洿绱у噾鐨勮〃绀哄舰寮忥紝杩涗竴姝ヤ紭鍖栦簡鍘嬬缉鐨?Dalvik Executable 鏍煎紡 (DEX) 鏂囦欢銆?姝ら」鍙樻洿鍙鎮ㄧ殑搴旂敤鍚姩鏇村揩骞舵秷鑰楁洿灏戠殑纾佺洏绌洪棿鍜屽唴瀛樸€?/p>

杩欑鏀硅繘鐗瑰埆鏈夊埄浜庣鐩?I/O 閫熷害杈冩參鐨勪綆绔澶囥€?/p>

璁惧绔郴缁熻窡韪?/h2>

Android 9 鍏佽鎮ㄩ€氳繃璁惧璁板綍绯荤粺璺熻釜璁板綍锛岀劧鍚庝笌鎮ㄧ殑寮€鍙戝洟闃熷垎浜繖浜涜褰曠殑鎶ュ憡銆?璇ユ姤鍛婃敮鎸佸绉嶆牸寮忥紝鍖呮嫭 HTML銆?/p>

閫氳繃鏀堕泦杩欎簺璺熻釜璁板綍锛屾偍鍙互鑾峰彇涓庡簲鐢ㄨ繘绋嬪拰绾跨▼鐩稿叧鐨勮鏃舵暟鎹紝骞舵煡鐪嬪叾浠栫被鍨嬬殑鍏锋湁鍏ㄥ眬鎰忎箟鐨勮澶囩姸鎬併€?/p>

娉細鎮ㄦ棤闇€璁剧疆鎮ㄧ殑浠g爜鏉ヨ褰曡窡韪褰曪紝浣嗚繖鏍峰仛鍙互甯姪鎮ㄦ煡鐪嬪簲鐢ㄤ唬鐮佺殑鍝簺閮ㄥ垎鍙兘浼氬鑷寸嚎绋嬫寕璧锋垨鐣岄潰鍗¢】銆?/p>

濡傞渶璇︾粏浜嗚В璇ュ伐鍏凤紝璇峰弬闃呮墽琛岃澶囧唴缃郴缁熻窡韪€?/p>

琛屼负鍙樻洿锛氭墍鏈夊簲鐢?/h1>

Android 9锛圓PI 绾у埆 28锛夊悜 Android 绯荤粺寮曞叆浜嗗椤瑰彉鏇淬€?褰撳簲鐢ㄥ湪 Android 9 骞冲彴涓婅繍琛屾椂锛屼互涓嬭涓哄彉鏇村皢褰卞搷鎵€鏈夊簲鐢?/em>锛屾棤璁鸿繖浜涘簲鐢ㄤ互鍝釜 API 绾у埆涓虹洰鏍囥€?鎵€鏈夊紑鍙戣€呴兘搴旀煡鐪嬭繖浜涘彉鏇达紝骞朵慨鏀瑰叾搴旂敤浠ユ纭敮鎸佽繖浜涘彉鏇达紙濡傛灉閫傜敤锛夈€?/p>

濡傞渶浜嗚В浠呭奖鍝嶄互 API 28 鎴栨洿楂樼骇鍒负鐩爣鐨勫簲鐢ㄧ殑鍙樻洿锛岃鍙傞槄琛屼负鍙樻洿锛氫互 API 绾у埆 28+ 涓虹洰鏍囩殑搴旂敤銆?/p>

鐢垫簮绠$悊

Android 9 寮曞叆浜嗘柊鍔熻兘浠ユ敼鍠勮澶囩數婧愮鐞嗐€?杩欎簺鍙樻洿杩炲悓 Android 9 涔嬪墠宸插瓨鍦ㄧ殑鍔熻兘鍙府鍔╃‘淇濈郴缁熻祫婧愯鎻愪緵缁欐渶闇€瑕佸畠浠殑搴旂敤銆?/p>

璇︽儏璇峰弬闃呯數婧愮鐞嗐€?/p>

闅愮鏉冨彉鏇?/h2>

涓轰簡澧炲己鐢ㄦ埛闅愮锛孉ndroid 9 寮曞叆浜嗚嫢骞茶涓哄彉鏇达紝濡傞檺鍒跺悗鍙板簲鐢ㄨ闂澶囦紶鎰熷櫒銆侀檺鍒堕€氳繃 Wi-Fi 鎵弿妫€绱㈠埌鐨勪俊鎭紝浠ュ強涓庨€氳瘽銆佹墜鏈虹姸鎬佸拰 Wi-Fi 鎵弿鐩稿叧鐨勬柊鏉冮檺瑙勫垯鍜屾潈闄愮粍銆?/p>

鏃犺閲囩敤鍝竴绉嶇洰鏍?SDK 鐗堟湰锛岃繖浜涘彉鏇撮兘浼氬奖鍝嶈繍琛屼簬 Android 9 涓婄殑鎵€鏈夊簲鐢ㄣ€?/p>

鍚庡彴瀵逛紶鎰熷櫒鐨勮闂彈闄?/p>

Android 9 闄愬埗鍚庡彴搴旂敤璁块棶鐢ㄦ埛杈撳叆鍜屼紶鎰熷櫒鏁版嵁鐨勮兘鍔涖€?濡傛灉鎮ㄧ殑搴旂敤鍦ㄨ繍琛?Android 9 璁惧鐨勫悗鍙拌繍琛岋紝绯荤粺灏嗗鎮ㄧ殑搴旂敤閲囧彇浠ヤ笅闄愬埗锛?/p>

  • 鎮ㄧ殑搴旂敤涓嶈兘璁块棶楹﹀厠椋庢垨鎽勫儚澶淬€?/li>
  • 浣跨敤杩炵画鎶ュ憡妯″紡鐨勪紶鎰熷櫒锛堜緥濡傚姞閫熷害璁″拰闄€铻轰华锛変笉浼氭帴鏀朵簨浠躲€?/li>
  • 浣跨敤鍙樺寲鎴栦竴娆℃€ф姤鍛婃ā寮忕殑浼犳劅鍣ㄤ笉浼氭帴鏀朵簨浠躲€?/li>

濡傛灉鎮ㄧ殑搴旂敤闇€瑕佸湪杩愯 Android 9 鐨勮澶囦笂妫€娴嬩紶鎰熷櫒浜嬩欢锛岃浣跨敤鍓嶅彴鏈嶅姟銆?/p>

闄愬埗璁块棶閫氳瘽璁板綍

Android 9 寮曞叆 CALL_LOG 鏉冮檺缁勫苟灏?READ_CALL_LOG銆?code>WRITE_CALL_LOG 鍜?PROCESS_OUTGOING_CALLS 鏉冮檺绉诲叆璇ョ粍銆?鍦ㄤ箣鍓嶇殑 Android 鐗堟湰涓紝杩欎簺鏉冮檺浣嶄簬 PHONE 鏉冮檺缁勩€?/p>

瀵逛簬闇€瑕佽闂€氳瘽鏁忔劅淇℃伅锛堝璇诲彇閫氳瘽璁板綍鍜岃瘑鍒數璇濆彿鐮侊級鐨勫簲鐢紝璇?CALL_LOG 鏉冮檺缁勪负鐢ㄦ埛鎻愪緵浜嗘洿濂界殑鎺у埗鍜屽彲瑙佹€с€?/p>

濡傛灉鎮ㄧ殑搴旂敤闇€瑕佽闂€氳瘽璁板綍鎴栬€呴渶瑕佸鐞嗗幓鐢碉紝鍒欐偍蹇呴』鍚?CALL_LOG 鏉冮檺缁勬槑纭姹傝繖浜涙潈闄愩€?鍚﹀垯浼氬彂鐢?SecurityException銆?/p>

娉細鍥犱负杩欎簺鏉冮檺宸插彉鏇寸粍骞跺湪杩愯鏃舵巿浜堬紝鐢ㄦ埛鍙互鎷掔粷鎮ㄧ殑搴旂敤璁块棶閫氳瘽璁板綍淇℃伅銆?鍦ㄨ繖绉嶆儏鍐典笅锛屾偍鐨勫簲鐢ㄥ簲璇ヨ兘澶熷Ε鍠勫鐞嗘棤娉曡闂俊鎭殑鐘跺喌銆?/p>

濡傛灉鎮ㄧ殑搴旂敤宸茬粡閬靛惊杩愯鏃舵潈闄愭渶浣冲仛娉曪紝鍒欏彲浠ュ鐞嗘潈闄愮粍鐨勫彉鏇淬€?/p>

闄愬埗璁块棶鐢佃瘽鍙风爜

鍦ㄦ湭棣栧厛鑾峰緱 READ_CALL_LOG 鏉冮檺鐨勬儏鍐典笅锛岄櫎浜嗗簲鐢ㄧ殑鐢ㄤ緥闇€瑕佺殑鍏朵粬鏉冮檺涔嬪锛岃繍琛屼簬 Android 9 涓婄殑搴旂敤鏃犳硶璇诲彇鐢佃瘽鍙风爜鎴栨墜鏈虹姸鎬併€?/p>

涓庢潵鐢靛拰鍘荤數鍏宠仈鐨勭數璇濆彿鐮佸彲鍦ㄦ墜鏈虹姸鎬佸箍鎾紙姣斿鏉ョ數鍜屽幓鐢电殑鎵嬫満鐘舵€佸箍鎾級涓湅鍒帮紝骞跺彲閫氳繃 PhoneStateListener 绫昏闂€?浣嗘槸锛屽鏋滄病鏈?READ_CALL_LOG 鏉冮檺锛屽垯 PHONE_STATE_CHANGED 骞挎挱鍜?PhoneStateListener 鎻愪緵鐨勭數璇濆彿鐮佸瓧娈典负绌恒€?/p>

瑕佷粠鎵嬫満鐘舵€佷腑璇诲彇鐢佃瘽鍙风爜锛岃鏍规嵁鎮ㄧ殑鐢ㄤ緥鏇存柊搴旂敤浠ヨ姹傚繀瑕佺殑鏉冮檺锛?/p>

  • 瑕侀€氳繃 PHONE_STATE Intent 鎿嶄綔璇诲彇鐢佃瘽鍙风爜锛屽悓鏃堕渶瑕?READ_CALL_LOG 鏉冮檺鍜?READ_PHONE_STATE 鏉冮檺銆?/li>
  • 瑕佷粠 onCallStateChanged() 涓鍙栫數璇濆彿鐮侊紝鍙渶瑕?READ_CALL_LOG 鏉冮檺銆?涓嶉渶瑕?READ_PHONE_STATE 鏉冮檺銆?/li>

闄愬埗璁块棶 Wi-Fi 浣嶇疆鍜岃繛鎺ヤ俊鎭?/p>

鍦?Android 9 涓紝搴旂敤杩涜 Wi-Fi 鎵弿鐨勬潈闄愯姹傛瘮涔嬪墠鐨勭増鏈洿涓ユ牸銆?璇︽儏璇峰弬闃?Wi-Fi 鎵弿闄愬埗銆?/p>

绫讳技鐨勯檺鍒朵篃閫傜敤浜?getConnectionInfo() 鍑芥暟锛岃鍑芥暟杩斿洖鎻忚堪褰撳墠 Wi-Fi 杩炴帴鐨?WifiInfo 瀵硅薄銆?濡傛灉璋冪敤搴旂敤鍏锋湁浠ヤ笅鏉冮檺锛屽垯鍙兘浣跨敤璇ュ璞$殑鍑芥暟鏉ユ绱?SSID 鍜?BSSID 鍊硷細

  • ACCESS_FINE_LOCATION 鎴?/strong> ACCESS_COARSE_LOCATION
  • ACCESS_WIFI_STATE

妫€绱?SSID 鎴?BSSID 杩橀渶瑕佸湪璁惧涓婂惎鐢ㄤ綅缃湇鍔★紙鍦?Settings > Location 涓嬶級銆?/p>

浠?Wi-Fi 鏈嶅姟鍑芥暟涓Щ闄ょ殑淇℃伅

鍦?Android 9 涓紝涓嬪垪浜嬩欢鍜屽箍鎾笉鎺ユ敹鐢ㄦ埛浣嶇疆鎴栦釜浜哄彲璇嗗埆鏁版嵁鏂归潰鐨勪俊鎭細

  • WifiManager 涓殑 getScanResults() 鍜?getConnectionInfo() 鍑芥暟銆?/li>
  • WifiP2pManager 涓殑 discoverServices() 鍜?addServiceRequest() 鍑芥暟銆?/li>
  • NETWORK_STATE_CHANGED_ACTION 骞挎挱銆?/li>

Wi-Fi 鐨?NETWORK_STATE_CHANGED_ACTION绯荤粺骞挎挱涓嶅啀鍖呭惈 SSID锛堜箣鍓嶄负 EXTRA_SSID锛夈€丅SSID锛堜箣鍓嶄负 EXTRA_BSSID锛夋垨杩炴帴淇℃伅锛堜箣鍓嶄负 EXTRA_NETWORK_INFO锛夈€?濡傛灉搴旂敤闇€瑕佹淇℃伅锛岃鏀逛负璋冪敤 getConnectionInfo()銆?/p>

鐢佃瘽淇℃伅鐜板湪渚濊禆璁惧浣嶇疆璁剧疆

濡傛灉鐢ㄦ埛鍦ㄨ繍琛?Android 9 鐨勮澶囦笂鍋滅敤璁惧瀹氫綅锛屽垯浠ヤ笅鍑芥暟涓嶆彁渚涚粨鏋滐細

  • getAllCellInfo()
  • listen()
  • getCellLocation()
  • getNeighboringCellInfo()

瀵逛娇鐢ㄩ潪 SDK 鎺ュ彛鐨勯檺鍒?/h2>

涓哄府鍔╃‘淇濆簲鐢ㄧǔ瀹氭€у拰鍏煎鎬э紝姝ゅ钩鍙板鏌愪簺闈?SDK 鍑芥暟鍜屽瓧娈电殑浣跨敤杩涜浜嗛檺鍒讹紱鏃犺鎮ㄦ槸鐩存帴璁块棶杩欎簺鍑芥暟鍜屽瓧娈碉紝杩樻槸閫氳繃鍙嶅皠鎴?JNI 璁块棶锛岃繖浜涢檺鍒跺潎閫傜敤銆?鍦?Android 9 涓紝鎮ㄧ殑搴旂敤鍙互缁х画璁块棶杩欎簺鍙楅檺鐨勬帴鍙o紱璇ュ钩鍙伴€氳繃 toast 鍜屾棩蹇楁潯鐩彁閱掓偍娉ㄦ剰杩欎簺鎺ュ彛銆?濡傛灉鎮ㄧ殑搴旂敤鏄剧ず杩欐牱鐨?toast锛屽垯蹇呴』瀵绘眰鍙楅檺鎺ュ彛涔嬪鐨勫叾浠栧疄鐜扮瓥鐣ャ€?濡傛灉鎮ㄨ涓烘病鏈夊彲琛岀殑鏇夸唬绛栫暐锛屾偍鍙互鎻愪氦閿欒浠ヨ姹傞噸鏂拌€冭檻姝ら檺鍒躲€?/p>

瀵归潪 SDK 鎺ュ彛鐨勯檺鍒跺寘鍚簡鏇村閲嶈淇℃伅銆?鎮ㄥ簲鏌ラ槄璇ヤ俊鎭互纭繚鎮ㄧ殑搴旂敤缁х画姝e父宸ヤ綔銆?/p>

瀹夊叏琛屼负鍙樻洿

璁惧瀹夊叏鎬у彉鏇?/h3>

鏃犺搴旂敤鐨勭洰鏍囧钩鍙扮増鏈浣曪紝Android 9 娣诲姞鐨勮嫢骞插姛鑳藉潎鍙护搴旂敤鐨勫畨鍏ㄦ€у緱鍒版敼鍠勩€?/p>

浼犺緭灞傚畨鍏ㄥ崗璁?(TLS) 瀹炵幇鍙樻洿

绯荤粺鐨勪紶杈撳眰瀹夊叏鍗忚 (TLS) 瀹炵幇鍦?Android 9 涓粡鍘嗕簡鑻ュ共娆″彉鏇达細

  • 濡傛灉 SSLSocket 鐨勫疄渚嬪湪鍒涘缓鏃惰繛鎺ュけ璐ワ紝绯荤粺浼氬紩鍙?IOException 鑰岄潪 NullPointerException銆?/li>
  • SSLEngine 绫诲彲姝e父澶勭悊鍑虹幇鐨勪换浣?close_notify 鎻愰啋銆?/li>

濡傞渶浜嗚В鏈夊叧鍦?Android 搴旂敤涓繘琛屽畨鍏ㄧ綉缁滆姹傜殑鏇村淇℃伅锛岃鍙傞槄涓€涓?HTTPS 绀轰緥銆?/p>

鏇翠弗鏍肩殑 SECCOMP 杩囨护鍣?/p>

Android 9 瀵瑰彲渚涘簲鐢ㄤ娇鐢ㄧ殑绯荤粺璋冪敤鍋氫簡杩涗竴姝ラ檺鍒躲€?姝よ涓烘槸 Android 8.0锛圓PI 绾у埆 26锛夊寘鍚殑 SECCOMP 杩囨护鍣ㄧ殑鎵╁睍銆?/p>

娉細姝ゆ洿鏀逛粎褰卞搷浣跨敤鎺堟潈鐨勭郴缁熻皟鐢ㄧ殑搴旂敤銆?/p>

鍔犲瘑鍙樻洿

Android 9 閽堝鍔犲瘑绠楁硶鐨勫疄鐜板拰澶勭悊寮曞叆浜嗗嚑椤瑰彉鏇淬€?/p>

鍙傛暟鍜岀畻娉曠殑 Conscrypt 瀹炵幇

Android 9 鍦?Conscrypt 涓疄鐜颁簡鏇村鐨勭畻娉曞弬鏁般€?杩欎簺鍙傛暟鍖呮嫭锛?AES銆丏ESEDE銆丱AEP 鍜?EC銆?杩欎簺鍙傛暟鍜岃澶氱畻娉曠殑 Bouncy Castle 鐗堟湰鑷?Android 9 璧峰凡琚純鐢ㄣ€?/p>

娉細EC 鍙傛暟鐨?Conscrypt 瀹炵幇浠呮敮鎸佸凡鍛藉悕鐨勬洸绾裤€?/p>

濡傛灉鎮ㄧ殑搴旂敤浠?Android 8.1锛圓PI 绾у埆 27锛夋垨鏇翠綆鐗堟湰涓虹洰鏍囷紝鍒欏湪璇锋眰杩欎簺宸插純鐢ㄧ畻娉曚箣涓€鐨?Bouncy Castle 瀹炵幇鏃讹紝鎮ㄥ皢鏀跺埌涓€鏉¤鍛婃秷鎭€?鐒惰€岋紝濡傛灉鎮ㄤ互 Android 9 涓虹洰鏍囧钩鍙帮紝鍒欒繖浜涜姹備細鍚勮嚜寮曞彂 NoSuchAlgorithmException銆?/p>

鍏朵粬鍙樻洿

Android 9 寮曞叆浜嗗椤逛笌鍔犲瘑鏈夊叧鐨勫叾浠栧彉鏇达細

  • 浣跨敤 PBE 瀵嗛挜鏃讹紝濡傛灉 Bouncy Castle 闇€瑕佸垵濮嬪寲鐭㈤噺 (IV)锛岃€屾偍鐨勫簲鐢ㄦ湭鎻愪緵 IV锛屽垯浼氭敹鍒颁竴鏉¤鍛婃秷鎭€?/li>
  • ARC4 鍔犲瘑鐨?Conscrypt 瀹炵幇鍏佽鎮ㄦ寚瀹?ARC4/ECB/NoPadding 鎴?ARC4/NONE/NoPadding銆?/li>
  • Crypto Java 鍔犲瘑鏋舵瀯 (JCA) 鎻愪緵绋嬪簭鐜板凡琚Щ闄ゃ€?鍥犳锛屽鏋滄偍鐨勫簲鐢ㄨ皟鐢?SecureRandom.getInstance("SHA1PRNG", "Crypto")锛屽皢浼氬彂鐢?NoSuchProviderException銆?/li>
  • 濡傛灉鎮ㄧ殑搴旂敤浠庡ぇ浜庡瘑閽ョ粨鏋勭殑缂撳啿鍖轰腑瑙f瀽 RSA 瀵嗛挜锛屽皢涓嶄細鍐嶅彂鐢熷紓甯搞€?/li>

濡傞渶浜嗚В鏈夊叧浣跨敤 Android 鐨勫姞瀵嗗姛鑳界殑鏇村淇℃伅锛岃鍙傞槄鍔犲瘑銆?/p>

涓嶅啀鏀寔 Android 瀹夊叏鍔犲瘑鏂囦欢

Android 9 瀹屽叏鍙栨秷浜嗗 Android 瀹夊叏鍔犲瘑鏂囦欢 (ASEC) 鐨勬敮鎸併€?/p>

鍦?Android 2.2锛圓PI 绾у埆 8锛変腑锛孉ndroid 寮曞叆浜?ASEC 浠ユ敮鎸?SD 鍗″姞杞藉簲鐢ㄥ姛鑳姐€?鍦?Android 6.0锛圓PI 绾у埆 23锛変笂锛屽钩鍙板紩鍏ヤ簡涓€涓彲閲囩敤鐨勫瓨鍌ㄨ澶?鎶€鏈紝寮€鍙戣€呭彲鐢ㄥ畠鏉ヤ唬鏇?ASEC銆?/p>

ICU 搴撴洿鏂?/h2>

Android 9 浣跨敤 ICU 搴撶増鏈?60銆?Android 8.0锛圓PI 绾у埆 26锛夊拰 Android 8.1锛圓PI 绾у埆 27锛変娇鐢?ICU 58銆?/p>

ICU 鐢ㄤ簬鎻愪緵 android.icu package 涓嬬殑鍏紑 API锛?渚?Android 骞冲彴鍐呴儴鐢ㄦ潵鎻愪緵鍥介檯鍖栨敮鎸併€?渚嬪锛屽畠鐢ㄤ簬瀹炵幇 java.util銆?code>java.text 鍜?android.text.format 鏍煎紡鐨?Android 绫汇€?/p>

瀵?ICU 60 杩涜鐨勬洿鏂板寘鍚澶氱粏寰絾寰堟湁鐢ㄧ殑鍙樻洿锛岃繖鍖呮嫭 Emoji 5.0 鏁版嵁鏀寔锛屾敼杩涗簡鏃ユ湡/鏃堕棿鏍煎紡锛岃瑙?ICU 59 鍜?ICU 60 鐗堟湰璇存槑涓殑浠嬬粛銆?/p>

鏈鏇存柊涓殑鏄捐憲鍙樻洿锛?/p>

  • 骞冲彴澶勭悊鏃跺尯鐨勬柟寮忓凡鍙戠敓鏇存敼銆?
    • 骞冲彴鑳藉鏇村ソ鍦板鐞?GMT 鍜?UTC锛屼笉鍐嶅皢 UTC 涓?GMT 娣蜂负涓€璋堛€?

      ICU 鐜板湪鎻愪緵 GMT 鍜?UTC 鐨勭炕璇戠増鏃跺尯鍚嶇О銆?姝ゅ彉鏇翠細褰卞搷鈥淕MT鈥濄€佲€淓tc/GMT鈥濄€佲€淓tc/UTC鈥濄€佲€淯TC鈥濆拰鈥淶ulu鈥濅箣绫绘椂鍖虹殑 android.icu 鏍煎紡鍜岃В鏋愯涓恒€?/p>

    • java.text.SimpleDateFormat 鐜板湪浣跨敤 ICU 鎻愪緵 UTC /GMT 鐨勬樉绀哄悕绉帮紝杩欐剰鍛崇潃锛?
      • 瀵逛簬璁稿璇█鍖哄煙鑰岃█锛岃缃?zzzz 鐨勬牸寮忓皢浼氱敓鎴愬緢闀跨殑鏈湴鍖栧瓧绗︿覆銆備箣鍓嶏紝瀵逛簬 UTC 鏃跺尯锛屽畠浼氱敓鎴愨€淯TC鈥濓紝鑰屽浜?GMT锛屽垯浼氱敓鎴愨€淕MT+00:00鈥濅箣绫荤殑瀛楃涓层€?/li>
      • 瑙f瀽 zzzz 鍙瘑鍒€淯niversal Coordinated Time鈥濆拰鈥淕reenwich Mean Time鈥濅箣绫荤殑瀛楃涓层€?/li>
      • 鍦ㄦ墍鏈夎瑷€閲岋紝濡傛灉搴旂敤鎺ュ彈鈥淯TC鈥濇垨鈥淕MT+00:00鈥濅綔涓?zzzz 鐨勮緭鍑猴紝鍒欏彲鑳戒細閬囧埌鍏煎鎬ч棶棰樸€?/li>
    • java.text.DateFormatSymbols.getZoneStrings() 鐨勮涓哄凡鍙樻洿锛?
      • 涓?SimpleDateFormat 绫讳技锛岀幇鍦紝UTC 鍜?GMT 涔熸湁闀垮悕绉般€傚浜?UTC 鏃跺尯锛孌ST 绫诲瀷鐨勬椂鍖哄悕绉帮紙渚嬪鈥淯TC鈥濄€佲€淓tc/UTC鈥濆拰鈥淶ulu鈥濓級鍙樹负 GMT+00:00锛堣€屼笉鏄‖缂栫爜瀛楃涓?UTC锛夛紝杩欐槸鍦ㄦ病鏈夊叾浠栧悕绉板彲鐢ㄦ椂鐨勬爣鍑嗗洖閫€銆?/li>
      • 鏌愪簺鏃跺尯 ID 琚纭湴璇嗗埆涓哄叾浠栧湴鍖虹殑鍚屼箟璇嶏紝鍥犳锛孉ndroid 鑳藉鏌ユ壘杩囨椂鏃跺尯 ID锛堜緥濡?Eire锛夊搴旂殑瀛楃涓诧紝鑰屼箣鍓嶆棤娉曡В鍐虫闂銆?/li>
    • 浜氭床/娌冲唴涓嶅啀鏄彲璇嗗埆鐨勬椂鍖恒€?鍥犳锛?code>java.util.TimeZones.getAvailableIds() 涓嶅啀杩斿洖姝ゅ€硷紝java.util.TimeZone.getTimeZone() 涔熶笉鍐嶈瘑鍒畠銆傛琛屼负涓庣幇鏈夌殑 android.icu 琛屼负鐩哥銆?/li>
  • android.icu.text.NumberFormat.getInstance(ULocale, PLURALCURRENCYSTYLE).parse(String) 鍑芥暟鐢氳嚦鍦ㄨВ鏋愬悎娉曠浉搴斿竵绉嶆枃鏈椂涔熶細寮曞彂 ParseException銆?閫氳繃瀵?PLURALCURRENCYSTYLE 绫诲瀷鐨勭浉搴斿竵绉嶆枃鏈娇鐢ㄨ嚜 Android 7.0锛圓PI 绾у埆 24锛変互鏉ユ墍鎻愪緵鐨?code>NumberFormat.parseCurrency锛屽彲閬垮厤姝ら棶棰樸€?/li>

Android Test 鍙樻洿

Android 9 寮曞叆浜嗗椤归拡瀵?Android Test 妗嗘灦搴撳拰绫荤粨鏋勭殑鏇存敼銆?杩欎簺鍙樻洿鍙府鍔╁紑鍙戣€呬娇鐢ㄦ敮鎸佹鏋剁殑鍏叡 API锛屾澶栵紝鍦ㄤ娇鐢ㄧ涓夋柟搴撴垨鑷畾涔夐€昏緫鏋勫缓鍜岃繍琛屾祴璇曟椂锛岃繖浜涘彉鏇磋繕鍙彁渚涙洿澶х殑鐏垫椿鎬с€?/p>

浠庢鏋剁Щ闄ょ殑鍐呭搴?/p>

Android 9 灏嗗熀浜?JUnit 鐨勭被閲嶆柊鏁寸悊鎴愪笁涓唴瀹瑰簱锛?android.test.base銆?strong>android.test.runner 鍜?android.test.mock銆?姝ゅ彉鏇村厑璁告偍閽堝涓庢偍鐨勯」鐩緷璧栭」鎼厤鏁堟灉鏈€濂界殑 JUnit 鐗堟湰杩愯娴嬭瘯銆?姝ょ増鏈殑 JUnit 鍙兘涓嶅悓浜?android.jar 鎻愪緵鐨勭増鏈€?/p>

濡傞渶浜嗚В鏈夊叧濡備綍灏嗗熀浜?JUnit 鐨勭被缁勭粐鍒拌繖浜涘唴瀹瑰簱涓紝浠ュ強濡備綍鍑嗗鎮ㄧ殑搴旂敤椤圭洰浠ョ紪鍐欏拰杩愯娴嬭瘯锛岃鍙傞槄閽堝 Android 娴嬭瘯璁剧疆椤圭洰銆?/p>

娴嬭瘯濂椾欢鐗堟湰鍙峰彉鏇?/p>

绉婚櫎浜?TestSuiteBuilder 绫讳腑鐨?addRequirements() 鍑芥暟锛?code>TestSuiteBuilder 绫绘湰韬篃宸插純鐢ㄣ€?addRequirements() 鍑芥暟瑕佹眰寮€鍙戣€呮彁渚涚被鍨嬩负闅愯棌 API 鐨勫弬鏁帮紝缁撴灉浠?API 澶辨晥銆?/p>

Java UTF 瑙g爜鍣?/h2>

UTF-8 鏄?Android 涓殑榛樿瀛楃闆嗐€?UTF-8 瀛楄妭搴忓垪鍙敱 String(byte[] bytes) 涔嬬被鐨?String 鏋勯€犲嚱鏁拌В鐮併€?/p>

Android 9 涓殑 UTF-8 瑙g爜鍣ㄩ伒寰瘮浠ュ墠鐗堟湰涓洿涓ユ牸鐨?Unicode 鏍囧噯锛?杩欎簺鍙樻洿鍖呮嫭锛?/p>

  • 闈炴渶鐭舰寮忕殑 UTF-8锛堜緥濡?锛夎瑙嗕负鏍煎紡涓嶆纭€?/li>
  • 鏇夸唬褰㈠紡鐨?UTF-8锛堜緥濡?U+D800..U+DFFF锛夎瑙嗕负鏍煎紡涓嶆纭€?/li>
  • 鏈€澶х殑瀛愰儴鍒嗚鍗曚釜 U+FFFD 鍙栦唬銆?渚嬪锛屽湪瀛楄妭搴忓垪鈥?code>41 C0 AF 41 F4 80 80 41鈥濅腑锛屾渶澶у瓙閮ㄥ垎涓衡€?code>C0鈥濄€佲€?code>AF鈥濆拰鈥?code>F4 80 80鈥濄€傚叾涓€?code>F4 80 80鈥濆彲浠ユ槸鈥?code>F4 80 80 80鈥濈殑鍒濆瀛愬簭鍒楋紝浣嗏€?code>C0鈥濅笉鑳芥槸浠讳綍褰㈠紡姝g‘鐨勪唬鐮佸崟浣嶅簭鍒楃殑鍒濆瀛愬簭鍒椼€?鍥犳锛岃緭鍑哄簲涓衡€?code>A\ufffd\ufffdA\ufffdA鈥濄€?/li>
  • 瑕佸湪 Android 9 鎴栨洿楂樼増鏈腑瑙g爜淇敼鍚庣殑 UTF-8/CESU-8 搴忓垪锛岃浣跨敤 DataInputStream.readUTF() 鍑芥暟鎴?NewStringUTF() JNI 鍑芥暟銆?/li>

浣跨敤璇佷功鐨勪富鏈哄悕楠岃瘉

RFC 2818涓粙缁嶄簡涓ょ瀵圭収璇佷功鍖归厤鍩熷悕鐨勬柟娉曗€斾娇鐢?subjectAltName (SAN) 鎵╁睍绋嬪簭涓殑鍙敤鍚嶇О锛屾垨鑰呭湪娌℃湁 SAN 鎵╁睍绋嬪簭鐨勬儏鍐典笅锛屽洖閫€鍒?commonName (CN)銆?/p>

鐒惰€岋紝鍦?RFC 2818 涓紝鍥為€€鍒?CN 宸茶寮冪敤銆傚洜姝わ紝Android 涓嶅啀鍥為€€鍒颁娇鐢?CN銆?瑕侀獙璇佷富鏈哄悕锛屾湇鍔″櫒蹇呴』鍑虹ず鍏锋湁鍖归厤 SAN 鐨勮瘉涔︺€?涓嶅寘鍚笌涓绘満鍚嶅尮閰嶇殑 SAN 鐨勮瘉涔︿笉鍐嶈淇′换銆?/p>

缃戠粶鍦板潃鏌ヨ鍙兘浼氬鑷寸綉缁滆繚瑙?/h2>

瑕佹眰鍚嶇О瑙f瀽鐨勭綉缁滃湴鍧€鏌ヨ鍙兘浼氭秹鍙婄綉缁?I/O锛屽洜姝や細琚涓洪樆濉炴€ф搷浣溿€?瀵逛簬涓荤嚎绋嬬殑闃诲鎬ф搷浣滃彲鑳戒細瀵艰嚧鍋滈】鎴栧崱椤裤€?/p>

StrictMode 绫绘槸涓€涓湁鍔╀簬寮€鍙戣€呮娴嬩唬鐮侀棶棰樼殑寮€鍙戝伐鍏枫€?/p>

鍦?Android 9 鍙婃洿楂樼増鏈腑锛?code>StrictMode 鍙互妫€娴嬮渶瑕佸悕绉拌В鏋愮殑缃戠粶鍦板潃鏌ヨ鎵€瀵艰嚧鐨勭綉缁滆繚瑙勩€?/p>

鎮ㄥ湪浜や粯搴旂敤鏃朵笉搴斿惎鐢?StrictMode銆?鍚﹀垯锛屾偍鐨勫簲鐢ㄥ彲鑳戒細閬亣寮傚父锛屼緥濡傦紝鍦ㄤ娇鐢?detectNetwork() 鎴?detectAll() 鍑芥暟鑾峰彇鐢ㄤ簬妫€娴嬬綉缁滆繚瑙勭殑鏀跨瓥鏃讹紝浼氬嚭鐜?code>NetworkOnMainThreadException銆?/p>

瑙f瀽鏁板瓧 IP 鍦板潃涓嶈瑙嗕负闃诲鎬ф搷浣溿€?鏁板瓧 IP 鍦板潃瑙f瀽鐨勫伐浣滄柟寮忎笌 Android 9 浠ュ墠鐨勭増鏈腑鎵€閲囩敤鐨勬柟寮忕浉鍚屻€?/p>

濂楁帴瀛楁爣璁?/h2>

鍦ㄤ綆浜?Android 9 鐨勫钩鍙扮増鏈笂锛屽鏋滀娇鐢?setThreadStatsTag() 鍑芥暟鏍囪鏌愪釜濂楁帴瀛楋紝鍒欏綋浣跨敤甯?ParcelFileDescriptor 瀹瑰櫒鐨?binder 杩涚▼闂撮€氫俊灏嗗叾鍙戦€佺粰鍏朵粬杩涚▼鏃讹紝濂楁帴瀛椾細琚彇娑堟爣璁般€?/p>

鍦?Android 9 鍙婃洿楂樼増鏈腑锛屽埄鐢?binder 杩涚▼闂撮€氫俊灏嗗鎺ュ瓧鍙戦€佽嚦鍏朵粬杩涚▼鏃讹紝鍏舵爣璁板皢寰楀埌淇濈暀銆?姝ゅ彉鏇村彲鑳藉奖鍝嶇綉缁滄祦閲忕粺璁★紝渚嬪锛屼娇鐢?queryDetailsForUidTag() 鍑芥暟鏃躲€?/p>

濡傛灉鎮ㄨ淇濈暀浠ュ墠鐗堟湰鐨勮涓猴紝鍗冲彇娑堝凡鍙戦€佽嚦鍏朵粬杩涚▼鐨勫鎺ュ瓧鐨勬爣璁帮紝鎮ㄥ彲浠ュ湪鍙戦€佹濂楁帴瀛椾箣鍓嶈皟鐢?untagSocket()銆?/p>

鎶ュ憡鐨勫鎺ュ瓧涓彲鐢ㄥ瓧鑺傛暟

鍦ㄨ皟鐢?shutdownInput() 鍑芥暟鍚庯紝available() 鍑芥暟浼氬湪璋冪敤鏃惰繑鍥?0銆?/p>

鏇磋灏界殑 VPN 缃戠粶鍔熻兘鎶ュ憡

鍦?Android 8.1锛圓PI 绾у埆 28锛夊強鏇翠綆鐗堟湰涓紝NetworkCapabilities 绫讳粎鎶ュ憡 VPN 鐨勬湁闄愪俊鎭紝渚嬪 TRANSPORT_VPN锛屼絾浼氱渷鐣?NET_CAPABILITY_NOT_VPN銆?淇℃伅鏈夐檺瀵艰嚧闅句互纭畾浣跨敤 VPN 鏄惁浼氬鑷村搴旂敤鐨勭敤鎴锋敹璐广€?渚嬪锛屾鏌?NET_CAPABILITY_NOT_METERED 骞朵笉鑳界‘瀹氬簳灞傜綉缁滄槸鍚︽寜娴侀噺璁¤垂銆?/p>

浠?Android 9 鍙婃洿楂樼増鏈紑濮嬶紝褰?VPN 璋冪敤 setUnderlyingNetworks() 鍑芥暟鏃讹紝Android 绯荤粺灏嗕細鍚堝苟浠讳綍搴曞眰缃戠粶鐨勪紶杈撳拰鑳藉姏骞惰繑鍥?VPN 缃戠粶鐨勬湁鏁堢綉缁滆兘鍔涗綔涓虹粨鏋溿€?/p>

鍦?Android 9 鍙婃洿楂樼増鏈腑锛屽凡缁忔鏌?code>NET_CAPABILITY_NOT_METERED 鐨勫簲鐢ㄥ皢鏀跺埌鍏充簬 VPN 缃戠粶鑳藉姏鍜屽簳灞傜綉缁滅殑淇℃伅銆?/p>

搴旂敤涓嶅啀鑳借闂?xt_qtaguid 鏂囦欢澶逛腑鐨勬枃浠?/h2>

浠?Android 9 寮€濮嬶紝涓嶅啀鍏佽搴旂敤鐩存帴璇诲彇 /proc/net/xt_qtaguid 鏂囦欢澶逛腑鐨勬枃浠躲€?杩欐牱鍋氭槸涓轰簡纭繚涓庢煇浜涙牴鏈笉鎻愪緵杩欎簺鏂囦欢鐨勮澶囦繚鎸佷竴鑷淬€?/p>

渚濊禆杩欎簺鏂囦欢鐨勫叕寮€ API TrafficStats 鍜?NetworkStatsManager 缁х画鎸夌収棰勬湡鏂瑰紡杩愯銆?鐒惰€岋紝涓嶅彈鏀寔鐨?cutils 鍑芥暟锛堜緥濡?qtaguid_tagSocket()锛夊湪涓嶅悓璁惧涓婂彲鑳戒笉浼氭寜鐓ч鏈熸柟寮忚繍琛?鈥?鐢氳嚦鏍规湰涓嶈繍琛屻€?/p>

鐜板湪寮哄埗鎵ц FLAG_ACTIVITY_NEW_TASK 瑕佹眰

鍦?Android 9 涓紝鎮ㄤ笉鑳戒粠闈?Activity 鐜涓惎鍔?Activity锛岄櫎闈炴偍浼犻€?Intent 鏍囧織 FLAG_ACTIVITY_NEW_TASK銆?濡傛灉鎮ㄥ皾璇曞湪涓嶄紶閫掓鏍囧織鐨勬儏鍐典笅鍚姩 Activity锛屽垯璇?Activity 涓嶄細鍚姩锛岀郴缁熶細鍦ㄦ棩蹇椾腑杈撳嚭涓€鍒欐秷鎭€?/p>

娉細鍦?Android 7.0锛圓PI 绾у埆 24锛変箣鍓嶏紝鏍囧織瑕佹眰涓€鐩存槸鏈熸湜鐨勮涓哄苟琚己鍒舵墽琛屻€?Android 7.0 涓殑涓€涓敊璇細涓存椂闃绘瀹炴柦鏍囧織瑕佹眰銆?/p>

灞忓箷鏃嬭浆鍙樻洿

浠?Android 9 寮€濮嬶紝瀵?strong>绾靛悜鏃嬭浆妯″紡鍋氬嚭浜嗛噸澶у彉鏇淬€?鍦?Android 8.0锛圓PI 绾у埆 26锛変腑锛岀敤鎴峰彲浠ヤ娇鐢?Quicksettings 鍥惧潡鎴?Display 璁剧疆鍦?strong>鑷姩灞忓箷鏃嬭浆鍜?strong>绾靛悜鏃嬭浆妯″紡涔嬮棿鍒囨崲銆?绾靛悜妯″紡宸查噸鍛藉悕涓?strong>鏃嬭浆閿佸畾锛屽畠浼氬湪鑷姩灞忓箷鏃嬭浆鍏抽棴鏃跺惎鐢ㄣ€?鑷姩灞忓箷鏃嬭浆妯″紡娌℃湁浠讳綍鍙樻洿銆?/p>

褰撹澶囧浜庢棆杞攣瀹氭ā寮忔椂锛岀敤鎴峰彲灏嗗叾灞忓箷閿佸畾鍒伴《灞傚彲瑙?Activity 鎵€鏀寔鐨勪换浣曟棆杞€?Activity 涓嶅簲鍋囧畾瀹冨皢濮嬬粓浠ョ旱鍚戝憟鐜般€?濡傛灉椤跺眰 Activity 鍙湪鑷姩灞忓箷鏃嬭浆妯″紡涓嬩互澶氱鏃嬭浆鍛堢幇锛屽垯搴斿湪鏃嬭浆閿佸畾妯″紡涓嬫彁渚涚浉鍚岀殑閫夐」锛屾牴鎹?Activity 鐨?screenOrientation 璁剧疆锛屽厑璁稿瓨鍦ㄤ竴浜涗緥澶栨儏鍐碉紙瑙佷笅琛級銆?/p>

璇锋眰鐗瑰畾灞忓箷鏂瑰悜锛堜緥濡傦紝screenOrientation=landscape锛夌殑 Activity 浼氬拷鐣ョ敤鎴烽攣瀹氶閫夐」锛屽苟涓旇涓轰笌 Android 8.0 涓殑琛屼负鐩稿悓銆?/p>

鍙湪 Android Manifest 涓紝鎴栦互缂栫▼鏂瑰紡閫氳繃 setRequestedOrientation() 鍦?Activity 绾у埆璁剧疆灞忓箷鏂瑰悜棣栭€夐」銆?/p>

鏃嬭浆閿佸畾妯″紡閫氳繃璁剧疆 WindowManager 鍦ㄥ鐞?Activity 鏃嬭浆鏃朵娇鐢ㄧ殑鐢ㄦ埛鏃嬭浆棣栭€夐」鏉ュ彂鎸ヤ綔鐢ㄣ€?鐢ㄦ埛鏃嬭浆棣栭€夐」鍙兘鍦ㄤ笅鍒楁儏鍐典笅鍙戠敓鍙樻洿銆?璇锋敞鎰忥紝鎭㈠璁惧鐨勮嚜鐒舵棆杞瓨鍦ㄥ亸宸紝瀵逛簬澶栧舰涓庢墜鏈虹被浼肩殑璁惧閫氬父璁剧疆涓虹旱鍚戯細

  • 褰撶敤鎴锋帴鍙楁棆杞缓璁椂锛屾棆杞閫夐」鍙樹负寤鸿鏂瑰悜銆?/li>
  • 褰撶敤鎴峰垏鎹㈠埌寮哄埗绾靛悜搴旂敤锛堝寘鎷攣瀹氬睆骞曟垨鍚姩鍣級鏃讹紝鏃嬭浆棣栭€夐」鍙樹负绾靛悜銆?/li>

涓嬭〃鎬荤粨浜嗗父瑙佸睆骞曟柟鍚戠殑鏃嬭浆琛屼负锛?/p>

灞忓箷鏂瑰悜 琛屼负
鏈寚瀹氥€乽ser 鍦ㄨ嚜鍔ㄥ睆骞曟棆杞拰鏃嬭浆閿佸畾涓嬶紝Activity 鍙互绾靛悜鎴栨í鍚戯紙浠ュ強棰犲€掔旱鍚戞垨妯悜锛夊憟鐜般€?棰勬湡鍚屾椂鏀寔绾靛悜鍜屾í鍚戝竷灞€銆?/td>
userLandscape 鍦ㄨ嚜鍔ㄥ睆骞曟棆杞拰鏃嬭浆閿佸畾涓嬶紝Activity 鍙互妯悜鎴栭鍊掓í鍚戝憟鐜般€?棰勬湡鍙敮鎸佹í鍚戝竷灞€銆?/td>
userPortrait 鍦ㄨ嚜鍔ㄥ睆骞曟棆杞拰鏃嬭浆閿佸畾涓嬶紝Activity 鍙互绾靛悜鎴栭鍊掔旱鍚戝憟鐜般€?棰勬湡鍙敮鎸佺旱鍚戝竷灞€銆?/td>
fullUser 鍦ㄨ嚜鍔ㄥ睆骞曟棆杞拰鏃嬭浆閿佸畾涓嬶紝Activity 鍙互绾靛悜鎴栨í鍚戯紙浠ュ強棰犲€掔旱鍚戞垨妯悜锛夊憟鐜般€?棰勬湡鍚屾椂鏀寔绾靛悜鍜屾í鍚戝竷灞€銆?br>
鏃嬭浆閿佸畾鐢ㄦ埛灏嗗彲閫夋嫨閿佸畾鍒伴鍊掔旱鍚戯紝閫氬父涓?180潞銆?/td>
sensor銆乫ullSensor銆乻ensorPortrait銆乻ensorLandscape 蹇界暐鏃嬭浆閿佸畾妯″紡棣栭€夐」锛岃涓鸿嚜鍔ㄥ睆骞曟棆杞凡鍚敤銆?璇蜂粎鍦ㄤ緥澶栨儏鍐典笅骞剁粡杩囦粩缁嗙殑鐢ㄦ埛浣撻獙鑰冮噺鍚庡啀浣跨敤姝ら」銆?/td>

Apache HTTP 瀹㈡埛绔純鐢ㄥ奖鍝嶉噰鐢ㄩ潪鏍囧噯 ClassLoader 鐨勫簲鐢?/h2>

鍦?Android 6.0 涓紝鎴戜滑鍙栨秷浜嗗 Apache HTTP 瀹㈡埛绔殑鏀寔銆?/p>

姝ゅ彉鏇村澶у鏁颁笉浠?Android 9 鎴栨洿楂樼増鏈负鐩爣鐨勫簲鐢ㄦ病鏈変换浣曞奖鍝嶃€?涓嶈繃锛屾鍙樻洿浼氬奖鍝嶄娇鐢ㄩ潪鏍囧噯 ClassLoader 缁撴瀯鐨勬煇浜涘簲鐢紝鍗充娇杩欎簺搴旂敤涓嶄互 Android 9 鎴栨洿楂樼増鏈负鐩爣骞冲彴銆?/p>

濡傛灉搴旂敤浣跨敤鏄惧紡濮旀墭鍒扮郴缁?ClassLoader 鐨勯潪鏍囧噯 ClassLoader锛屽垯搴旂敤浼氬彈鍒板奖鍝嶃€?鍦?org.apache.http.* 涓煡鎵剧被鏃讹紝杩欎簺搴旂敤闇€瑕佸鎵樼粰搴旂敤 ClassLoader銆?濡傛灉瀹冧滑濮旀墭缁欑郴缁?ClassLoader锛屽垯搴旂敤鍦?Android 9 鎴栨洿楂樼増鏈笂灏嗗け璐ュ苟鏄剧ず NoClassDefFoundError锛屽洜涓虹郴缁?ClassLoader 涓嶅啀璇嗗埆杩欎簺绫汇€?涓洪槻姝㈠皢鏉ュ嚭鐜扮被浼奸棶棰橈紝涓€鑸儏鍐典笅锛屽簲鐢ㄥ簲閫氳繃搴旂敤 ClassLoader 鍔犺浇绫伙紝鑰屼笉鏄洿鎺ヨ闂郴缁?ClassLoader銆?/p>

鏋氫妇鐩告満

鍦?Android 9 璁惧涓婅繍琛岀殑搴旂敤鍙互閫氳繃璋冪敤 getCameraIdList() 鍙戠幇姣忎釜鍙敤鐨勬憚鍍忓ご銆?搴旂敤涓嶅簲鍋囧畾璁惧鍙湁涓€涓悗缃憚鍍忓ご鎴栧彧鏈変竴涓墠缃憚鍍忓ご銆?/p>

渚嬪锛屽鏋滄偍鐨勫簲鐢ㄦ湁涓€涓敤鏉ュ垏鎹㈠墠缃拰鍚庣疆鎽勫儚澶寸殑鎸夐挳锛屽垯璁惧鍙兘鏈夊涓墠缃垨鍚庣疆鎽勫儚澶村彲渚涢€夋嫨銆?鎮ㄥ簲娴忚涓€涓嬫憚鍍忓ご鍒楄〃锛屾鏌ユ瘡涓憚鍍忓ご鐨勭壒寰侊紝鐒跺悗鍐冲畾鍚戠敤鎴锋樉绀哄摢浜涙憚鍍忓ご銆?/p>

灏嗗簲鐢ㄨ縼绉诲埌 Android 9

Android 9锛圓PI 绾у埆 28锛夊紩鍏ヤ簡涓€浜涙偍鐨勫簲鐢ㄥ彲鍔犱互鍒╃敤鐨勬柊鍔熻兘鍜?API锛屼互鍙婃柊琛屼负鍙樻洿銆傛湰鏂囨杩颁簡灏嗗簲鐢ㄨ縼绉诲埌 Android 9 鐨勪袱涓叧閿樁娈电殑姝ラ锛?/p>

  1. 纭繚涓?Android 9 鍩烘湰鍏煎

    楠岃瘉鎮ㄧ殑鐜版湁搴旂敤鑳藉鍦ㄦ柊鐗堟湰骞冲彴涓婂叏鍔熻兘杩愯銆傚湪姝ら樁娈碉紝鎮ㄤ笉闇€瑕佷娇鐢ㄦ柊鐨?API锛屼篃涓嶉渶瑕佹洿鏀瑰簲鐢ㄧ殑 targetSdkVersion锛屼絾鍙兘闇€瑕佽繘琛屼竴浜涚粏寰殑鏇存敼銆?/p>

  2. 浠ユ柊骞冲彴涓虹洰鏍囷紝浣跨敤 Android 9 SDK 缂栬瘧锛岀劧鍚庝娇鐢?Android 9 鍔熻兘鏋勫缓

    褰撴偍鍑嗗濂藉埄鐢ㄥ钩鍙扮殑鏂板姛鑳芥椂锛屽皢 targetSdkVersion 鏇存柊鑷斥€?code>28鈥濓紝楠岃瘉搴旂敤鏄惁浠嶅彲鎸夐鏈熸柟寮忚繍琛岋紝鐒跺悗寮€濮嬩娇鐢ㄦ柊鐨?API銆?/p>

鍑嗗涓€鍙拌繍琛?Android 9 鐨勮澶?/h2>

濡傛灉鎮ㄦ湁涓€鍙板吋瀹硅澶囷紝鍒欎粠鍒堕€犲晢閭i噷鑾峰彇璁惧鐨?Android 9 绯荤粺闀滃儚锛涚偣鍑绘澶勮幏鍙?Pixel 璁惧鐨勫嚭鍘傞暅鍍忋€傚埛鍐欑郴缁熼暅鍍忕殑涓€鑸鏄庝綅浜庢澶勩€?/p>

鎮ㄨ繕鍙互涓?Android Emulator 涓嬭浇 Android 9 绯荤粺闀滃儚銆傚畠鍒椾簬 SDK 绠$悊鍣ㄧ殑 Android 9 涓嬶紝鏄剧ず涓?Google APIs Intel x86 Atom System Image銆?/p>

娉?/strong>锛欰ndroid 9 妯℃嫙鍣ㄧ郴缁熼暅鍍忓彲鍦?Android Studio 3.1 鍙婃洿楂樼増鏈腑涓嬭浇锛汚ndroid Studio 3.2 鎻愪緵鏈€浣冲吋瀹规€с€傚闇€浜嗚В璇︾粏淇℃伅锛岃鍙傞槄鑾峰彇 Android 9 SDK銆?/p>

纭繚涓?Android 9 鍏煎

杩欎竴姝ョ殑鐩爣鏄‘淇濇偍鐨勭幇鏈夊簲鐢ㄥ湪 Android 9 涓婂彲鐓у父杩愯銆傜敱浜庝竴浜涘钩鍙板彉鏇村彲鑳藉奖鍝嶅簲鐢ㄧ殑琛屼负鏂瑰紡锛屽洜姝ゅ彲鑳介渶瑕佽繘琛屼竴浜涜皟鏁达紝浣嗘偍涓嶉渶瑕佷娇鐢ㄦ柊鐨?API 鎴栨洿鏀?targetSdkVersion銆?/p>

鎵ц鍏煎鎬ф祴璇?/h3>

涓?Android 9 鐨勫吋瀹规€ф祴璇曞鍗婁笌鎮ㄥ噯澶囧彂甯冨簲鐢ㄦ椂鎵ц鐨勬祴璇曞睘浜庡悓涓€绫诲瀷銆傝繖鏃舵湁蹇呰鍥為【涓€涓嬫牳蹇冨簲鐢ㄨ川閲忔寚鍗楀拰娴嬭瘯鏈€浣冲疄璺点€?/p>

涓嶈繃锛屾祴璇曡繕鏈夊彟涓€涓眰闈細Android 9 鍚?Android 骞冲彴寮曞叆浜嗕竴浜涘彉鍖栵紝鍗充究涓嶅 targetSdkVersion 鍋氫换浣曞彉鍔紝浠嶅彲鑳藉奖鍝嶅簲鐢ㄧ殑琛屼负鎴栦护鍏舵牴鏈棤娉曡繍琛屻€傚洜姝わ紝鎮ㄥ繀椤诲洖椤捐〃 1 涓殑鍏抽敭鍙樺寲锛屽苟瀵逛换浣曚负閫傚簲杩欎簺鍙樺寲鑰屽疄鐜扮殑淇杩涜娴嬭瘯銆?/p>

琛?1. 瀵瑰湪 Android 9 璁惧涓婅繍琛岀殑鎵€鏈夊簲鐢ㄩ兘鏈夊奖鍝嶇殑鍏抽敭鍙樺寲銆?/p>

鍙樺寲 鎽樿
瀵归潪 SDK 鎺ュ彛鐨勯檺鍒?/td> 鐜板凡绂佹璁块棶鐗瑰畾鐨勯潪 SDK 鎺ュ彛锛屾棤璁烘槸鐩存帴璁块棶锛岃繕鏄€氳繃 JNI 鎴栧弽灏勮繘琛岄棿鎺ヨ闂€傚皾璇曡闂彈闄愬埗鐨勬帴鍙f椂锛屼細鐢熸垚 NoSuchFieldException 鍜?NoSuchMethodException 涔嬬被鐨勯敊璇€傝鎯呰鍙傞槄瀵归潪 SDK 鎺ュ彛鐨勯檺鍒躲€?/td>
绉婚櫎鍔犲瘑鎻愪緵绋嬪簭 浠?Android 9 寮€濮嬶紝Crypto JCA 鎻愪緵绋嬪簭宸茶绉婚櫎銆傝皟鐢?SecureRandom.getInstance("SHA1PRNG", "Crypto") 灏嗕細寮曞彂 NoSuchProviderException銆?/td>
鏇翠弗鏍肩殑 UTF-8 瑙g爜鍣?/td> 鍦?Android 9 涓紝閽堝 Java 璇█鐨?UTF-8 瑙g爜鍣ㄦ瘮浠ュ線鏇翠弗鏍硷紝骞朵笖閬靛惊 Unicode 鏍囧噯銆?/td>
绂佹绌洪棽搴旂敤璁块棶鐩告満銆侀害鍏嬮鍜屼紶鎰熷櫒 鍦ㄥ簲鐢ㄥ浜庣┖闂茬姸鎬佹椂锛屼笉鑳藉啀璁块棶鐩告満銆侀害鍏嬮鎴?SensorManager 浼犳劅鍣ㄣ€?/td>

濡傞渶鏌ョ湅閽堝鍦?Android 9 涓婅繍琛岀殑鎵€鏈夊簲鐢ㄧ殑鏇磋灏借涓哄彉鏇村垪琛紝璇峰弬闃呰涓哄彉鏇存枃妗c€?/p>

鏇存柊鎮ㄧ殑鐩爣鐗堟湰骞朵娇鐢?Android聽P 鍔熻兘

鏈儴鍒嗚В閲婂浣曢€氳繃灏嗘偍鐨?targetSdkVersion 鏇存柊涓?28 骞跺鍔?Android 9 涓彁渚涚殑鏂板姛鑳芥潵瀹炵幇瀵?Android 9 鐨勫叏闈㈡敮鎸併€?/p>

闄ゆ彁渚涙柊 API 涔嬪锛屽湪鎮ㄥ皢 targetSdkVersion 鏇存柊涓?28 鏃讹紝鎮ㄤ細娉ㄦ剰鍒?Android 9 杩樺紩鍏ヤ簡涓€浜涜涓哄彉鏇淬€傜敱浜庢煇浜涜涓哄彉鏇村彲鑳借姹傛洿鏀逛唬鐮佷互閬垮厤鍐茬獊锛屽洜姝わ紝鎮ㄥ簲鍏堟煡闃呮墍鏈変互 Android 9 涓虹洰鏍囩殑搴旂敤鐨勮涓哄彉鏇达紝浜嗚В鍦ㄦ偍鏇存敼 targetSdkVersion 鍚庢偍鐨勫簲鐢ㄤ細鍙楀埌鍝簺褰卞搷銆?/p>

娉?/strong>锛氫笂杩版棬鍦ㄧ‘淇濆钩鍙板吋瀹规€х殑姝ラ鏄皢搴旂敤浠?Android 9 涓虹洰鏍囩殑鍏堝喅鏉′欢锛屽洜姝よ鎮ㄥ姟蹇呭厛瀹屾垚杩欎簺姝ラ銆?/p>

鑾峰彇 Android 9 SDK

鎮ㄥ彲浠ヤ娇鐢?Android Studio 3.1 鎴栨洿楂樼増鏈幏鍙?SDK 杞欢鍖咃紝浠ヤ究鍒╃敤 Android 9 鏋勫缓搴旂敤銆傚鏋滄偍鏆傛椂涓嶉渶瑕?Android 9 涓殑鏂板姛鑳斤紝鍙兂閽堝璇ュ钩鍙扮増鏈繘琛岀紪璇戯紝鎮ㄥ彲浠ヤ娇鐢?Android Studio 3.1銆侫ndroid Studio 3.2 鎻愪緵浜嗗 Android 9 鍔熻兘鐨勫叏闈㈡敮鎸併€?/p>

瑕佽缃换涓€鐗堟湰鐨?Android Studio锛岃鎸夌収璁剧疆 Preview SDK 涓粙缁嶇殑姝ラ鎿嶄綔銆?/p>

娴嬭瘯 Android 9 搴旂敤

瀹屾垚浠ヤ笂鍑嗗宸ヤ綔鍚庯紝鎮ㄥ氨鍙互鏋勫缓搴旂敤锛岀劧鍚庡鍏跺仛杩涗竴姝ユ祴璇曪紝纭繚浠?Android 9锛圓PI 绾у埆 28锛変负鐩爣骞冲彴鏃跺畠鑳芥甯稿伐浣溿€傝繖鏃舵湁蹇呰鍐嶆鍥為【涓€涓嬫牳蹇冨簲鐢ㄨ川閲忔寚鍗楀拰娴嬭瘯鏈€浣冲疄璺点€?/p>

濡傛灉鎮ㄦ瀯寤哄簲鐢ㄦ椂灏?targetSdkVersion 璁剧疆涓?P锛屽簲璇ユ敞鎰忕壒瀹氱殑骞冲彴鍙樺寲銆傚嵆渚挎偍涓嶅疄鐜?Android 9 涓殑鏂板姛鑳斤紝鍏朵腑鐨勪竴浜涘彉鍖栦粛鍙兘涓ラ噸褰卞搷搴旂敤鐨勮涓烘垨浠ゅ叾鏍规湰鏃犳硶杩愯銆?/p>

琛?2 鍒楀嚭浜嗚繖浜涘彉鍖栦互鍙婂彲鑾峰緱鏇村淇℃伅鐨勯摼鎺ャ€?/p>

琛?2. targetSdkVersion 璁剧疆涓?28 鏃跺奖鍝嶅簲鐢ㄧ殑鍏抽敭鍙樺寲銆?/p>

鍙樺寲 鎽樿
鍓嶅彴鏈嶅姟鏉冮檺 鐜板湪锛屾兂瑕佷娇鐢ㄥ墠鍙版湇鍔$殑搴旂敤蹇呴』棣栧厛璇锋眰 FOREGROUND_SERVICE 鏉冮檺銆傝繖鏄櫘閫氭潈闄愶紝鍥犳锛岀郴缁熶細鑷姩涓鸿姹傛潈闄愮殑搴旂敤鎺堜簣姝ゆ潈闄愩€傚湪鏈幏寰楁鏉冮檺鐨勬儏鍐典笅鍚姩鍓嶅彴鏈嶅姟灏嗕細寮曞彂 SecurityException銆?/td>
寮冪敤 Bouncy Castle 鍔犲瘑 Android 9 寮冪敤浜嗗嚑涓潵鑷?Bouncy Castle 鎻愪緵绋嬪簭涓殑鍔犲瘑鎶€鏈紝浠d箣浠ョ敱 Conscrypt 鎻愪緵绋嬪簭鎻愪緵鐨勫姞瀵嗘妧鏈€傝皟鐢ㄨ姹?Bouncy Castle 鎻愪緵绋嬪簭鐨?getInstance() 鏃讹紝浼氱敓鎴?NoSuchAlgorithmException 閿欒銆傝瑙e喅杩欎簺閿欒锛岃涓嶈鍦?getInstance() 涓寚瀹氭彁渚涚▼搴忥紙涔熷氨鏄姹傞粯璁ゅ疄鐜帮級銆?/td>
绉婚櫎瀵?Build.serial 鐨勭洿鎺ヨ闂?/td> 鐜板湪锛岄渶瑕?Build.serial 鏍囪瘑绗︾殑搴旂敤蹇呴』璇锋眰 READ_PHONE_STATE 鏉冮檺锛岀劧鍚庝娇鐢?Android 9 涓柊澧炵殑鏂?Build.getSerial() 鍑芥暟銆?/td>
涓嶅厑璁稿叡浜?WebView 鏁版嵁鐩綍 鐜板湪锛屼笉鍏佽搴旂敤鍦ㄤ笉鍚岃繘绋嬩箣闂村叡浜竴涓?WebView 鏁版嵁鐩綍銆傚鏋滄偍鐨勫簲鐢ㄦ湁澶氫釜杩涚▼浣跨敤 WebView銆丆ookieManager 鎴?android.webkit 杞欢鍖呬腑鐨勪换浣曞叾浠?API锛屽垯鍦ㄧ浜屼釜杩涚▼璋冪敤 WebView 鍑芥暟鏃讹紝鎮ㄧ殑搴旂敤灏嗕細宕╂簝銆?/td>
SELinux 绂佹璁块棶搴旂敤鐨勬暟鎹洰褰?/td> 绯荤粺寮哄埗姣忎釜搴旂敤鐨?SELinux 娌欑洅瀵规瘡涓簲鐢ㄧ殑绉佹湁鏁版嵁鐩綍寮哄埗鎵ц閫愪釜搴旂敤鐨?SELinux 闄愬埗銆傜幇鍦紝涓嶅厑璁哥洿鎺ラ€氳繃璺緞璁块棶鍏朵粬搴旂敤鐨勬暟鎹洰褰曘€傚簲鐢ㄥ彲浠ョ户缁娇鐢ㄨ繘绋嬮棿閫氫俊 (IPC) 鏈哄埗锛堝寘鎷€氳繃浼犻€?FD锛夊叡浜暟鎹€?/td>

濡傞渶鏌ョ湅閽堝浠?Android 9 涓虹洰鏍囩殑搴旂敤鐨勬洿璇﹀敖琛屼负鍙樻洿鍒楄〃锛岃鍙傞槄琛屼负鍙樻洿鏂囨。銆?/p>

瑕佹帰绱?Android 9 涓殑鏂板姛鑳藉拰 API锛岃鍙傞槄 Android 9 鍔熻兘鍜?API銆?/p>

鐢垫簮绠$悊

Android 9锛圓PI 绾у埆 28锛夊紩鍏ヤ簡涓€浜涙柊鍔熻兘鏉ユ敼杩涜澶囩數婧愮鐞嗐€?杩欎簺鍙樺寲锛岃繛鍚屽厛鍓嶇増鏈腑宸茬粡瀛樺湪鐨勫姛鑳斤紝鏈夊姪浜庣‘淇濆皢绯荤粺璧勬簮鎻愪緵缁欐渶闇€瑕佸畠浠殑搴旂敤銆?/p>

鐢垫簮绠$悊鍔熻兘鍙互鍒嗕负涓や釜绫诲埆锛?/p>

搴旂敤寰呮満缇ょ粍

绯荤粺灏嗘牴鎹敤鎴风殑浣跨敤妯″紡闄愬埗搴旂敤瀵?CPU 鎴栫數姹犵瓑璁惧璧勬簮鐨勮闂€?杩欐槸 Android 9 涓柊澧炵殑涓€椤瑰姛鑳姐€?/p>

鐪佺數妯″紡鏀硅繘

寮€鍚渷鐢垫ā寮忓悗锛岀郴缁熶細瀵规墍鏈夊簲鐢ㄦ柦鍔犻檺鍒躲€?杩欐槸涓€椤瑰凡鏈夌殑鍔熻兘锛屼絾鍦?Android 9 涓緱鍒颁簡鏀硅繘銆?/p>

娉細杩欎簺鍙樺寲閫傜敤浜庢墍鏈夊簲鐢紝鏃犺瀹冧滑鏄惁浠?Android 9 涓虹洰鏍囥€?/p>

搴旂敤寰呮満缇ょ粍

Android 9 寮曞叆浜嗕竴椤规柊鐨勭數姹犵鐞嗗姛鑳斤紝鍗冲簲鐢ㄥ緟鏈虹兢缁勩€?搴旂敤寰呮満缇ょ粍鍙互鍩轰簬搴旂敤鏈€杩戜娇鐢ㄦ椂闂村拰浣跨敤棰戠巼锛屽府鍔╃郴缁熸帓瀹氬簲鐢ㄨ姹傝祫婧愮殑浼樺厛绾с€?鏍规嵁浣跨敤妯″紡锛屾瘡涓簲鐢ㄩ兘浼氬綊绫诲埌浜斾釜浼樺厛绾х兢缁勪箣涓€涓€?绯荤粺灏嗘牴鎹簲鐢ㄦ墍灞炵殑缇ょ粍闄愬埗姣忎釜搴旂敤鍙互璁块棶鐨勮澶囪祫婧愩€?/p>

浜斾釜缇ょ粍鎸夌収浠ヤ笅鐗规€у皢搴旂敤鍒嗙粍锛?/p>

娲昏穬

濡傛灉鐢ㄦ埛褰撳墠姝e湪浣跨敤搴旂敤锛屽簲鐢ㄥ皢琚綊鍒扳€滄椿璺冣€濈兢缁勪腑锛屼緥濡傦細

  • 搴旂敤宸插惎鍔ㄤ竴涓?Activity
  • 搴旂敤姝e湪杩愯鍓嶅彴鏈嶅姟
  • 搴旂敤鐨勫悓姝ラ€傞厤鍣ㄤ笌鏌愪釜鍓嶅彴搴旂敤浣跨敤鐨?content provider 鍏宠仈
  • 鐢ㄦ埛鍦ㄥ簲鐢ㄤ腑鐐瑰嚮浜嗘煇涓€氱煡

濡傛灉搴旂敤澶勪簬鈥滄椿璺冣€濈兢缁勶紝绯荤粺涓嶄細瀵瑰簲鐢ㄧ殑浣滀笟銆佹姤璀︽垨 FCM 娑堟伅鏂藉姞浠讳綍闄愬埗銆?/p>

宸ヤ綔闆?/p>

濡傛灉搴旂敤缁忓父杩愯锛屼絾褰撳墠鏈浜庢椿璺冪姸鎬侊紝瀹冨皢琚綊鍒扳€滃伐浣滈泦鈥濈兢缁勪腑銆?渚嬪锛岀敤鎴峰湪澶ч儴鍒嗘椂闂撮兘鍚姩鐨勬煇涓ぞ浜ゅ獟浣撳簲鐢ㄥ彲鑳藉氨灞炰簬鈥滃伐浣滈泦鈥濈兢缁勩€?濡傛灉搴旂敤琚棿鎺ヤ娇鐢紝瀹冧滑涔熶細琚崌绾у埌鈥滃伐浣滈泦鈥濈兢缁勪腑 銆?/p>

濡傛灉搴旂敤澶勪簬鈥滃伐浣滈泦鈥濈兢缁勶紝绯荤粺浼氬瀹冭繍琛屼綔涓氬拰瑙﹀彂鎶ヨ鐨勮兘鍔涙柦鍔犺交搴﹂檺鍒躲€?濡傞渶浜嗚В璇︾粏淇℃伅锛岃鍙傞槄鐢垫簮绠$悊闄愬埗銆?/p>

甯哥敤

濡傛灉搴旂敤浼氬畾鏈熶娇鐢紝浣嗕笉鏄瘡澶╅兘蹇呴』浣跨敤锛屽畠灏嗚褰掑埌鈥滃父鐢ㄢ€濈兢缁勪腑銆?渚嬪锛岀敤鎴峰湪鍋ヨ韩鎴胯繍琛岀殑鏌愪釜閿荤偧璺熻釜搴旂敤鍙兘灏卞睘浜庘€滃父鐢ㄢ€濈兢缁勩€?/p>

濡傛灉搴旂敤澶勪簬鈥滃父鐢ㄢ€濈兢缁勶紝绯荤粺灏嗗瀹冭繍琛屼綔涓氬拰瑙﹀彂鎶ヨ鐨勮兘鍔涙柦鍔犺緝寮虹殑闄愬埗锛屼篃浼氬楂樹紭鍏堢骇 FCM 娑堟伅鐨勬暟閲忚瀹氶檺鍒躲€?濡傞渶浜嗚В璇︾粏淇℃伅锛岃鍙傞槄鐢垫簮绠$悊闄愬埗銆?/p>

鏋佸皯浣跨敤

濡傛灉搴旂敤涓嶇粡甯镐娇鐢紝閭d箞瀹冨睘浜庘€滄瀬灏戜娇鐢ㄢ€濈兢缁勩€?渚嬪锛岀敤鎴蜂粎鍦ㄥ叆浣忛厭搴楁湡闂磋繍琛岀殑閰掑簵搴旂敤灏卞彲鑳藉睘浜庘€滄瀬灏戜娇鐢ㄢ€濈兢缁勩€?/p>

濡傛灉搴旂敤澶勪簬鈥滄瀬灏戜娇鐢ㄢ€濈兢缁勶紝绯荤粺灏嗗瀹冭繍琛屼綔涓氥€佽Е鍙戣鎶ュ拰鎺ユ敹楂樹紭鍏堢骇 FCM 娑堟伅鐨勮兘鍔涙柦鍔犱弗鏍奸檺鍒躲€傜郴缁熻繕浼氶檺鍒跺簲鐢ㄨ繛鎺ュ埌缃戠粶鐨勮兘鍔涖€?濡傞渶浜嗚В璇︾粏淇℃伅锛岃鍙傞槄鐢垫簮绠$悊闄愬埗銆?/p>

浠庢湭浣跨敤

瀹夎浣嗘槸浠庢湭杩愯杩囩殑搴旂敤浼氳褰掑埌鈥滀粠鏈娇鐢ㄢ€濈兢缁勪腑銆?绯荤粺浼氬杩欎簺搴旂敤鏂藉姞鏋佸己鐨勯檺鍒躲€?/p>

绯荤粺浼氬姩鎬佸湴灏嗘瘡涓簲鐢ㄥ綊绫诲埌鏌愪釜浼樺厛绾х兢缁勶紝骞舵牴鎹渶瑕侀噸鏂板綊绫汇€?绯荤粺鍙兘浼氫緷闈犳煇涓娇鐢ㄦ満鍣ㄥ涔犵殑棰勫姞杞藉簲鐢ㄧ‘瀹氭瘡涓簲鐢ㄧ殑浣跨敤鍙兘鎬э紝骞跺皢搴旂敤褰掔被鍒板悎閫傜殑缇ょ粍銆?濡傛灉璁惧涓婁笉瀛樺湪绯荤粺搴旂敤锛岀郴缁熼粯璁ゅ皢鍩轰簬搴旂敤鐨勬渶杩戜娇鐢ㄦ椂闂村瀹冧滑杩涜鎺掑簭銆?鏇翠负娲昏穬鐨勫簲鐢ㄥ皢琚綊绫诲埌涓哄簲鐢ㄦ彁渚涙洿楂樹紭鍏堢骇鐨勭兢缁勶紝浠庤€岃搴旂敤鍙互浣跨敤鏇村绯荤粺璧勬簮銆?鍏蜂綋鑰岃█锛岀兢缁勫喅瀹氬簲鐢ㄨ繍琛屼綔涓氱殑棰戠巼锛屽簲鐢ㄥ彲浠ヨЕ鍙戞姤璀︾殑棰戠巼锛屼互鍙婂簲鐢ㄥ彲浠ユ帴鏀堕珮浼樺厛绾?Firebase 浜戜俊鎭紶閫?(FCM) 娑堟伅鐨勯鐜囥€?杩欎簺闄愬埗浠呭湪璁惧浣跨敤鐢垫睜鐢甸噺鏃堕€傜敤锛屽鏋滆澶囨鍦ㄥ厖鐢碉紝绯荤粺涓嶄細瀵瑰簲鐢ㄦ柦鍔犺繖浜涢檺鍒躲€?/p>

姣忎釜鍒堕€犲晢閮藉彲浠ヨ瀹氳嚜宸辩殑鏍囧噯鏉ュ綊绫婚潪娲昏穬搴旂敤銆?鎮ㄤ笉搴斿綋灏濊瘯褰卞搷搴旂敤鎵€灞炵殑缇ょ粍銆?鐩稿弽锛屾偍搴斿綋灏嗙簿鍔涙斁鍦ㄧ‘淇濆簲鐢ㄥ湪鎵€灞炵殑缇ょ粍鍐呰壇濂借繍琛屼笂銆?鎮ㄧ殑搴旂敤鍙互閫氳繃璋冪敤鏂板嚱鏁?UsageStatsManager.getAppStandbyBucket() 鏌ユ壘褰撳墠灞炰簬鍝釜缇ょ粍銆?/p>

娉細浣嶄簬 浣庣數鑰楁ā寮忕櫧鍚嶅崟涓殑搴旂敤涓嶉€傜敤鍩轰簬搴旂敤寰呮満缇ょ粍鐨勯檺鍒躲€?/p>

鏈€浣冲疄璺?/h3>

濡傛灉鎮ㄧ殑搴旂敤宸查伒寰綆鐢佃€楁ā寮忓拰搴旂敤寰呮満妯″紡鐨勬渶浣冲疄璺碉紝閭d箞澶勭悊鏂扮殑鐢垫簮绠$悊鍔熻兘涓嶅簲鏄毦浜嬨€?涓嶈繃锛屼箣鍓嶆甯歌繍琛岀殑涓€浜涘簲鐢ㄨ涓虹幇鍦ㄥ彲鑳戒細寮曡捣闂銆?/p>

  • 涓嶈璁╃郴缁熷浜庝竴绉嶄笉鏂彉鎹㈠簲鐢ㄦ墍灞炵兢缁勭殑鐘舵€併€?绯荤粺鐨勫垎缁勬柟寮忓彲浠ュ彉鍖栵紝姣忎釜璁惧鍒堕€犲晢閮藉彲浠ラ€夋嫨浣跨敤鑷繁鐨勭畻娉曠紪鍐欏垎缁勫簲鐢ㄣ€?鐩稿弽锛岃纭繚鎮ㄧ殑搴旂敤鏃犺澶勪簬鍝竴涓垎缁勬椂琛屼负閮藉緢鎭板綋銆?/li>
  • 濡傛灉搴旂敤娌℃湁鍚姩鍣?Activity锛岄偅涔堝畠鍙兘姘歌繙涓嶄細鍗囩骇鍒扳€滄椿璺冣€濆垎缁勪腑銆?鎮ㄩ渶瑕侀噸鏂拌璁″簲鐢紝浣夸箣鍏锋湁姝ょ被 Activity銆?/li>
  • 濡傛灉搴旂敤鐨勯€氱煡涓嶅彲鎿嶄綔锛岀敤鎴蜂笌閫氱煡浜や簰灏嗘棤娉曡Е鍙戝簲鐢ㄥ悜鈥滄椿璺冣€濈兢缁勭殑鍗囩骇銆?鍦ㄨ繖绉嶆儏鍐典笅锛屾偍闇€瑕侀噸鏂拌璁℃煇浜涢€傚綋鐨勯€氱煡锛岃瀹冧滑鍏佽鐢ㄦ埛鍝嶅簲銆?濡傞渶浜嗚В涓€浜涙寚瀵煎師鍒欙紝璇峰弬闃?Material Design 閫氱煡璁捐妯″紡銆?/li>
  • 绫讳技鍦帮紝濡傛灉搴旂敤鍦ㄦ敹鍒伴珮浼樺厛绾?FCM 娑堟伅鏃朵笉鏄剧ず閫氱煡锛岄偅涔堝畠涓嶄細鍚戠敤鎴锋彁渚涗笌搴旂敤浜や簰鐨勬満浼氾紝涔熶笉浼氬€熸鍗囩骇鍒扳€滄椿璺冣€濈兢缁勪腑銆?浜嬪疄涓婏紝楂樹紭鍏堢骇 FCM 娑堟伅鐨勫敮涓€棰勬湡鐩殑鏄悜鐢ㄦ埛鎺ㄩ€侀€氱煡锛屽洜姝わ紝杩欑鎯呭喌姘歌繙閮戒笉搴斿彂鐢熴€?濡傛灉鎮ㄥ湪鏌愭潯 FCM 娑堟伅涓嶈Е鍙戠敤鎴蜂氦浜掓椂灏嗗叾閿欒鍦版爣璁颁负楂樹紭鍏堢骇锛屽畠鍙兘寮曡捣鍏朵粬涓嶈壇鍚庢灉锛涗緥濡傦紝瀹冨彲鑳藉鑷存偍鐨勫簲鐢ㄨ€楀敖閰嶉锛屽鑷寸湡姝g揣鎬ョ殑 FCM 娑堟伅琚涓轰竴鑸紭鍏堢骇銆?/p>

    娉?/strong>锛氬鏋滅敤鎴烽噸澶嶅拷鐣ヤ簡鏌愪釜閫氱煡锛岀郴缁熷皢鍚戠敤鎴锋彁渚涙湭鏉ラ樆姝㈣閫氱煡鐨勯€夐」銆?璇蜂笉瑕佷负浜嗚鎮ㄧ殑搴旂敤澶勪簬鈥滄椿璺冣€濈兢缁勮€屽悜鐢ㄦ埛婊ュ彂閫氱煡锛?/p>

  • 濡傛灉搴旂敤鍒嗕负澶氫釜杞欢鍖咃紝閭d箞杩欎簺杞欢鍖呭彲鑳藉浜庝笉鍚岀殑缇ょ粍涓紝杩涜€屾嫢鏈変笉鍚岀殑璁块棶鏉冮檺绾у埆銆?璇峰姟蹇呭杞欢鍖呰褰掔被鍒板悇涓兢缁勭殑姝ょ被搴旂敤杩涜娴嬭瘯锛屼互渚跨‘淇濆簲鐢ㄨ涓烘甯搞€?/p>

鐪佺數妯″紡鏀硅繘

Android 9 瀵圭渷鐢垫ā寮忚繘琛屼簡澶氬鏀硅繘銆?璁惧鍒堕€犲晢鍙互鍐冲畾鏂藉姞鐨勭‘鍒囬檺鍒躲€?渚嬪锛屽湪 AOSP 鏋勫缓涓紝绯荤粺浼氬簲鐢ㄤ互涓嬮檺鍒讹細

  • 绯荤粺浼氭洿绉瀬鍦板皢搴旂敤缃簬搴旂敤寰呮満妯″紡锛岃€屼笉鏄瓑寰呭簲鐢ㄧ┖闂层€?/li>
  • 鍚庡彴鎵ц闄愬埗閫傜敤浜庢墍鏈夊簲鐢紝鏃犺瀹冧滑鐨勭洰鏍?API 绾у埆濡備綍銆?/li>
  • 褰撳睆骞曞叧闂椂锛屼綅缃湇鍔″彲鑳戒細琚仠鐢ㄣ€?/li>
  • 鍚庡彴搴旂敤娌℃湁缃戠粶璁块棶鏉冮檺銆?/li>

姝ゅ锛岃繕鏈変竴浜涜澶囩壒瀹氱殑鍏朵粬鐢垫簮浼樺寲銆?濡傞渶浜嗚В璇︾粏淇℃伅锛岃鍙傞槄闄勫綍锛?鐢垫簮绠$悊闄愬埗銆?/p>

涓€濡傛棦寰€锛屼竴绉嶆瘮杈冨ソ鐨勫仛娉曟槸鍦ㄧ渷鐢垫ā寮忔縺娲绘椂瀵规偍鐨勫簲鐢ㄨ繘琛屾祴璇曘€?鎮ㄥ彲浠ラ€氳繃璁惧鐨?Settings > Battery Saver 鐣岄潰鎵嬪姩寮€鍚渷鐢垫ā寮忋€?/p>

娴嬭瘯鍜岄棶棰樻帓鏌?/h2>

鏂扮殑鐢垫簮绠$悊鍔熻兘浼氬奖鍝嶅湪 Android 9 璁惧涓婅繍琛岀殑鎵€鏈夊簲鐢紝鏃犺搴旂敤鏄惁浠?Android 9 涓虹洰鏍囥€傚姟蹇呯‘淇濇偍鐨勫簲鐢ㄥ湪杩欎簺璁惧涓婅涓烘甯搞€?/p>

鍔″繀鍦ㄥ悇绉嶆潯浠朵笅娴嬭瘯鎮ㄧ殑搴旂敤鐨勪富瑕佺敤渚嬶紝浠ヤ究浜嗚В鐢垫簮绠$悊鍔熻兘褰兼涔嬮棿鐨勪氦浜掋€?鎮ㄥ彲浠ヤ娇鐢?Android 璋冭瘯妗ュ懡浠ゅ紑鍏虫煇浜涘姛鑳姐€?/p>

Android 璋冭瘯妗ュ懡浠?/h3>

鎮ㄥ彲浠ヤ娇鐢?Android 璋冭瘯妗?shell 鍛戒护娴嬭瘯澶氫釜鐢垫簮绠$悊鍔熻兘銆?/p>

濡傞渶浜嗚В浣跨敤 ADB 灏嗚澶囩疆浜庝綆鐢佃€楁ā寮忕殑淇℃伅锛岃鍙傞槄鍦ㄤ綆鐢佃€楁ā寮忓拰搴旂敤寰呮満妯″紡涓嬭繘琛屾祴璇曘€?/p>

搴旂敤寰呮満缇ょ粍

鎮ㄥ彲浠ヤ娇鐢?ADB 涓烘偍鐨勫簲鐢ㄦ墜鍔ㄦ寚瀹氬簲鐢ㄥ緟鏈虹兢缁勩€?瑕佹洿鏀瑰簲鐢ㄧ殑缇ょ粍锛岃浣跨敤浠ヤ笅鍛戒护锛?/p>

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

鎮ㄨ繕鍙互浣跨敤璇ュ懡浠や竴娆¤缃涓蒋浠跺寘锛?/p>

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

瑕佹鏌ュ簲鐢ㄥ浜庡摢涓€涓兢缁勶紝璇疯繍琛屼互涓嬪懡浠わ細

$ adb shell am get-standby-bucket [packagename]

濡傛灉鎮ㄤ笉浼犻€?packagename 鍙傛暟锛屽懡浠ゅ皢鍒楀嚭鎵€鏈夊簲鐢ㄧ殑缇ょ粍銆?搴旂敤杩樺彲浠ヨ皟鐢ㄦ柊鍑芥暟 UsageStatsManager.getAppStandbyBucket()锛屽湪杩愯鏃舵煡鎵炬墍灞炵殑缇ょ粍銆?/p>

鐪佺數妯″紡

鍙互浣跨敤澶氫釜鍛戒护娴嬭瘯鎮ㄧ殑搴旂敤鍦ㄤ綆鐢甸噺鏉′欢涓嬬殑琛屼负銆?/p>

娉細鎮ㄨ繕鍙互浣跨敤璁惧鐨?Settings > Battery saver 鐣岄潰灏嗚澶囩疆浜庣渷鐢垫ā寮忋€?/p>

瑕佹ā鎷熸嫈涓嬭澶囩數婧愭椂鐨勬儏褰紝璇蜂娇鐢ㄤ互涓嬪懡浠わ細

$ adb shell dumpsys battery unplug

瑕佹祴璇曡澶囧湪浣庣數閲忔潯浠朵笅鐨勮涓猴紝璇蜂娇鐢ㄤ互涓嬪懡浠わ細

$ adb shell settings put global low_power 1

瀹屾垚娴嬭瘯鍚庯紝鎮ㄥ彲浠ヤ娇鐢ㄤ互涓嬪懡浠ゆ挙娑堣澶囩殑鎵嬪姩璁剧疆锛?/p>

$ adb shell dumpsys battery reset

瀵归潪 SDK 鎺ュ彛鐨勯檺鍒?/h1>

Android 9锛圓PI 绾у埆 28锛夊紩鍏ヤ簡閽堝闈?SDK 鎺ュ彛鐨勪娇鐢ㄩ檺鍒讹紝鏃犺鏄洿鎺ヤ娇鐢ㄨ繕鏄€氳繃鍙嶅皠鎴?JNI 闂存帴浣跨敤銆?鏃犺搴旂敤鏄紩鐢ㄩ潪 SDK 鎺ュ彛杩樻槸灏濊瘯浣跨敤鍙嶅皠鎴?JNI 鑾峰彇鍏跺彞鏌勶紝鍧囬€傜敤杩欎簺闄愬埗銆?鏈夊叧姝ゅ喅瀹氱殑璇︾粏淇℃伅锛岃鍙傞槄閫氳繃鍑忓皯浣跨敤闈?SDK 鎺ュ彛鎻愬崌绋冲畾鎬с€?/p>

涓€鑸潵璇达紝搴旂敤搴斿綋浠呬娇鐢?SDK 涓寮忚褰曠殑绫汇€?鐗瑰埆鏄紝杩欐剰鍛崇潃锛屽湪鎮ㄩ€氳繃鍙嶅皠涔嬬被鐨勮涔夋潵鎿嶄綔鏌愪釜绫绘椂锛屼笉搴旀墦绠楄闂?SDK 涓湭鍒楀嚭鐨勫嚱鏁版垨瀛楁銆?/p>

浣跨敤姝ょ被鍑芥暟鎴栧瓧娈靛緢鍙兘浼氱牬鍧忔偍鐨勫簲鐢ㄣ€?/p>

鍖哄垎 SDK 鎺ュ彛鍜岄潪 SDK 鎺ュ彛

涓€鑸潵璇达紝SDK 鎺ュ彛鏄寚鍦?Android 妗嗘灦杞欢鍖呯储寮曚腑璁板綍鐨勬帴鍙c€?瀵归潪 SDK 鎺ュ彛鐨勫鐞嗘槸 API 鎶借薄鍖栫殑瀹炵幇缁嗚妭锛涘叾浼氶殢鏃舵洿鏀癸紝鎭曚笉鍙﹁閫氱煡銆?/p>

Android 9 寮曞叆浜嗛拡瀵归潪 SDK 鎺ュ彛鐨勪娇鐢ㄩ檺鍒讹紝鏃犺鏄洿鎺ヤ娇鐢ㄨ繕鏄€氳繃鍙嶅皠鎴?JNI 闂存帴浣跨敤銆?鏃犺搴旂敤鏄紩鐢ㄩ潪 SDK 鎺ュ彛杩樻槸灏濊瘯浣跨敤鍙嶅皠鎴?JNI 鑾峰彇鍏跺彞鏌勶紝鍧囬€傜敤杩欎簺闄愬埗銆?/p>

娴嬭瘯闈?SDK 鎺ュ彛

鎮ㄥ彲浠ラ€氳繃涓嬭浇 Android 9 瀵规偍鐨勫簲鐢ㄨ繘琛屾祴璇曘€傜郴缁熷皢鎵撳嵃鏃ュ織锛屽鏋滄偍鐨勫簲鐢ㄨ闂煇浜涒€滃垪鍏ョ伆鍚嶅崟鐨勨€濋潪 SDK 鎺ュ彛锛岀郴缁熻繕鍙兘鏄剧ず toast銆?濡傛灉鎮ㄧ殑搴旂敤璋冪敤鈥滃垪鍏ラ粦鍚嶅崟鐨勨€濋潪 SDK 鎺ュ彛锛岀郴缁熷皢寮曞彂閿欒銆?/p>

娉ㄦ剰 toast锛屽畠浼氭彁閱掓偍娉ㄦ剰琚缓璁鐢ㄧ殑鎺ュ彛銆?姝ゅ锛岀‘淇濇鏌ュ簲鐢ㄧ殑鏃ュ織娑堟伅锛屽叾涓寘鍚叧浜庡簲鐢ㄦ墍璁块棶鐨勯潪 SDK 鎺ュ彛鐨勬洿澶氳缁嗕俊鎭紝鍖呮嫭浠?Android 杩愯鏃舵墍浣跨敤鐨勬牸寮忓垪鍑虹殑澹版槑绫汇€佸悕绉板拰绫诲瀷銆?鏃ュ織娑堟伅杩樿鏄庝簡璁块棶鏂规硶锛氱洿鎺ャ€侀€氳繃鍙嶅皠鎴栬€呴€氳繃 JNI銆?鏈€鍚庯紝鏃ュ織娑堟伅鏄剧ず璋冪敤鐨勯潪 SDK 鎺ュ彛灞炰簬鐏板悕鍗曡繕鏄粦鍚嶅崟銆?/p>

鎮ㄥ彲浠ヤ娇鐢?adb logcat 璁块棶杩欎簺鏃ュ織娑堟伅锛屾秷鎭皢鏄剧ず鍦ㄦ鍦ㄨ繍琛岀殑搴旂敤鐨?PID 涓嬨€?渚嬪锛屾棩蹇椾腑鐨勬潯鐩湅涓婂幓鍙兘绫讳技涓嬮潰杩欐牱锛?/p>

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

鍒楀叆鐏板悕鍗曠殑闈?SDK 鎺ュ彛鍖呭惈鍙互鍦?Android 9 涓户缁伐浣滐紝浣嗘垜浠笉鑳戒繚璇佸湪鏈潵鐗堟湰鐨勫钩鍙颁腑鑳藉缁х画璁块棶鐨勫嚱鏁板拰瀛楁銆?濡傛灉鐢变簬鏌愮鍘熷洜锛屾偍涓嶈兘瀹炵幇鍒楀叆鐏板悕鍗曠殑 API 鐨勬浛浠g瓥鐣ワ紝鍒欏彲浠ユ彁浜ら敊璇紝浠ヤ究璇锋眰閲嶆柊鑰冭檻姝ら檺鍒躲€?/p>

鏌愪簺 API 浣嶄簬鈥滈粦鍚嶅崟鈥濅腑锛屾瘮鍒楀叆鐏板悕鍗曠殑鍑芥暟鏇翠负涓ユ牸銆?鍒楀叆榛戝悕鍗曠殑鍑芥暟浼氫娇搴旂敤寮曞彂濡備繚鐣欓潪 SDK 鎺ュ彛鐨勭粨鏋滈儴鍒嗙殑琛ㄤ腑鎵€鍒楃殑寮傚父銆?/p>

Android 9 鏀寔闈?SDK 鎺ュ彛鐨?StrictMode锛堢О涓?detectNonSdkApiUsage锛夛紝鍥犳褰撴偍鐨勫簲鐢ㄨ皟鐢ㄥ垪鍏ョ伆鍚嶅崟鐨勫簲鐢ㄦ椂锛屽爢鍙犺拷韪皢鏄剧ず涓婁笅鏂囥€?/p>

淇濈暀闈?SDK 鎺ュ彛鐨勭粨鏋?/h2>

涓嬭〃璇︾粏璇存槑浜嗗悇绉嶈闂柟寮忓強鍏剁浉搴旂殑缁撴灉銆?/p>

璁块棶鏂瑰紡 缁撴灉
Dalvik 鎸囦护寮曠敤瀛楁 寮曞彂 NoSuchFieldError
Dalvik 鎸囦护寮曠敤鍑芥暟 寮曞彂 NoSuchMethodError
閫氳繃 Class.getDeclaredField() 鎴?Class.getField() 鍙嶅皠 寮曞彂 NoSuchFieldException
閫氳繃 Class.getDeclaredMethod() 鎴?Class.getMethod() 鍙嶅皠 寮曞彂 NoSuchMethodException
閫氳繃 Class.getDeclaredFields() 鎴?Class.getFields() 鍙嶅皠 缁撴灉涓湭鍑虹幇闈?SDK 鎴愬憳
閫氳繃 Class.getDeclaredMethods() 鎴?Class.getMethods() 鍙嶅皠 缁撴灉涓湭鍑虹幇闈?SDK 鎴愬憳
閫氳繃 env->GetFieldID() 璋冪敤 JNI 杩斿洖 NULL锛屽紩鍙?NoSuchFieldError
閫氳繃 env->GetMethodID() 璋冪敤 JNI 杩斿洖 NULL锛屽紩鍙?NoSuchMethodError

甯歌闂瑙g瓟

涓€鑸棶棰?/h3>

浠€涔堟槸闈?SDK 鎺ュ彛锛?/strong>

瀹冧滑鏄笉灞炰簬瀹樻柟 Android SDK 鐨?Java 瀛楁鍜屽嚱鏁般€?瀹冧滑灞炰簬瀹炵幇璇︽儏锛屽鏈夋洿鏀癸紝鎭曚笉鍙﹁閫氱煡銆?/p>

Android 9 涓湁浠€涔堝彉鍖栵紵

鎴戜滑鎵撶畻璁惧畾瀵逛娇鐢ㄩ潪 SDK 鎺ュ彛鐨勯檺鍒躲€?杩欎簺闄愬埗鐨勫舰寮忓悇涓嶇浉鍚岋紙璇峰弬闃呭浣曞湪搴旂敤杩愯鏃舵娴嬮潪 SDK 鎺ュ彛浣跨敤锛燂級锛屼絾鏄鏋滄偍浣跨敤闈?SDK 鎺ュ彛锛屽畠浠殑褰㈠紡鍙兘褰卞搷鎮ㄧ殑搴旂敤鐨勮涓恒€?/p>

濡傛灉鎴戝綋鍓嶄娇鐢ㄩ潪 SDK 鎺ュ彛锛屾垜搴斿綋鍦ㄥ摢璇锋眰锛?/strong>

璇锋彁浜ゅ姛鑳借姹傦紝骞舵彁渚涙偍鐨勭敤渚嬬殑璇︾粏淇℃伅銆?/p>

鐢ㄤ簬闄愬埗闈?SDK 鎺ュ彛鐨勪笉鍚屽悕鍗曟湁鍝簺锛屽畠浠湪闄愬埗鎬ц涓烘柟闈㈢殑瀵瑰簲鍚箟鏄粈涔堬紵

涓嬮潰鏄悕鍗曠被鍨嬶細

  • 鐧藉悕鍗曪細SDK
  • 娴呯伆鍚嶅崟锛氫粛鍙互璁块棶鐨勯潪 SDK 鍑芥暟/瀛楁銆?/li>
  • 娣辩伆鍚嶅崟锛?
    • 瀵逛簬鐩爣 SDK 浣庝簬 API 绾у埆 28 鐨勫簲鐢紝鍏佽浣跨敤娣辩伆鍚嶅崟鎺ュ彛銆?/li>
    • 瀵逛簬鐩爣 SDK 涓?API 28 鎴栨洿楂樼骇鍒殑搴旂敤锛氳涓轰笌榛戝悕鍗曠浉鍚?/li>
  • 榛戝悕鍗曪細鍙楅檺锛屾棤璁虹洰鏍?SDK 濡備綍銆?骞冲彴灏嗚〃鐜颁负浼间箮鎺ュ彛骞朵笉瀛樺湪銆?渚嬪锛屾棤璁哄簲鐢ㄤ綍鏃跺皾璇曚娇鐢ㄦ帴鍙o紝骞冲彴閮戒細寮曞彂 NoSuchMethodError/NoSuchFieldException锛屽嵆浣垮簲鐢ㄦ兂瑕佷簡瑙f煇涓壒娈婄被鍒殑瀛楁/鍑芥暟鍚嶅崟锛屽钩鍙颁篃涓嶄細鍖呭惈鎺ュ彛銆?/li>

鎴戠殑搴旂敤浣跨敤浜嗚澶氱涓夋柟搴擄紝杩欒鎴戝緢闅炬煡鎵句换浣曟鍦ㄤ娇鐢ㄧ殑涓嶅叕寮€ API銆?鏈夋病鏈夌紪璇戞椂宸ュ叿鍙互甯姪鎴戣窡韪繚瑙勶紵

鎮ㄥ彲浠ュ皾璇?AOSP 涓彁渚涚殑闈欐€佸垎鏋愬伐鍏?veridex銆?/p>

濡備綍鍦ㄥ簲鐢ㄨ繍琛屾椂妫€娴嬮潪 SDK 鎺ュ彛浣跨敤锛?/strong>

灏嗘墦鍗颁竴鏉?Accessing hidden field|method ... 褰㈠紡鐨?logcat 璀﹀憡銆?姝ゅ锛屽皢涓哄彲璋冭瘯搴旂敤鏄剧ず toast 娑堟伅锛屽苟涓洪伃鍒版嫆缁濈殑浠讳綍闈?SDK 鎺ュ彛鎵撳嵃 logcat 娑堟伅銆?/p>

Google 濡備綍纭繚閫氳繃 Issue Tracker 鎹曡幏鎵€鏈夊簲鐢ㄧ殑闇€姹傦紵

鎴戜滑鏈€鍒濋€氳繃瀵瑰簲鐢ㄨ繘琛岄潤鎬佸垎鏋愮‘瀹氫簡绉嶅瓙鍚嶅崟锛屽苟杈呬互涓嬪垪鎺柦锛?/p>

  • 瀵圭儹闂?Play 鍜岄潪 Play 搴旂敤杩涜鎵嬪姩娴嬭瘯
  • 鍐呴儴鎶ュ憡
  • 鑷姩浠庡唴閮ㄧ敤鎴锋敹闆嗘暟鎹?/li>
  • 寮€鍙戣€呴瑙堢増鎶ュ憡
  • 鍏朵粬鏃ㄥ湪璋ㄦ厧鍦板寘鍚洿澶氳鎶ョ殑闈欐€佸垎鏋?/li>

濡備綍鍚敤瀵归潪 SDK API 鐨勮闂紵

鍙互浣跨敤 adb 鍦ㄥ紑鍙戣澶囦笂鍚敤瀵归潪 SDK API 鐨勮闂€?/p>

濡傛灉鎮ㄦ兂瑕佸湪 adb logcat 杈撳嚭涓煡鐪?API 璁块棶淇℃伅锛屽垯鍙互鏇存敼 API 寮哄埗鏀跨瓥锛?/p>

聽 adb shell settings put global hidden_api_policy_pre_p_apps 聽1
聽 adb shell settings put global hidden_api_policy_p_apps 1

瑕佸皢鍏堕噸缃负榛樿璁剧疆锛岃鎵ц浠ヤ笅鎿嶄綔锛?/p>

聽 adb shell settings delete global hidden_api_policy_pre_p_apps
聽 adb shell settings delete global hidden_api_policy_p_apps

杩欎簺鍛戒护涓嶈姹傚凡鍙栧緱 root 鏉冮檺鐨勮澶囥€?/p>

缁欏畾鏁存暟鐨勫惈涔夊涓嬫墍绀猴細

  • 0锛氬仠鐢ㄩ潪 SDK API 浣跨敤妫€娴嬨€?杩欒繕浼氬仠鐢ㄦ棩蹇楄褰曪紝骞朵笖涔熶細鐮村潖涓ユ牸妯″紡 API detectNonSdkApiUsage()銆?涓嶅缓璁娇鐢ㄦ鍊笺€?/li>
  • 1锛氣€滃彧鏄鍛娾€? 鍏佽璁块棶鎵€鏈夐潪 SDK API锛屼絾浼氬湪鏃ュ織涓繚鐣欒鍛娿€?涓ユ牸妯″紡 API 灏嗙户缁伐浣溿€?/li>
  • 2锛氫笉鍏佽浣跨敤鍒楀叆娣辩伆鍚嶅崟鍜岄粦鍚嶅崟鐨?API銆?/li>
  • 3锛氫笉鍏佽浣跨敤鍒楀叆榛戝悕鍗曠殑 API锛屼絾鍏佽浣跨敤鍒楀叆娣辩伆鍚嶅崟鐨?API銆?/li>

鍏充簬 API 鍚嶅崟

Android 9 鐗堟湰鏋勫缓涓殑娣辩伆鍚嶅崟鍖呭惈浠€涔堬紵

娣辩伆鍚嶅崟鍖呭惈鎴戜滑鍦ㄥ紑鍙戞湡闂存湭鐪嬪埌浣跨敤锛屼絾鏄垜浠彲鑳藉凡缁忓拷瑙嗙殑鍑芥暟/瀛楁銆?鍒楀叆娣辩伆鍚嶅崟鐨勫嚱鏁?瀛楁鏄偅浜涗笌 SDK 鍜屾祬鐏板悕鍗曚腑鐨勫叕寮€鎺ュ彛绱у瘑鐩稿叧鐨勫嚱鏁?瀛楁銆?/p>

鐏板悕鍗?榛戝悕鍗曚綅浜庝粈涔堝湴鏂癸紵

瀹冧滑浣滀负骞冲彴鐨勪竴閮ㄥ垎鏋勫缓銆?鎮ㄥ彲浠ュ湪姝ゅ鎵惧埌棰勬瀯寤烘潯鐩細

  • platform/prebuilts/runtime/appcompat/hiddenapi-light-greylist.txt锛氭祬鐏?API 鐨?AOSP 鍚嶅崟
  • platform/prebuilts/runtime/appcompat/hiddenapi-dark-greylist.txt锛氭繁鐏?API 鐨?AOSP 鍚嶅崟

姝ゅ锛屾鍚嶅崟杩樺寘鍚祬鐏?API 鐨?SDK 28 鍚嶅崟銆?/p>

榛戝悕鍗曞拰娣辩伆鍚嶅崟鍦ㄦ瀯寤烘椂琛嶇敓鑰屾潵銆?鎴戜滑宸叉坊鍔犱簡涓€涓彲浠ュ湪 AOSP 涓婄敓鎴愬悕鍗曠殑鏋勫缓瑙勫垯銆?瀹冧笌 P 涓殑榛戝悕鍗曚笉鍚岋紝浣嗘槸閲嶅彔姣旇緝鍚堢悊銆?寮€鍙戣€呭彲浠ヤ笅杞?AOSP锛岀劧鍚庝娇鐢ㄤ互涓嬪懡浠ょ敓鎴愰粦鍚嶅崟锛?/p>

聽 make hiddenapi-aosp-blacklist

鐒跺悗锛屽彲浠ュ湪浠ヤ笅浣嶇疆鎵惧埌鏂囦欢锛?/p>

聽 out/target/common/obj/PACKAGING/hiddenapi-aosp-blacklist.txt

杩欎簺鍚嶅崟鐨勯€傚綋澶у皬鏄灏戯紵

鍚嶅崟澶у皬鐨勮繎浼煎€煎涓嬫墍绀猴細

  • 鐧藉悕鍗曪紙涔熺О涓?SDK锛墌= 74,000 涓嚱鏁板拰瀛楁
  • 娴呯伆鍚嶅崟 ~= 11,000 涓嚱鏁板拰瀛楁
  • 娣辩伆鍚嶅崟 ~= 121,000 涓嚱鏁板拰瀛楁
  • 榛戝悕鍗?~= 9,000 涓嚱鏁板拰瀛楁

鎴戝彲浠ュ湪绯荤粺闀滃儚涓殑浠€涔堝湴鏂规壘鍒伴粦鍚嶅崟/鐏板悕鍗曪紵

瀹冧滑缂栫爜鍦ㄥ钩鍙?dex 鏂囦欢鐨勫瓧娈靛拰鍑芥暟璁块棶鏍囧織浣嶄腑銆?绯荤粺闀滃儚涓病鏈夊崟鐙殑鏂囦欢鍖呭惈杩欎簺鍚嶅崟銆?/p>

榛戝悕鍗?鐏板悕鍗曞湪閲囩敤鐩稿悓 Android 鐗堟湰鐨勫師濮嬭澶囧埗閫犲晢璁惧涓婃槸鍚︾浉鍚岋紵

鐩稿悓锛屽師濮嬭澶囧埗閫犲晢鍙互鍚戦粦鍚嶅崟涓坊鍔犺嚜宸辩殑 API锛屼絾鏃犳硶浠庡師濮嬬殑/AOSP 榛戝悕鍗曟垨鐏板悕鍗曚腑绉婚櫎鏉$洰銆?CDD 鍙互闃叉姝ょ被鍙樺寲锛孋TS (Compatibility Test Suite) 娴嬭瘯鍙互纭繚 Android 杩愯鏃跺己鍒舵墽琛屽悕鍗曘€?/p>