android:exported 屬性詳解

來源:互聯網
上載者:User

標籤:存在   sage   預設值   限制   als   沒有   tac   rip   lan   

http://blog.csdn.net/watermusicyes/article/details/46460347

昨天在用360掃描應用漏洞時,掃描結果,出來一個android:exported屬性,其實之前根本不知道這個屬性,更不知道這個屬性用來幹嘛的,詳情見: 

因此,查了官方API,學習了一下這個屬性!

android:exported 是Android中的四大組件 Activity,Service,Provider,Receiver 四大組件中都會有的一個屬性。

總體來說它的主要作用是:是否支援其它應用調用當前組件。 
預設值:如果包含有intent-filter 預設值為true; 沒有intent-filter預設值為false。

下面來詳細的瞭解一下四大組件中的這個屬性:

1、先來看:Activity中的:

<activity          ……          android:exported=["true" | "false"]          ……/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

意思如下:

在Activity中該屬性用來標示:當前Activity是否可以被另一個Application的組件啟動:true允許被啟動;false不允許被啟動。

如果被設定為了false,那麼這個Activity將只會被當前Application或者擁有同樣user ID的Application的組件調用。

exported 的預設值根據Activity中是否有intent filter 來定。沒有任何的filter意味著這個Activity只有在詳細的描述了他的class name後才能被喚醒 .這意味著這個Activity只能在應用內部使用,因為其它application並不知道這個class的存在。所以在這種情況下,它的預設值是false。從另一方面講,如果Activity裡面至少有一個filter的話,意味著這個Activity可以被其它應用從外部喚起,這個時候它的預設值是true。

其實,不只有這個屬性可以指定Activity是否暴露給其它應用,也可以使用permission來限制外部實體喚醒當前Activity(詳情見permission屬性)

2、Service中的:

<service android:enabled=["true" | "false"]         android:exported=["true" | "false"]         android:icon="drawable resource"         android:isolatedProcess=["true" | "false"]         android:label="string resource"         android:name="string"         android:permission="string"         android:process="string" >    . . .</service>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

意思如下: 
該屬性用來標示,其它應用的組件是否可以喚醒service或者和這個service進行互動:true可以,false不可以。如果為false,只有同一個應用的組件或者有著同樣user ID的應用可以啟動這個service或者綁定這個service。

預設值根據當前service是否有intent filter來定。如果沒有任何filter意味著當前service只有在被詳細的描述class name後才會被喚醒。這意味這當前service只能在應用內部使用(因為其它應用不知道這個class name).所以在這種情況下它的預設值為 false.從另一方面講,如果至少有一個filter的話那麼就意味著這個service可以被外部應用使用,這種情況下預設值為true。

其實,不只有這個屬性可以指定service是否暴露給其它應用。你也可以使用permission來限制外部實體喚醒當前service(詳情見permission屬性)

3、Provider中的:

<provider android:authorities="list"          android:enabled=["true" | "false"]          android:exported=["true" | "false"]          android:grantUriPermissions=["true" | "false"]          android:icon="drawable resource"          android:initOrder="integer"          android:label="string resource"          android:multiprocess=["true" | "false"]          android:name="string"          android:permission="string"         android:writePermission="string" >    . . .</provider>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

意思如下: 
當前內容提供者是否會被其它應用使用: 
true: 當前提供者可以被其它應用使用。任何應用可以使用Provider通過URI 來獲得它,也可以通過相應的許可權來使用Provider。

false:當前提供者不能被其它應用使用。設定Android:exported=“false”來限制其它應用獲得你應用的Provider。只有擁有同樣的user ID 的應用可以獲得當前應用的Provider。

當Android sdk 的最小版本為16或者更低時他的預設值是true。如果是17和以上的版本預設值是false。

可以通過Android:exported=“fasle” 和 permission來限制當前應用Provider是否會被其它應用擷取。

4、receiver中的:

<receiver android:enabled=["true" | "false"]          android:exported=["true" | "false"]          android:icon="drawable resource"          android:label="string resource"          android:name="string"          android:permission="string"          android:process="string" >    . . .</receiver>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

意思如下: 
當前broadcast Receiver 是否可以從當前應用外部擷取Receiver message 。true,可以;false 不可以。如果為false ,當前broadcast Receiver 只能收到同一個應用或者擁有同一 user ID 應用發出廣播。

預設值根據當前 broadcast Receiver 是否包含intent filter來定。如果沒有任何的filter的話意味著只有在被詳細的描述了class name的情況下才會被喚起。這意味著當前Receiver只能在應用內部被使用(因為其它應用不知道這個類的存在。)在這種情況下,預設值是false。如果至少包含一個filter意味著當前broadcast Receiver 將會收到來自系統或者其它應用的廣播,所以這個時候預設值是true。

不只有這個屬性可以指定broadcast Receiver 是否暴露給其它應用。你也可以使用permission來限制外部應用給他發送訊息。

在上文中提到的兩個概念:user ID 和 permission 在網上找見了兩篇不錯的文章: 
1、Android中startActivity中的permission檢測與UID機制 
2、Android Permission 機制

更正:

之前的預設值那塊寫錯了,應該是: 
預設值:如果包含有intent-filter 預設值為true; 沒有intent-filter預設值為false。

 

android:exported 屬性詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.