天天看點

Android應用生死輪回的那些事兒(6) - 武器庫完結篇Android應用生死輪回的那些事兒(6) - 武器庫完結篇

這些api雖然數量衆多,但是功能相對簡單,都是根據標頭或者是applicationinfo或activity資訊去擷取一些資源,如圖示,文本等。

getxml:擷取xml

gettext:從資源中讀取文本

getresourcesforapplication(app):擷取資源對象

getresourcesforapplication(apppackagename):擷取資源對象

getresourcesforactivity:從activity中擷取資源對象

getdrawable:擷取drawable

getdefaultactivityicon:activity的預設icon

getapplicationlabel:擷取applicaiton的标簽

getapplicationicon:擷取圖示

getactivityicon:擷取圖示

android 2.3新增兩個api,都是跟logo相關。

getapplicationlogo

getactivitylogo

手表上新增了banner.

getapplicationbanner

getactivitybanner

android 5.0新增了userbadged ui,是以新增了三個方法:

getuserbadgedlabel

getuserbadgedicon

getuserbadgeddrawablefordensity

android中可以支援将應用或者元件禁掉或者解禁。

componentenablesetting是通過元件名來設定,applicationenablesetting是通過包名。

setcomponentenabledsetting

getcomponentenabledsetting

setapplicationenabledsetting

getapplicationenabledsetting

原型:

參數:

包名

新狀态:狀态請見下面的3種。

标志位:要麼是dont_kill_app,要麼是0.

狀态可以為:

component_enabled_state_enabled

component_enabled_state_disabled

component_enabled_state_default

例程:禁掉微信:

将包中的四大元件之一禁掉或解禁。

參數與上面的針對整個應用的一緻。

android 1.0時,隻能檢查兩個包名的簽名是否一緻。

到了android 2.0,也可以支援對兩個uid之間判斷簽名。

問題是,從包名擷取uid的api,要到android 7.0才有呢。。。

addpackagetopreferred api已經在android 2.1被除名,是以prefer相關的api,隻剩下下面三個:

getpreferredpackages

getpreferredactivities

clearpackagepreferredactivities

至此,android 1.0的packagemanager提供的46個api全部講完了。

android 2.0開始引入feature的概念。我們可以通過getsystemavailablefeatures方法擷取系統支援哪些feature. 或者是通過hassystemfeature(name)方法判斷是否支援一個feature.

不過,android 2.0的時候,feature是不分版本号的。支援版本号的或者是通過hassystemfeature方法要到android 7.0才會出品。

屬性:

flags: flag_required或0

name:屬性名

reqglesversion:在name為空時,為需要的opengl es的版本号

version:(android 7.0才有)版本号

方法:

getglesversion(): 0x00010002代表1.2

例程:

輸出結果:

上面都是feature,最後一條是opengles的版本号:3.0

feature的取值可以是下面的字元串:

api 7 (android 2.1)開始支援的feature

feature_camera

feature_camera_autofocus

feature_camera_flash

feature_live_wallpaper

feature_sensor_light

feature_sensor_proximity

feature_telephony

feature_telephony_cdma

feature_touchscreen_multitouch

api 8 (android 2.2)開始支援的feature

feature_bluetooth

feature_location

feature_location_gps

feature_location_network

feature_microphone

feature_sensor_accelerometer

feature_sensor_compass

feature_touchscreen

feature_touchscreen_multitouch_distinct

feature_wifi

api 9 (android 2.3)

feature_audio_low_latency

feature_camera_front

feature_nfc

feature_sensor_barometer

feature_sensor_gyroscope

feature_sip

feature_sip_voip

feature_touchscreen_multitouch_jazzhand

api 11 (android 3.0)

feature_faketouch

api 12 (android 3.1)

feature_usb_accessory

feature_usb_host

api 13 (android 3.2)

feature_faketouch_multitouch_distinct

feature_faketouch_multitouch_jazzhand

feature_screen_landscape

feature_screen_portrait

api 14 (android 4.0)

feature_wifi_direct

api 17 (android 4.2)

feature_camera_any

api 18 (android 4.3)

feature_app_widgets

feature_bluetooth_le

feature_home_screen

feature_input_methods

api 19 (android 4.4)

