AndroidQ適配

參考:1、https://developer.huawei.com/consumer/cn/doc/50127

2、https://mp.weixin.qq.com/s?__biz=MzIxNjc0ODExMA==&mid=2247486384&idx=1&sn=96cc31ac17d17f988d3b8d101a7a5578&scene=21#wechat_redirect

1、必需支持64位

armeabi-v7a--->arm64-v8a
x86--->x86_64

2、TargetSDKVersion要求

targetSdkVersion>=28

升級sdk版本后需要適配的變化:
1、非SDK接口的管理
2、內聯方法不允許跨dex
This must be due to duplicate classes or playing wrongly with class loaders;
避免使用不同的classloader加載相互調用的類
避免內聯
3、ApacheHttp客戶端棄用
如果要使用,Androidmanifest中加上這句話
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
4、前臺服務,必須請求FOREGROUND_SERVICE權限
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

其它補充
  • android6.0增加了運行時權限
  • android7.0文件共享需要FileProvider

3、并發錄音

p版本錄音焦點不可搶占,q錄音焦點可搶占
可能導致錄音焦點被搶占,錄音為空

4、非SDK接口的影響

非SDK接口變動頻繁,帶來兼容性問題
灰:targetSDK>=28,警告
淺灰:targetSDK>=28,不允許
深灰:targetSDK>=29,不允許
黑:所有不允許
名單類型在變化,Q中黑名單有增加有刪除
使用veridex工具查找應用中非sdk接口

5、文件存儲

  • 存儲空間的變化
    Q中每個應用外部存儲有一個沙箱
    有個共享集合目錄,應用卸載后不會刪除
    應用讀取自己沙箱以及共享目錄中自己文件,不需要申請權限
    應用讀取共享目錄中其它應用文件,需要分別申請權限:READ_MEDIA_IMAGES、READ_MEDIA_AUDIO和READ_MEDIA_VIDEO
    應用讀取共享目錄其它應用生成的文件,需要通過MediaProvider來讀,沒有寫權限
    應用讀取共享目錄其它應用下載文件,需要SAF方式讀取,存儲訪問框架,android5.0。ContentProfider方式

  • 文件共享適配
    1、AndroidManifest文件中指定應用的FileProvider
    2、指定共享的路徑xml文件
    3、根據權限獲取文件的ContentUri
    4、授權臨時讀寫權限intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    5、通過Intent打開文件,選擇要分享的應用。
    接收文件
    1、AndroidManifest增加intent過濾
    2、接收Intent數據,得到圖片FileDescripter,讀取圖片

  • 權限適配
    1、uses-permission聲明新老權限
    2、代碼中根據apiLevel來區分,申請不同的權限

private void requestPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
       <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
        <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
        <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
    } else {
        // request old storage permission
    }
}

  • 多媒體文件和下載文件讀取
    1、讀取接口
    MediaStore.Images
    MediaStore.Video
    MediaStore.Audio
    MediaStore.Downloads
    2、通過ContentProvider查詢Uri
    3、根據Uri獲取Bitmap等
    MediaProvider中的“_data”字段已經廢棄掉,無法通過它讀取文件路徑
  • 多媒體文件的保存
    1、應用保存到沙箱外,此方法只能插入圖片
    MediaStore.Images.Media.insertImage
    MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, title, discription);
    2、通過ContentResolver的insert方法將多媒體文件保存到多媒體的公共集合目錄
    3、PRIMARY_DIRECTORYSECONDARY_DIRECTORY字段來設置一級目錄和二級目錄,不設置時,使用默認一級和二級目錄
    4、應用對其它應用的文件沒有寫權限,只有讀權限
  • 修改其它應用的文件
    1、使自己應用作為系統應用
    2、ContentResolver修改,捕獲異常后請求用戶授權
  • 讀取和修改所有文件
    1、通過Intent傳入ACTION_OPEN_DOCUMENT拉起DocumentUI,
    在OnActivityResult中獲取選擇的文件URI
    2、用戶對文件的訪問授權,設備重啟后失效,可以本地保存,
  • 沙箱目錄中的文件刪除
    1、把不希望刪除的文件通過MediaProvider或者SAF的接口保存在公共集合目錄下面
    2、在應用的AndroidManifest.xml文件增加:<application android:hasFragileUserData="true" />會提示用戶是否刪除

6、隱私與安全

  • 獲取設備識別碼,IMEI或者序列號等,需要READ_PRIVILEGED_PHONE_STATE權限,并且只有系統應用才能申請,第三方應用不同申請
    targetSDK>=Q,獲取DeviceId會拋出異常
    可以使用AndroidID替換DeviceId
    Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    手機恢復出廠設置,androdID重置,而deviceId不會重置
    應用密鑰,用戶,設備,三者確定androidId,不同用戶,不同androidID
  • mac地址隨機,連接不同wifi,不同mac地址
  • 禁止后臺啟動Activity
    鬧鐘鎖屏應用會有影響,建議改成全屏通知的樣式
  • 地理位置權限
    Q之前只有ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION
    此兩種只有前臺時可以使用,Q增加ACCESS_BACKGROUND_LOCATION權限,可以后臺使用定位
    如果應用只前臺授權,從后臺進入前臺定位服務時,需要設置
<service
    android:name="MyNavigationService"
    android:foregroundServiceType="location" ... >
    ...
</service>
  • 應用安裝
    Q版本禁止應用通過file:// URI拉起系統安裝器進行應用安裝
    1、需要申請android.permission.REQUEST_INSTALL_PACKAGES權限。
    2、通過FileProvider安裝
Uri installUri = FileProvider.getUriForFile(getApplicationContext(), "com.huawei.qappcompatissues.fileprovider", apkFile);
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE).setData(installUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
  • 訪問相機信息需要權限
    getCameraCharacteristics()如果沒有相機權限,有些字段訪問可能獲取到空值
  • wifi開關
    在Android Q上運行的應用無法通過WifiManager.setWifiEnabled()接口啟用或停用Wi-Fi,可以提供面板,讓用戶跳轉到系統設置界面
  • 電話,wifi,藍牙信息需要位置權限
    具有ACCESS_FINE_LOCATION才可以
  • wifi網絡列表手動配置被限制
    getConfiguredNetworks()方法始終返回一個空列表
  • 系統輸入法,或者當前焦點程序才能獲取系統剪切版
  • MediaStore
    系統的一個多媒體數據庫,通過ContentResolver來操作。
    MediaStore.Fils,MediaStore.Image,MediaStore.Video,MediaStore.Audio.每個類中都有Media,Thumnails,MediaColums
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378