成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android 12 已來,你的 App 崩潰了嗎?

移動開發 Android
Android 12 已來,你的 App 崩潰了嗎?我們已經開始做 Android 12 的適配了,在 Android 12 中包含了很多的功能和一些行為的變更,接下來我們一起來分析這些行為的變更對我們的應用產生了那些影響。

Android 12 已來,你的 App 崩潰了嗎?我們已經開始做 Android 12 的適配了,在 Android 12 中包含了很多的功能和一些行為的變更,接下來我們一起來分析這些行為的變更對我們的應用產生了那些影響。

通過這篇文章你將學習到以下內容:

  • 為什么在 Android 12 上需要顯示聲明 android:exported 屬性?
  • 為什么在 Android 12 上需要顯示指定 PendingIntent 的可變性?
  • 為什么在 Android 12 上限制 adb 備份的默認行為?
  • 如何檢查 App 的安全漏洞?

android:exported 屬性

在 Android 12 中包含 的 activity 、 service 或 receiver必須為這些應用組件顯示聲明 android:exported 屬性,如下所示。

 

 

  1. <activity 
  2.     android:name=".TestActivity" 
  3.     android:exported="false"
  4.     <intent-filter> 
  5.         ...... 
  6.     </intent-filter> 
  7. </activity> 

如果在包含 的 activity 、 service 或 receiver 組件中,沒有顯示聲明 android:exported 的值,你的應用將無法安裝,錯誤日志如下所示。

 

  1. Installation did not succeed. 
  2. The application could not be installed: INSTALL_FAILED_VERIFICATION_FAILURE 
  3. List of apks: 
  4. [0] '.../build/outputs/apk/debug/app-debug.apk' 
  5. Installation failed due to'null' 

如果您的應用在需要聲明 android:exported 的值時未進行此聲明,錯誤日志如下所示。

 

  1. Targeting S+ (version 10000 and above) requires that an explicit value for \ 
  2. android:exported be defined when intent filters are present 

如果對上面的異常產生的條件,不是很理解,可以點擊下方鏈接查看,目前已經有很多開源項目都已經開始適配這個行為的變更了,例如 leakcanary 等等。

這個行為的變更無論是對庫開發者 和 還是應用開發者影響都非常大。

為什么在 Android 12 上需要顯示聲明 android:exported 屬性

android:exported 屬性的默認值取決于是否包含 ,如果包含 那么默認值為 true,否則 false。

  • 當 android:exported="true" 時,如果不做任何處理,可以接受來自其他 App 的訪問
  • 當 android:exported="false" 時,限制為只接受來自同一個 App 或一個具有相同 user ID 的 App 的訪問

正因為 android:exported 的屬性的默認值的問題,Twicca App 發生過一次安全性問題,因為另一個沒有訪問 SD 卡或網絡權限的 App,可以通過 Twicca App 將存儲在 SD 卡上的圖片或電影上傳到 Twicca 用戶的 Twitter 賬戶上的社交網絡上。

產生問題的代碼如下所示:

  1. <activity android:configChanges="keyboard|keyboardHidden|orientation" android:name=".media.yfrog.YfrogUploadDialog" android:theme="@style/Vulnerable.Dialog" android:windowSoftInputMode="stateAlwaysHidden">            
  2.     <intent-filter android:icon="@drawable/yfrog_icon" android:label="@string/YFROG"
  3.         <action android:name="jp.co.vulnerable.ACTION_UPLOAD" />                 
  4.         <category android:name="android.intent.category.DEFAULT" />                 
  5.         <data android:mimeType="image/*" />                 
  6.         <data android:mimeType="video/*" />             
  7.     </intent-filter>         
  8. </activity> 

因為添加了 intent-filter 所以 android:exported 的屬性的默認值為 true,因此可以接受來自其他 App 的訪問,進而造成了上述問題(通過 Twicca App 將存儲在 SD 卡上的圖片或電影上傳到 Twicca 用戶的 Twitter 賬戶上的社交網絡上),而解決方案有兩個:

方案一:添加 android:exported="false" 屬性

  1. <activity android:exported="false" android:configChanges="keyboard|keyboardHidden|orientation" android:name=".media.yfrog.YfrogUploadDialog" android:theme="@style/ VulnerableTheme.Dialog" android:windowSoftInputMode="stateAlwaysHidden" >     
  2. </activity> 

方案二:Twicca App 沒有使用方式一,而是檢查調用者的包名是否與自身的包名相同

 

  1. public void onCreate(Bundle arg5) { 
  2.     super.onCreate(arg5); 
  3.     ... 
  4.     ComponentName v0 = this.getCallingActivity(); 
  5.     if(v0 == null) { 
  6.         this.finish(); 
  7.     } else if(!jp.r246.twicca.equals(v0.getPackageName())) { 
  8.         this.finish(); 
  9.         } else { 
  10.             this.a = this.getIntent().getData(); 
  11.             if(this.a == null) { 
  12.                 this.finish(); 
  13.             } 
  14.             ... 
  15.         } 
  16.     } 

這種方案也是可行的,因為在一臺設備上,不可能會出現兩個包名相同的應用。

這僅僅是關于 activity 的安全漏洞的其中一個,在不同的場景下利用這些漏洞做的事情也可能不一樣。當然還有 service 和 receiver 組件也都是一樣,存在安全性問題。

指定 PendingIntent 的可變性

在 Android 12 中創建 PendingIntent 的時候,需要顯示的聲明是否可變,請分別使用 PendingIntent.FLAG_MUTABLE 或 PendingIntent.FLAG_IMMUTABLE 標志,如果您的應用試圖在不設置任何可變標志的情況下創建 PendingIntent 對象,系統會拋出 IllegalArgumentException 異常,錯誤日志如下所示。

 

  1. PACKAGE_NAME: Targeting S+ (version 10000 and above) requires that one of \ 
  2. FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 
  3.  
  4. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if \ 
  5. some functionality depends on the PendingIntent being mutable, e.g. if \ 
  6. it needs to be used with inline replies or bubbles. 

為什么在 Android 12 上需要顯示的指定 PendingIntent 的可變性

在 Adnroid 12 之前,默認創建一個 PendingIntent 它是可變的,因此其他惡意應用程序可能會攔截,重定向或修改此 Intent。(但是是有條件限制的)

一個 PendingIntent 是一個可以給另一個應用程序使用的 Intent,PendingIntent 接收待處理意圖的應用程序可以使用與產生待處理意圖的應用程序相同的權限和身份執行待處理意圖中指定的操作。

因此,創建待處理意圖時必須小心,為了安全性 Google 在 Android 12 中需要開發者自己來指定 PendingIntent 的可變性。

adb 備份限制

Android 開發者都應該知道這個命令 adb backup , 它可以備份應用的數據,在 Android 12 中,為了保護私有應用數據,用戶運行 adb backup 命令時,從設備導出的任何其他系統數據都不包含應用數據。

如果你在測試和開發過程中需要使用 adb backup 來備份應用數據,你可以在 AndroidManifest 中將 android:debuggable 設置為 true 來導出應用數據。

 

 

  1. <application 
  2.     android:name=".App" 
  3.     android:debuggable="true" 
  4.     ....../> 

注意:在發布應用前將 android:debuggable 設置為 false。

為什么在 Android 12 上限制了 adb backup 命令的默認行為

因為這個存在嚴重的安全問題,當初 Google 為了提供 App 數據備份和恢復功能,可以在 AndroidManifest 中添加 android:allowBackup 屬性,默認值為 true, 當你創建一個應用的時候,會默認添加這個屬性,如下所示。

 

 

  1. <application 
  2.     android:name=".App" 
  3.     android:allowBackup="true" 
  4.     ....../> 

當 android:allowBackup="true" 時,用戶可以通過 adb backup 和 adb restore命令對應用數據進行備份和恢復,也就是說可以在其他的 Android 手機上安裝同一個應用,通過如上命令恢復用戶的數據。

