安卓7.0再增加新功能的同時,改變了很多地方,官方的指南有
Android 7.0 行為變更
本文將大概描述其中涉及的幾個變更臼隔,也是筆者近日在適配Android時碰到的問題,具體到每個變更的差異百宇,恕不在此詳述
在應(yīng)用間共享文件
對于面向 Android 7.0 的應(yīng)用洛史,Android 框架執(zhí)行的 StrictMode
API 政策禁止在您的應(yīng)用外部公開 file://
URI。如果一項包含文件 URI 的 intent 離開您的應(yīng)用骤肛,則應(yīng)用出現(xiàn)故障纳本,并出現(xiàn) FileUriExposedException異常。
要在應(yīng)用間共享文件腋颠,您應(yīng)發(fā)送一項 content:// URI繁成,并授予 URI 臨時訪問權(quán)限。進行此授權(quán)的最簡單方式是使用 FileProvider 類淑玫。如需了解有關(guān)權(quán)限和共享文件的詳細信息巾腕,請參閱共享文件。
(來自 Android 7.0 行為變更)
常見的出錯例子有:
File file = new File("/storage/emulated/0/test.txt");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent); // Crashes on this line
代碼中通過Intent傳遞一個file://開頭的Uri給照片瀏覽程序絮蒿,在7.0上 啟動intent的時候崩潰了尊搬,
報錯如下
android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()
原因即在于獲取Uri的時候 使用了 Uri.fromFile(file) 而不是 FileProvider.getUriForFile()
具體解決方案見 StackOverflow
簡而言之 ,安卓7.0增加了對應(yīng)用間共享文件的管控土涝,對于共享文件的訪問必須通過ContentProvider
其他重要說明
- ................
- 名為 Crypto 的 JCA 提供程序已棄用佛寿,因為它僅有的 SHA1PRNG 算法為弱加密。應(yīng)用無法再使用 SHA1PRNG(不安全地)派生密鑰但壮,因為不再提供此提供程序冀泻。如需了解詳細信息,請參閱博文 Android N 中已棄用“Crypto”安全提供程序蜡饵。
- ................
但是并不止如此弹渔,安卓官方所提到的行為變更,在此看來似乎只是新的特性以及新的規(guī)定验残,要知捞附,Google在安卓7.0之后逐漸修改了JDK的版本巾乳,有
在 N 中 Google 采用 OpenJDK 8 作為 Java 的實現(xiàn)您没,在 Java 實現(xiàn)上的一些差別可能導致應(yīng)用出問題.