gradle配置項
- compileSdkVersion
用哪個 Android SDK 版本編譯你的應用,因此我們強烈推薦總是使用最新的 SDK 進行編譯,在現有代碼上使用新的編譯檢查可以獲得很多好處,避免新棄用的 API ,并且為使用新的 API 做好準備, - minSdkVersion
是應用可以運行的最低要求,也是各大Android應用商店用來判斷用戶設備是否可以安裝某個應用的標志之一 - targetSdkVersion
targetSdkVersion 是 Android 提供向前兼容的主要依據
| targetSdkVersion | < | 平臺的API級別 | 向前兼容舉個栗子:targetSdkVersion==23(6.0),當前設備Android版本7.0,運行程式時用6.0那一套介面,介面:API介面 |
|---|---|---|---|
| targetSdkVersion | = | 平臺的API級別 | 不啟用兼容性 |
| targetSdkVersion | > | 平臺的API級別 | 舉個栗子:targetSdkVersion==23(6.0),當前設備Android版本是 5.0 ,運行程式 用的是5.0那套介面,設備根本到不了6.0 |
是不是意味著targetSdkVersion越低越好?
- 使用低版本API的其中一個不足,顯示的效果比較OUT,提供的可用的介面或類比較少
- 高版本API會針對低版本存在的問題進行改進和完善,擯棄一下不用的類或介面,新增一些方法或屬性,如果你使用的方法是在某個API被另一個方法代替的話,你可能就得在代碼中區分APP是運行在哪個版本的Android系統
- 應用平臺對targetSdkVersion有要求
minSdkVersion <= targetSdkVersion <= compileSdkVersion
andorid 5.0 新特性
- Material Design
- 支持64位ART虛擬機,
- Overview 多任務視窗,
- RecyclerView
- 卡片CardView
- Palette是一個可以從圖片(Bitmap)中提取顏色的幫助類,可以使UI更加美觀,根據圖片動態的顯示相應的顏色
android 5.0適配
-
啟動服務,不支持隱式呼叫的問題
解決方案- 使用action呼叫,必須指定包名啟動(判斷當前當前系統版本)
- ComponentName 傳入包名和類名,必須是完整類名路徑,
-
android5.0 getRunningTasks 和getRunningAppProcesses(僅回傳當前應用包名)失效
解決方案- 第一種辦法,用 UsageStatsManager,需要權限,且只針對系統應用有效,而且要打開設定頁面,
- 第二種,不需要權限,外國的一個開源專案:https://github.com/jaredrummler/AndroidProcesses(Android7.0后不生效)
-
backgroundTint屬性只能在5.0以上的api中呼叫
解決方案- 我們可以新建一個values-v21檔案夾,這個里面宣告的屬性會在api21以上的機器上優先于values檔案夾中執行
-
Android API 21(5.0)引入了一個Drawable的子類VectorDrawable
解決方案(https://www.jianshu.com/p/0972a0d290e9)-
minSdkVersion<21:如果想要渲染矢量圖的話必須在app模塊的build.gralde檔案里添加一行代碼:
defaultConfig { vectorDrawables.useSupportLibrary = true } -
在Application或者Activity上加上AppCompateDelegate開啟CompatVectorFromResources支持
-
Button,TextView,應用矢量圖,保險的是先把矢量圖轉為selector,然后selector代替矢量圖使用
-
-
Android5.0上 WebView中Http和Https混合問題
解決方案if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } -
WebView cookie 存盤問題
public static void syncCookie(String url, String key) { CookieManager cookieManager = CookieManager.getInstance(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.removeSessionCookies(null); cookieManager.flush(); } else { cookieManager.removeSessionCookie(); CookieSyncManager.getInstance().sync(); } cookieManager.setAcceptCookie(true); cookieManager.setCookie(url, key); } -
JobScheduler和JobService是安卓在api 21中增加的介面(保活),功能更強的鬧鐘
Android 6.0 適配及新特性
-
運行時權限,請務必在運行時檢查和請求權限
-
Normal Premission:普通權限
-
Dangerous Permission/Group: 危險權限/組
android.permission.READ_CALENDAR允許程式讀取用戶日歷資料
android.permission.WRITE_CALENDAR允許一個程式寫入但不讀取用戶日歷資料
android.permission.CAMERA,允許訪問攝像頭進行拍照
android.permission.READ_CONTACTS允許程式讀取用戶聯系人資料
android.permission.WRITE_CONTACTS允許程式寫入但不讀取用戶聯系人資料
android.permission.GET_ACCOUNTS訪問一個帳戶串列在Accounts Service中
android.permission.ACCESS_FINE_LOCATION允許一個程式訪問精良位置(如GPS)
android.permission.ACCESS_COARSE_LOCATION允許一個程式訪問CellID或WiFi熱點來獲取粗略的位置
android.permission.RECORD_AUDIO允許程式錄制音頻
android.permission.CALL_PHONE允許一個程式初始化一個電話撥號不需通過撥號用戶界面需要用戶確認
android.permission.READ_PHONE_STATE 訪問電話狀態
android.permission.READ_CALL_LOG 查看電話日志
android.permission.WRITE_CALL_LOG寫入電話日志
android.permission.ADD_VOICEMAIL 允許應用程式添加系統中的語音郵件
android.permission.USE_SIP 允許程式使用SIP視頻服務
android.permission.PROCESS_OUTGOING_CALLS 允許應用程式監視、修改、忽略撥出的電話
android.permission.BODY_SENSORS 允許該應用存取監測您身體狀況的傳感器所收集的資料,例如您的心率
android.permission.SEND_SMS允許程式發送SMS短信
android.permission.RECEIVE_SMS允許程式監控一個將收到短資訊,記錄或處理
android.permission.READ_SMS允許程式讀取短資訊
android.permission.RECEIVE_WAP_PUSH允許程式監控將收到WAP PUSH資訊
android.permission.RECEIVE_MMS允許一個程式監控將收到MMS彩信,記錄或處理
android.permission.WRITE_EXTERNAL_STORAGE 允許程式寫入外部存盤,如SD卡上寫檔案
android.permission.READ_EXTERNAL_STORAGE 訪問您設備上的照片、媒體內容和檔案
-
-
取消支持 Apache HTTP
解決方案:
android {
useLibrary 'org.apache.http.legacy'
} -
BoringSSL
請勿鏈接到并非 NDK API 組成部分的加密庫,如 libcrypto.so 和 libssl.so -
硬體識別符號訪問權
- WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法現在會回傳常量值 02:00:00:00:00:00,
- 現在想訪問硬體標識,如:WiFi和藍牙,必須要有 ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION權限
WifiManager.getScanResults()
BluetoothDevice.ACTION_FOUND
BluetoothLeScanner.startScan()
-
AudioManager類 不再支持直接設定音量或將特定音頻流靜音
- setStreamSolo() 方法已棄用,您應該改為呼叫 requestAudioFocus() 方法,
- setStreamMute() 方法也已棄用,請改為呼叫 adjustStreamVolume() 方法并傳入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE
-
相機服務變更
- 相機服務中共享資源的訪問模式已從之前的“先到先得”訪問模式更改為高優先級行程優先的訪問模式
-
dlopen failed: "has text relocations"
- 解決方案一:將targetSdkVersion 修改為<23
- 解決方案二: https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide 通過scanelf / objdump定位存在TEXTREL問題的檔案, 以及關鍵代碼在檔案中的偏移量, 然后根據偏移量對應的特征 (函式名 / hard code的絕對地址等), 定位到代碼所在.
- 在mk腳本中, 對LOCAL_CFLAGS, 增加-fPIC引數
-
電源管理
在原有的電源管理的基礎上加入了兩種新的狀態:- App Standby—應用待機狀態
- Doze 系統休眠狀態
-
規范化App Link (應用程式鏈接)
-
指紋識別(統一API)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/41484.html
標籤:Android
