1.Package Manager
2.安卓包管理机制之PackageInstaller安装APK
3.Android 7.1.1 Framework 修改记录(一) 静默安装/卸载 (pm命令抛异常的安装安装过来看看)
4.è£è6ä¸åªäºè½¯ä»¶å¯ä»¥å¸è½½
Package Manager
PackageInstalleræ¯å®åä¸é»è®¤çåºç¨ç¨åºï¼ç¨å®æ¥äº¤äºå¼å°å®è£ æ®éå æ件ã PackageInstalleræä¾äºç¨æ·çé¢æ¥ç®¡çåºç¨æè å æ件ãPackageInstallerè°ç¨ä¸ä¸ªå« InstallAppProgressçactivityæ¥è·åç¨æ·ååºçæ令ãInstallAppProgressä¼è¯·æ±Package Manager Serviceï¼ç¶åéè¿indalldæ¥å®è£ å æ件ãæºç æä¾å¨/packages/apps/PackageInstallerä¸ãè¿ä¸ªç³»ç»å®æ¤ç¨åºçé¦è¦è§è²æ¯è·åæ¥èªPackage Manager Serviceç请æ±ï¼è该请æ±æ¯éè¿Linuxå¥æ¥å/dev/socket/installedè·å¾çã
Installd使ç¨ç®¡çåæéæ§è¡ä¸ç³»åçæ¥éª¤æ¥å®è£ APKã
Package Mangeræ¯ä¸ä¸ªå®é ä¸ç®¡çåºç¨ç¨åºå®è£ ãå¸è½½åå级çAPIãå½æ们å®è£ APKæ件 æ¶ï¼Package Managerä¼è§£æAPKå æ件åæ¾ç¤ºç¡®è®¤ä¿¡æ¯ãå½æ们ç¹å»OKæé®åï¼Package Mangerä¼è°ç¨ä¸ä¸ªå«âInstallPackageâçæ¹æ³ï¼è¿ä¸ªæ¹æ³æå个åæ°ï¼ä¹å°±æ¯uriãinstallFlagsãobserverå installPackagenameãPackage Manger请æ±æå¡ã
Package Mangeræå¡è¿è¡å¨ç³»ç»æå¡è¿ç¨ä¸ï¼èå®è£ å®æ¤ç¨åºï¼installdï¼ä½ä¸ºä¸ä¸ªæ¬å°è¿ç¨è¿è¡çï¼ä»ä»¬é½å¨ç³»ç»å¯å¨æ¶å¼å§è¿è¡ã
安卓包管理机制之PackageInstaller安装APK
前言
本文继续探讨Android包管理机制中的PackageInstaller组件,特别是源码其在安装APK文件时的运作机制。讨论基于Android 8.0版本的包源源码。
在PackageInstallerActivity中,安装安装调用startInstallConfirm方法后,源码安装确认界面显现给用户,包源源码拷贝软链接失效用户选择继续安装应用程序时,安装安装触发PackageInstallerActivity的源码onClick方法。该方法处理确定和取消按钮的包源交互,主要关注确定按钮的安装安装响应,调用startInstall方法,源码从而跳转至InstallInstalling界面,包源关闭当前Activity。安装安装
在InstallInstalling界面,源码根据保存的包源mSessionId和mInstallId进行安装处理。如果之前有保存信息,会根据mInstallId注册观察者,接收安装事件的回调,无论成功与否均关闭当前Activity。storm分析源码若无保存信息,则创建SessionParams,解析APK的参数,注册观察者,生成mInstallId,最终与PackageInstallerService进行交互。
在InstallInstalling的onResume方法中,根据mSessionId获取SessionInfo,创建并执行InstallingAsyncTask,推荐奖励源码将APK信息通过IO流写入PackageInstaller.Session。onPostExecute方法中创建PendingIntent,并通过PackageInstaller.Session的commit方法发送,最终调用PackageInstallerSession的commit方法,进入Java框架层处理。
在Java框架层,通过PackageInstallerSession的commit方法,将APK信息封装为PackageInstallObserverAdapter,并通过Handler发送MSG_COMMIT消息。兴安网站源码该消息处理程序获取IPackageInstallObserver2类型的观察者,调用commitLocked方法,进一步调用PMS的installStage方法。如果在PMS中出现异常,会通过dispatchSessionFinished方法,调用观察者的onPackageInstalled方法,将异常信息回调给PackageInstallObserverAdapter。
总结而言,PackageInstaller安装APK的api源码开源过程分为两个关键步骤:调用PackageInstallerActivity的onClick方法启动安装流程,然后在Java框架层中,通过PMS处理APK安装的具体细节。后续文章将深入探讨PMS中的复杂处理过程。
Android 7.1.1 Framework 修改记录(一) 静默安装/卸载 (pm命令抛异常的过来看看)
RK平台Android 7.1.1版本下,为满足客户需求提供静默安装/卸载的API,团队选择了自行实现。
初期探索发现,通过PM命令实现安装基本可行,且能够跳过未知来源进行安装。然而,尝试使用PM命令卸载时却遭遇异常问题。经过多番研究,团队最终决定深入系统源代码实现静默安装与静默卸载功能。
实际上,桌面操作的卸载功能最终调用的是PackageManager.deletePackage方法。然而,此方法为隐藏API,虽然可通过引入framework.jar调用,操作繁琐。因此,团队决定利用PM命令作为卸载解决方案。
实现原理基于PM命令的执行,实际上是由framework层的PackageInstallerService类负责处理。为允许非ROOT级用户执行卸载操作,团队修改了PackageInstallerService.java文件。通过增加SYSTEM_UID的支持,使得指定为系统应用的程序能够顺利执行卸载操作。若希望普通应用也能执行卸载,只需注释掉mAppOps.checkPackage(callingUid, callerPackageName)这行代码,但此操作需谨慎以避免潜在安全风险。
完整封装后的代码已经实现,包括安装与卸载方法。至此,团队成功解决了静默安装与卸载的问题,满足了特定需求,同时优化了用户体验。
è£è6ä¸åªäºè½¯ä»¶å¯ä»¥å¸è½½
ä¸é¢æ¯å为è£è6çç³»ç»åºç¨ç²¾ç®å表ï¼ä» ä¾åè
ç³»ç»åºç¨ä¸»è¦æ¾å¨ä¸é¢å 个å°æ¹ï¼
/system/app ç³»ç»apk
/system/priv-app ç³»ç»apk
/system/delapp å¯å é¤ç第ä¸æ¹åºç¨
/cust/preinstalled/public/app ç³»ç»éæç第ä¸æ¹åºç¨çï¼æ¾å¨custååºå¯å é¤ï¼ä½æ¢å¤åºå设置çæ¶åè¿ä¼åºæ¥
ææodexåç¼å¨å é¤apkåå¯å é¤ï¼å¦æpushè¿å»ä¿®æ¹è¿çAPKæ´ä¸è½ä¿çodex
/system/app
AGPSProvider.apk AGPSå®ä½ ä¸å¯å
ApkBatchInstall.apk ç¨åºå®è£ ç¨ ä¸å¯å
BaiduInput_for_Huawei.apk è¾å ¥æ³ å¯å
BasicDreams.apk å¨æå£çº¸ å¯å
Bluetooth.apk èçåè½ ä¸å¯å
Calculator.apk 计ç®å¨ å¯å
Calendar.apk æ¥åçé¢ å 为pkgå称è·googleç¸åï¼å¦ææ³å®è£ google calendarï¼éè¦å é¤è¿ä¸ªapkï¼
并ä¸å é¤CalendarProvider.apkï¼ç¨gappséé¢çæ¿ä»£ï¼å¦åææéæ¶ä¼æ¥é
CalendarProvider.apk æ¥åæ°æ® åä¸
CertInstaller.apk è¯ä¹¦å®è£ ä¸å¯å
ChnCmccAutoReg.apk CMCCåºç¨ å¯å
CmccDMClient.apk CMCCå¢å¼ºå®åæå¡ ï¼
CountLapseTime.apk åèç¸å ³ å¦æä¸ç¨ççµç²¾çµï¼å¯ä»¥ä¸åå é¤
DocumentsUI.apk éæ©ææ¡£çé¢ ä¸å¯å
DownloadProviderUi.apk ä¸è½½çé¢ ä¸å¯å
Email.apk çµåé®ä»¶ å¯å
EmergencyData.apk å¤ä»½æ°æ®ç¨ å¦æä¸ç¨å为å¤ä»½å¯å
Exchange2.apk exchangeé®ç®± å¯å
FaceLock.apk 人è¸è§£é å¯å
Galaxy4.apk å¨æå£çº¸ å¯å
GameBox.apk 游æä¸å¿ å¯å
GoogleTTS.apk google text to speech 建议ä¸å
HoloSpiralWallpaper.apk å¨æå£çº¸ å¯å
HTMLViewer.apk HTMLæºç æ¥çå¨ å»ºè®®ä¸å
HuaweiPayService.apk å为æ¯ä» å¯å
Huawei_Swype_for_Huawei.apk æ»å¨è¾å ¥ å¯å
HwAllBackup_CMCC.apk å为å¤ä»½ å¦æç¨éå¤ä»½ä¸ç¨è¿ä¸ªï¼å¯å
HwAppObserver.apk 第ä¸æ¹ä¸»é¢ï¼ å¯å
HwBigData.apk å为大æ°æ®ï¼ å¯å
HwBluetoothImport.apk èçå¯¼å ¥å¯¼åºè系人 ä¸å¯å
HwCAService.apk 诺äºCAï¼æ¥å¿ï¼ å¯å
HwDeskClock.apk é¹é ççå
HwFileManager.apk å为æ件管çå¨ å¯å
HwFlashlight.apk æçµç ççå
HwFloatCalculator.apk æµ®å¨è®¡ç®å¨ å¯å
HwFloatCalendar.apk æµ®å¨æ¥å å¯å
HwFloatMms.apk æµ®å¨çä¿¡ å¯å
HwFloatNotePad.apk æµ®å¨è®°äºæ¬ å¯å
HwFloatTasks.apk æ¬æµ®èå å¯å
HwFMRadio.apk æ¶é³æº ççå
HwID.apk å为ID å¯å
HwInternetAudioService.apk äºèç½é³é¢IMCs 建议å é¤ï¼å¦æä» å»ç»è¿ä¼å¨åå°è¿è¡
HwLauncher6.apk å为æ¡é¢ ä¸ç¨çè¯å¯ä»¥å ï¼æ¯å¦ç¨google now luancherænova launcherå¯å®å ¨æ¿ä»£
HwLogCollectService.apk Logè®°å½æå¡ å¯å
HwLogTool.apk Logè®°å½å·¥å · å¯å
HwMediaCenter.apk é³ä¹å¯å ï¼ä½æ¯å é¤ä¹åéå±çé¢åå»ä¸ä¼åºç°é³ä¹ææ¾
HwMeWidget_Honor.apk å为éæwidget å¯å
HwMirror.apk éå ççå
HwMultiscreen.apk å为å¤å±äºå¨ å¯å
HwNotePad.apk å为记äºæ¬ å¯å
HwOUC.apk ç³»ç»å级æå¡ å¦æä¿®æ¹äºç³»ç»ååºå°±ä¸è½OTAå级äºï¼ççè¿ä¸ªä¹æ²¡ä»ä¹ç¨
HwPhoneService.apk å为ææºæå¡
HwPowerGenieEngine3.apk ççµç²¾çµ å¯å
HwProfileSwitcher.apk æ æ¯æ¨¡å¼åæ¢ ä¸ç¨å¯å
HwPushService.apk å为æ¨é 建议å é¤ï¼å¦æä» å»ç»è¿ä¼å¨åå°è¿è¡
HwRemoteController.apk é¥æ§å¨ ççå
HwSoundRecorder.apk å为å½é³æº å¯å
HwStartupGuide.apk å为åå§åå¯¼èª å¯å
HwSystemManager.apk ç³»ç»ç®¡çå¨ å¦æè¦ç¨æé管ççï¼å°±ä¿çï¼å¦åå¯å
HwThemeManager.apk ä¸»é¢ ä¸ç¨å为æ¡é¢çè¯å¯å
HwWeatherClock.apk å为天æ°widget å¯å
HwWiFiDirect.apk wifi directåè½ å»ºè®®ä¸å
HwWiFiHotspot.apk Wifiçç¹ ä¸å¯å
KeyChain.apk ç§é¥é¾ ä¸å¯å
LatinIME.apk googleé®ç å¯å
LiveWallpapers.apk å¨æå£çº¸ å¯å
LiveWallpapersPicker.apk å¨æå£çº¸éæ© å»ºè®®ä¸å
MagicSmokeWallpapers.apk å¨æå£çº¸ å¯å
Magnifier.apk æ¾å¤§é å¯å
MMIFunctionTest.apk å·¥åMMIæµè¯ 建议ä¸å
MMITest_II.apk å·¥åMMIæµè¯ 建议ä¸å
MyCalendar.apk æ¥åwidget å¯å
NfcNci.apk NFCåè½ ä¸å¯å
NoiseField.apk å¨æå£çº¸ å¯å
OMACP.apk é 置信æ¯ç¨äºOTAå级 å¦æä¸ç¨OTAå级就å¯ä»¥å æäº
PackageInstaller.apk å å®è£ çé¢ ä¸å¯å
PacProcessor.apk å¤ç代çèªå¨é ç½®ç ä¸å¯å
PhaseBeam.apk å¨æå£çº¸ å¯å
PhotoTable.apk å±ä¿ ççå
PicoTts.apk text to speech å¦æä¸ç¨googleè¯é³åè½å¯å é¤
PrintSpooler.apk æå° å¯å
ProfileViewer.apk è²ä¼¼é ç½®ç½ç»åæ°çï¼ å¯å ï¼
ProjectMenuAct.apk å·¥ç¨èå 建议ä¸å
Stk.apk SIMå¡STK 建议ä¸å
StreamingProvider.apk 串æµç¸å ³APNï¼ å¯å
SystemUI.apk ç³»ç»UI ä¸å¯å
TelephonyProvider.apk éè¯ä¿¡æ¯åå¨æå¡ ä¸å¯å
TouchpalModuleOEM.apk 触å®å ¬å ±å·ç ä¸ç¨å¯å
UEIAndroidServicesSDK.apk UEIå ¬å¸çé¥æ§é©±å¨åº ä¸ç¨é¥æ§çè¯å¯å
UserDictionaryProvider.apk ç¨æ·è¯å ¸ å¯å
VisualizationWallpapers.apk å¨æå£çº¸ å¯å
VLife_huawei.apk å¾®ä¹å¨æå£çº¸ ä¸ç¨çè¯å¯å
WAPPushManager.apk WAPæ¨é管ç ä¸ç¨çè¯å¯å
/system/priv-app/
ApplicationsProvider.apk åºç¨æ°æ®åº ä¸å¯å
BackupRestoreConfirmation.apk å¤ä»½æ¢å¤ ä¸å¯å
Browser.apk æµè§å¨ å¯å
Contacts.apk èç»äººçµè¯æ¬ ä¸å¯å
ContactsProvider.apk çµè¯æ¬åå¨ ä¸å¯å
DefaultContainerService.apk apké»è®¤å®è£ æå¡ ä¸å¯å
DownloadProvider.apk ä¸è½½ ä¸å¯å
ExternalStorageProvider.apk å¤é¨åå¨ ä¸å¯å
FusedLocation.apk å®ä½ç¸å ³ ä¸å¯å
Gallery2.apk å¾åºãç¸æº ä¸ç¨çè¯å¯å
GmsCore.apk Googleæå¡ å»ºè®®ä¸å
GoogleLoginService.apk Googleè´¦å·æå¡ å»ºè®®ä¸å
GoogleServicesFramework.apk Googleæå¡ å»ºè®®ä¸å
HiSpace.apk å为åºç¨å¸åºå¯å
HwPhoneFinder.apk ææºæ¾å å¯å
HwVmall.apk å为åå å¯å
HwVPlayer.apk ææ¾å¨ å¯å
InputDevices.apk è¾å ¥è®¾å¤ç®¡ç 建议ä¸å ï¼å¦åOTGåè½åå½±å
Keyguard.apk éå±ç¸å ³ ä¸å¯å
MediaProvider.apk åªä½åº ä¸å¯å
Meituxiuxiu.apk ç¾å¾ç§ç§ ççå...
Mms.apk çä¿¡ å¦æææ¿ä»£çå¯å
MusicFX.apk é³ä¹ å¯å
OneTimeInitializer.apk é¦æ¬¡å¼æºä½¿ç¨ 建议ä¸å
PapaqiSDK.apk ç±å¥èºåªåªå¥ å¯å ï¼å¾åºä¸ä¼è°ç¨
Phone.apk çµè¯ ä¸å¯å
ProxyHandler.apk 代ç ä¸å¯å
QuickSearchBox.apk èåæç´¢ å¯å
Settings.apk 设置 ä¸å¯å
SettingsProvider.apk 设置åå¨ ä¸å¯å
SharedStorageBackup.apk å ±äº«æ°æ®å¤ä»½æå¡ ä¸å¯å
Shell.apk androidæéç¸å ³ ä¸å¯å
SmartcardService.apk æºè½å¡ 建议ä¸å
Tag.apk NFCç¸å ³ ççå
VpnDialogs.apk ***设置 ä¸å¯å
WallpaperCropper.apk 设置å£çº¸æ¶åªåå¨éæ© ä¸å¯å
/system/delapp/
Mail.apk 移å¨é®ç®± å¯å
AirSharing.apk å为å³å¯å享 å¯å
AirSharingCast.apk å为å³å¯å享 å¯å
AirSharingCastClient.apk å为å³å¯å享 å¯å
ApplicationManager.apk ï¼
CMCCWifi.apk 移å¨å®å¶apk å¯å
cmnavi.apk 移å¨å®å¶apk å¯å
CMRead.apk 移å¨å®å¶apk å¯å
Emag_GameHall.apk 移å¨å®å¶apk å¯å
fetion.apk é£ä¿¡ å¯å
iFlyIME.apk 讯é£è¾å ¥æ³ å¯å
ISJ_WH.apk 移å¨å®å¶apk å¯å
lingxi.apk çµçè¯é³å©æ å¯å
mcontact.apk 移å¨å®å¶apk å¯å
MeituxiuxiuHelper.apk ç¾å¾ç§ç§ ççå
MM.apk MMååº å¯å
MMPlugCartoon.apk MMååº
MMPlugComic.apk MMååº
MMPlugKvSafeCenter.apk MMååº
MMPlugMusic.apk MMååº
MMPlugRead.apk MMååº
MMPlugVideo.apk MMååº
MobilePortal.apk 移å¨é¨æ· å¯å
moffice.apk moffice å¯å
MyTime.apk å为MyTime å¯å
OupengBrowser.apk 欧æOpera å¯å
QQlive.apk qqlive å¯å
qqmusic.apk qqé³ä¹ å¯å
SohuTV.apk æçTV å¯å
tmall.apk å¤©ç« å¯å
T_Client.apk å è´¹WLAN å¯å
/cust/preinstalled/public/app/
AMAP.apk é«å¾·å°å¾ å¯å
BaiduSearch.apk ç¾åº¦æç´¢ å¯å
DM.apk å¤ç±³é³ä¹ å¯å
HwMotionRecognition.apk æå¿æ§å¶ å¯å
iReader.apk æé å¯å
NetworkLocation_AMap.apk é«å¾·AGPSæå¡ å¯å
QQ.apk QQ å¯å
smartcom_itravel_w3.apk æ éåæ å¯å
SohuNewsClient.apk æçæ°é» å¯å
Taobao.apk ææºæ·å® å¯å
Weibo.apk å¾®åå¯å
å ¶ä»å¯å é¤çä¾å¦
/system/media/Pre-loaded/Picturesé»è®¤çå¾ç
/system/themes/ ä¸é¢æä¸ä¸ªä¸»é¢ï¼å¦æä¸æ¯ç¨å为æ¡é¢ï¼å¯ä»¥å é¤ä¸¤ä¸ªï¼çä¸é»è®¤çé£ä¸ªä¸»é¢ï¼è¿æä¸ä¸ªiconså ï¼æ¯ä¸ä¸ªå¾æ æ©å±å ï¼
æåºç¨ç主é¢ä¸ä¸å å«çiconså¦æå¨è¿éæç´¢å¼å°ï¼å°±ä¼å¯ç¨è¿ä¸ªiconï¼åºæ¬ä¸æ¯æå¾æ çåºè²å»¶å±åºæ¥ï¼æ¹ä¾¿åç§ä¸»é¢çåªè£ï¼å¦æä¸ç¨å为æ¡é¢å¯ä»¥å é¤
/cust/Samples ä¸é¢æMusicåWallpaperå¯å