為了安全起見,我們在發布出去的 Apk 中一定要將 android:allowBackup 屬性設置為 false 來關閉應用程序的備份和恢復功能,以免造成信息泄露。國民級應用 XX 信, 在曾今發出的版本中 allowBackup 的屬性值是 true,被其他逆向開發者利用之后,現在的版本中這個值已經修改為 false了,有興趣的小伙們可以反編譯看看。

如何檢查 App 的安全漏洞

在這里推薦一個開源項目 linkedin/qark 這是由 LinkedIn 開源的項目,這個工具被設計用來尋找與安全相關的 Android 應用程序漏洞,無論是源代碼還是打包的 APK,具體的用法文檔上寫的非常的清楚了,這里不做詳細的介紹了。

當然也有很多公司花了重金去購買第三方的服務來檢查 App 的安全漏洞。

在 Android 12 上這幾個行為的變更它們都有一個共性:安全性,可見 Google 這幾年在安全上做了很多的努力,當然還有其他的一些行為的變更,可以前往查看 行為變更:以 Android 12 為目標平臺的應用。

https://developer.android.com/about/versions/12/behavior-changes-12

最后

在這里還分享一份由大佬親自收錄整理的學習PDF+架構視頻+面試文檔+源碼筆記,高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料

這些都是我現在閑暇時還會反復翻閱的精品資料。里面對近幾年的大廠面試高頻知識點都有詳細的講解。相信可以有效地幫助大家掌握知識、理解原理,幫助大家在未來取得一份不錯的答卷。

當然,你也可以拿去查漏補缺,提升自身的競爭力。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2015-06-04 11:11:33

Dynatrace

2018-04-02 10:28:10

iOSPWA蘋果

2015-08-03 15:29:28

Dynatrace

2012-12-04 09:18:02

2021-01-12 11:37:09

Python編程語言開發

2022-02-09 14:13:18

Android 12冷啟動UC內核

2019-11-20 10:38:36

路由路由協議路由器

2013-01-14 16:19:09

APP生存狀態

2021-09-13 09:31:45

反詐中心APP電信網絡詐騙網絡安全

2021-10-10 20:36:49

Android Root權限

2019-04-18 15:32:45

Serverless騰訊云TVP

2019-08-23 18:40:54

機器人人工智能

2015-07-20 17:01:12

APP崩潰云智慧

2024-04-16 00:24:54

AndroidApp入口點

2021-05-09 22:50:00

手機蘋果隱私

2024-04-15 00:04:00

APP開發

2020-04-03 09:35:33

前端框架Vue

2011-07-08 10:18:09

海量數據數據挖掘

2014-06-27 10:39:36

APP設計談戀愛

2024-01-30 08:30:41

TypeScript編譯器類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日干夜干 | 午夜视频免费在线观看 | 成人在线视频免费播放 | 久久久91 | 嫩草最新网址 | 欧美黄色一区 | 日本在线播放一区二区 | 中文字幕亚洲视频 | 日韩高清一区 | 久草免费福利 | 成人毛片视频免费 | 国产日韩欧美激情 | av中文字幕在线播放 | 北条麻妃99精品青青久久主播 | 超碰97av | 亚洲高清在线 | 99热热 | 毛片网在线观看 | 欧美xxxx网站 | www.亚洲精品 | 中文字幕在线观看一区 | 国产精品久久毛片av大全日韩 | 天天曰天天干 | 欧美国产亚洲一区二区 | 美女天天操| 国产不卡在线观看 | 性色在线 | 久久综合久色欧美综合狠狠 | 日韩国产精品一区二区三区 | 亚洲a视 | 成人欧美一区二区三区在线播放 | 国产一区二区在线视频 | 欧美一区二区三区在线观看 | av资源网站 | 国产日韩精品在线 | 国产高潮好爽受不了了夜夜做 | 日韩精品无码一区二区三区 | 欧美日韩久久久久 | 国产91精品久久久久久久网曝门 | 秋霞a级毛片在线看 | 丁香综合 |