Android:exported組件的可見性和可訪問性
在Android開發(fā)中,android:exported 是一個(gè)用于定義組件(如Activity、Service、BroadcastReceiver、ContentProvider等)是否可以被其他應(yīng)用訪問的屬性。在AndroidManifest.xml文件中,在<activity>, <service>, <receiver>, <provider>標(biāo)簽使用android:exported屬性定義組件的可見性和可訪問性。
<activity
android:name=".activity.GuideActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
android:exported 為 true:
- 組件可以被其他應(yīng)用訪問。
- 其他應(yīng)用可以啟動(dòng)這個(gè)Activity,發(fā)送廣播到這個(gè)BroadcastReceiver,或者綁定到這個(gè)Service。
- 對于某些組件(如Activity),如果沒有明確設(shè)置 android:exported,那么默認(rèn)值可能是 true,具體取決于Android版本和組件類型。
android:exported 為 false:
- 組件只能被定義該組件的應(yīng)用訪問。
- 其他應(yīng)用無法直接訪問這個(gè)組件。
- 提高了安全性,減少了潛在的攻擊面。
從Android 12(API級別31)開始,系統(tǒng)開始更加嚴(yán)格地檢查 android:exported 的值。如果系統(tǒng)檢測到某個(gè)組件的 android:exported 值與其功能不符(例如,一個(gè)隱式Intent可以啟動(dòng)一個(gè)未聲明為 exported=true 的Activity),或者綁定到一個(gè)未聲明為exported的Service,那么應(yīng)用可能會(huì)崩潰或在運(yùn)行時(shí)遇到其他問題。為了確保應(yīng)用的穩(wěn)定性和安全性,應(yīng)該明確設(shè)置 android:exported 的值,并確保與組件的實(shí)際用途相匹配。