国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

服務(wù)器資訊|IT/互聯(lián)網(wǎng)|云計算|區(qū)塊鏈|軟件資訊|操作系統(tǒng)|手機數(shù)碼|百科知識|免費資源|頭條新聞|

服務(wù)器之家 - 新聞資訊 - 手機數(shù)碼 - Android 12 已來,你的 App 崩潰了嗎?

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

2021-12-30 22:25像程序那樣思考 手機數(shù)碼

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

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

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

通過這篇文章你將學(xué)習(xí)到以下內(nèi)容:

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

android:exported 屬性

在 Android 12 中包含 的 activity 、 service 或 receiver必須為這些應(yīng)用組件顯示聲明 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 的值,你的應(yīng)用將無法安裝,錯誤日志如下所示。

  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' 

如果您的應(yīng)用在需要聲明 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 

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

這個行為的變更無論是對庫開發(fā)者 和 還是應(yīng)用開發(fā)者影響都非常大。

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

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

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

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

產(chǎn)生問題的代碼如下所示:

  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 賬戶上的社交網(wǎng)絡(luò)上),而解決方案有兩個:

方案一:添加 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 沒有使用方式一,而是檢查調(diào)用者的包名是否與自身的包名相同

  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.     } 

這種方案也是可行的,因為在一臺設(shè)備上,不可能會出現(xiàn)兩個包名相同的應(yīng)用。

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

指定 PendingIntent 的可變性

在 Android 12 中創(chuàng)建 PendingIntent 的時候,需要顯示的聲明是否可變,請分別使用 PendingIntent.FLAG_MUTABLE 或 PendingIntent.FLAG_IMMUTABLE 標志,如果您的應(yīng)用試圖在不設(shè)置任何可變標志的情況下創(chuàng)建 PendingIntent 對象,系統(tǒng)會拋出 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 之前,默認創(chuàng)建一個 PendingIntent 它是可變的,因此其他惡意應(yīng)用程序可能會攔截,重定向或修改此 Intent。(但是是有條件限制的)

一個 PendingIntent 是一個可以給另一個應(yīng)用程序使用的 Intent,PendingIntent 接收待處理意圖的應(yīng)用程序可以使用與產(chǎn)生待處理意圖的應(yīng)用程序相同的權(quán)限和身份執(zhí)行待處理意圖中指定的操作。

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

adb 備份限制

Android 開發(fā)者都應(yīng)該知道這個命令 adb backup , 它可以備份應(yīng)用的數(shù)據(jù),在 Android 12 中,為了保護私有應(yīng)用數(shù)據(jù),用戶運行 adb backup 命令時,從設(shè)備導(dǎo)出的任何其他系統(tǒng)數(shù)據(jù)都不包含應(yīng)用數(shù)據(jù)。

如果你在測試和開發(fā)過程中需要使用 adb backup 來備份應(yīng)用數(shù)據(jù),你可以在 AndroidManifest 中將 android:debuggable 設(shè)置為 true 來導(dǎo)出應(yīng)用數(shù)據(jù)。

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

注意:在發(fā)布應(yīng)用前將 android:debuggable 設(shè)置為 false。

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

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

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

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

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

如何檢查 App 的安全漏洞

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

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

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

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

最后

在這里還分享一份由大佬親自收錄整理的學(xué)習(xí)PDF+架構(gòu)視頻+面試文檔+源碼筆記,高級架構(gòu)技術(shù)進階腦圖、Android開發(fā)面試專題資料,高級進階架構(gòu)資料

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区二区三区视频 | 激情五月激情综合网 | 一区中文字幕 | 国产精品视频播放 | 久久久精 | 亚洲成人精品视频 | 欧美日韩成人在线视频 | 国产成人无遮挡在线视频 | av免费一区二区 | 欧美午夜一区二区 | 国产高清无密码一区二区三区 | 欧美视频在线免费 | 欧美黄色精品 | 精品中出 | 人人爽人人爽人人片av | 男人的天堂视频网站 | xx视频在线观看 | 国产精品久久天天躁 | 欧美自拍偷拍 | 国产成人网 | 日韩乱视频 | 九九综合九九 | 亚洲一区二区av | 少妇精品久久久久久久久久 | 久久成人国产 | 激情网站免费观看 | 夜夜艹日日艹 | 亚洲字幕 | 中文字幕亚洲一区二区三区 | 成人午夜精品 | 久久h| 日本黄色大片免费看 | 亚洲精品乱码久久久久久蜜桃麻豆 | 日韩亚洲在线 | 亚洲精品影院在线 | 日韩精品成人 | 成人免费视频网 | jdav视频在线观看免费 | 久久久久久av | 亚洲国产精品一区二区久久 | 成人免费视频播放 |