feature_consumer_ir

feature_device_admin

feature_nfc_host_card_emulation

feature_sensor_step_counter

feature_sensor_step_detector

api 20 (android 4.4 watch)

feature_backup

feature_camera_external

feature_printing

feature_sensor_heart_rate

feature_watch

feature_webview

api 21 (android 5.0)

feature_audio_output

feature_camera_capability_manual_post_processing

feature_camera_capability_manual_sensor

feature_camera_capability_raw

feature_camera_level_full

feature_connection_service

feature_gamepad

feature_leanback

feature_live_tv

feature_managed_users

feature_opengles_extension_pack

feature_securely_removes_users

feature_sensor_ambient_temperature

feature_sensor_heart_rate_ecg

feature_sensor_relative_humidity

feature_verified_boot

api 23 (android 6.0)

feature_audio_pro

feature_automotive

feature_fingerprint

feature_hifi_sensors

feature_midi

api 24 (android 7.0)

feature_ethernet

feature_freeform_window_management

feature_nfc_host_card_emulation_nfcf

feature_picture_in_picture

feature_vr_mode

feature_vr_mode_high_performance

feature_vulkan_hardware_level

feature_vulkan_hardware_version

我們小結一下android 1.0的46個packagemanager api:

權限相關

removepermission

querypermissionsbygroup

getpermissioninfo

getpermissiongroupinfo

getallpermissiongroups

checkpermission

addpermission

禁掉元件相關

最佳比對元件

resolveservice

resolvecontentprovider

resolveactivity

query元件

queryintentservices

queryintentactivityoptions

queryintentactivities

querybroadcastreceivers

queryinstrumentation

querycontentproviders

uid/gid相關

getpackagesforuid

getnameforuid

getpackagegids(packagename)

get元件集合

getinstalledpackages

getinstalledapplications

get單個元件

getpackagearchiveinfo

getinstrumentationinfo

getapplicationinfo

getactivityinfo

getpackageinfo

getserviceinfo

getreceiverinfo

擷取資源

getxml

gettext

getresourcesforapplication(app)

getresourcesforapplication(apppackagename)

getresourcesforactivity

getdrawable

getdefaultactivityicon

getapplicationlabel

getapplicationicon

getactivityicon

最愛元件相關

比較簽名

checksignatures(pkg,pkg)

api 3 (android 1.5)新增了3個api:

getlaunchintentforpackage

issafemode

getsystemsharedlibrarynames

是否處于安全模式。

傳回so庫的路徑

api 5 (android 2.0)新增4個api,前面已經都講過了。

getinstallerpackagename

checksignatures(uid1,uid2)

hassystemfeature(name)

getsystemavailablefeatures

api 8 (android 2.2)新增3個api,2個名義包名轉換的,還有一個權限管理的,前面都已經講過了。

currenttocanonicalpackagenames

canonicaltocurrentpackagenames

addpermissionasync

api 9 (android 2.3)新增3個api,一個是getproviderinfo,終于把四大元件的getapi湊齊了。另外從本版開始有了logo的概念。

getproviderinfo

api 11 (android 3.0)隻增加一個api,為2.0的getinstallerpackagename提供一個setter接口。

setinstallerpackagename

api 14 (android 4.0)也隻增加一個api,用于安裝時校驗。

verifypendinginstall

api 17 (android 4.2)隻增加一個api,其實是對于上一個api的補足。

extendverificationtimeout

api 18 (android 4.3)新增一個權限相關api

getpackagesholdingpermissions

api 19 (android 4.4)隻新增一個api,終于可以通過intent查詢contentprovider了

queryintentcontentproviders

api 20 (kitkat_watch)新增兩個banner相關api.

api 21 (android 5.0)新增5個api,前三個是userbadged界面相關。

第4個提供了packageinstaller的接口。

最後一個是leanback界面下擷取launch intent的api

getpackageinstaller

getleanbacklaunchintentforpackage

api 23 (android 6.0)隻增加一個權限相關api

ispermissionrevokedbypolicy

api 24 (android 7.0)新增3個api。

systemm feature開始支援版本号。

終于可以擷取package的uid了。

hassystemfeature(name,version)

getpackageuid

getpackagegids(name,flags)

繼續閱讀