Android for Work
Android N 包含一些針對面向 Android for Work 的應用的變更,包括對證書安裝、密碼重置、二級用戶管理、設備標識符訪問權限的變更。如果您是要針對 Android for Work 環(huán)境開發(fā)應用,則應仔細檢查這些變更并相應地修改您的應用。
您必須先安裝授權證書安裝程序,然后 DPC 才能對其進行設置。 對于面向 N SDK 的個人資料和設備所有者應用,您應在設備策略控制器 (DPC) 調用DevicePolicyManager.setCertInstallerPackage()之前安裝授權證書安裝程序。 如果尚未安裝此安裝程序,則系統會引發(fā)IllegalArgumentException。
針對設備管理員的重置密碼限制現在也適用于個人資料所有者。 設備管理員無法再使用DevicePolicyManager.resetPassword()來清除或更改已經設置的密碼。 設備管理員仍可以設置密碼,但只能在設備沒有密碼、PIN 或圖案時這樣做。
即使設置了限制,設備所有者和個人資料所有者仍可以管理帳戶。而且,即使具有DISALLOW_MODIFY_ACCOUNTS用戶限制,設備所有者和個人資料所有者仍可調用 Account Management API。
設備所有者可以更輕松地管理二級用戶。當設備在設備所有者模式下運行時,系統將自動設置DISALLOW_ADD_USER限制。 這樣可以防止用戶創(chuàng)建非托管二級用戶。 此外,CreateUser()和createAndInitializeUser()方法已棄用,取而代之的是DevicePolicyManager.createAndManageUser()方法。
設備所有者可以訪問設備標識符。設備所有者可以使用DevicePolicyManagewr.getWifiMacAddress()訪問設備的 Wi-Fi MAC 地址。 如果設備上從未啟用 Wi-Fi,則此方法將返回一個null值。
工作模式設置控制工作應用訪問。當工作模式關閉時,系統啟動器通過使工作應用顯示為灰色來指示它們不可用。 啟用工作模式會再次恢復正常行為。
如需了解有關 Android N 中針對 Android for Work 所做變更的詳細信息,,請參閱https://developers.google.com/android/work/overview
注解保留
Android N 在注解可見性被忽略時修復錯誤。這種問題將啟用本不應被允許的運行時訪問注解。 這些注解包括:
VISIBILITY_BUILD:僅應編譯時可見。
VISIBILITY_SYSTEM:運行時應可見,但僅限基本系統。
如果您的應用依賴這種行為,請在注解中添加一項運行時必須可用的保留政策。 您可通過使用@Retention(RetentionPolicy.RUNTIME)來如此做。
其他重要說明
如果一個應用在 Android N 上運行,但卻是針對更低 API 級別開發(fā)的,那么在用戶更改顯示尺寸時,系統將終止此應用進程。 應用必須能夠正常處理此情景。 否則,當用戶從最近使用記錄中恢復運行應用時,應用將會出現崩潰現象。
您應測試應用以確保不會發(fā)生此行為。要進行此測試,您可以通過 DDMS 手動終止應用,以造成相同的崩潰現象。
在密度發(fā)生更改時,系統不會自動終止面向 N 及更高版本的應用;不過,這些應用仍可能對配置變更做出不良響應。
Android N 上的應用應能夠正常處理配置變更,并且在后續(xù)啟動時不會出現崩潰現象。您可以通過更改字體大小 (Setting>Display>Font size) 并隨后從最近使用記錄中恢復運行應用,來驗證應用行為。
由于之前的 Android 版本中的一項錯誤,系統未能將對主線程上的一個 TCP 套接字的寫入操作舉報為嚴格模式違反。 Android N 修復了此錯誤。呈現出這種行為的應用引發(fā)android.os.NetworkOnMainThreadException。一般情況下,我們不建議在主線程上執(zhí)行網絡操作,因為這些操作通常都有可能導致 ANR 和卡頓的高尾延遲。
Debug.startMethodTracing()方法族現在默認在您的共享的存儲空間上的軟件包特定目錄中存儲輸出,而非 SD 卡頂級。 這意味著應用不再需要請求WRITE_EXTERNAL_STORAGE使用這些 API 的權限。
許多平臺 API 現在開始檢查在Binder事務間發(fā)送的大負載,系統現在會將TransactionTooLargeExceptions再次作為RuntimeExceptions引發(fā),而不再只是默默記錄或抑制它們。 一個常見例子是在Activity.onSaveInstanceState()上存儲過多數據,導致ActivityThread.StopInfo在您的應用面向 Android N 時引發(fā)RuntimeException。
如果應用向View發(fā)布Runnable任務,并且View未附加到窗口,系統會用View為Runnable任務排隊;在View附加到窗口之前,Runnable任務不會執(zhí)行。 此行為會修復以下錯誤:
如果一項應用是從并非預期窗口 UI 線程的其他線程發(fā)布到View,則Runnable可能會因此運行錯誤的線程。
如果Runnable任務是從并非環(huán)路線程的其他線程發(fā)布,則應用可能會曝光Runnable任務。
如果 Android N 上一項有DELETE_PACKAGES權限的應用嘗試刪除一個軟件包,但另一項應用已經安裝了這個軟件包,則系統可能要求用戶確認。 在這種情況下,應用在調用PackageInstaller.uninstall()時的返回狀態(tài)應為STATUS_PENDING_USER_ACTION。