Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android:exported 屬性分析

android:exported 屬性分析

編輯:關於Android編程



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

因此,查了官方API,學習了一下這個屬性!<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxociAvPg0KPHA+YW5kcm9pZDpleHBvcnRlZCDKx0FuZHJvaWTW0LXEy8S089fpvP4gQWN0aXZpdHmjrFNlcnZpY2WjrFByb3ZpZGVyo6xSZWNlaXZlciDLxLTz1+m8/tbQtry74dPQtcTSu7j2yvTQ1KGjPC9wPg0KPHA+19zM5cC0y7XL/LXE1vfSqtf308PKx6O6yse38dans9bG5Mv806bTw7X308O1scew1+m8/qGjPGJyIC8+DQrErMjP1rWjusjnufuw/Lqs09BpbnRlbnQtZmlsdGVyIMSsyM/Wtc6qdHJ1ZTsgw7vT0GludGVudC1maWx0ZXLErMjP1rXOqmZhbHNloaM8L3A+DQo8cD7PwsPmwLTP6s+4tcTBy73i0rvPwsvEtPPX6bz+1tC1xNXiuPbK9NDUo7o8L3A+DQo8cD4xoaLPyMC0v7SjukFjdGl2aXR51tC1xKO6PC9wPg0KPHByZSBjbGFzcz0="brush:java;"> "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中的:

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

  • 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中的:

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

  • 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中的:

"true" | "false"]
          android:exported=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:name="string"
          android:permission="string"
          android:process="string" >
    . . .

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這裡寫圖片描述系統或者其它應用的廣播,所以這個時候默認值是true。

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

更正:

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

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved