1.Android 7.1.1 Framework 修改记录(一) 静默安装/卸载 (pm命令抛异常的过来看看)
2.å¦ä½å¨Androidä¸å¯å¨JAVAç¨åº
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)这行代码,但此操作需谨慎以避免潜在安全风险。
完整封装后的代码已经实现,包括安装与卸载方法。至此,团队成功解决了静默安装与卸载的问题,满足了特定需求,同时优化了用户体验。
å¦ä½å¨Androidä¸å¯å¨JAVAç¨åº
ããå¨Androidä¸å¯å¨JAVAç¨åºå ¶å®æå¾å¤ç§æ¹å¼ï¼ç°æ»ç»å¦ä¸
ããä¸ãå¨Androidåºç¨ç¨åºä¸åéIntentå¯å¨Androidåºç¨ç¨åº
ããè¿ä¸ªæ¹å¼æç®å,æ常ç¨ãå¨æ¤ä¸å¨ç´¯è¿°ãå ³äºIntentçæ´å¤å 容请é 读ãIntentææ¯ç®ä»ã
ããäºãå¨shellæ§å¶å°éè¿amå½ä»¤åéIntentæ¥å¯å¨Androidåºç¨ç¨åº
ããå¨Androidçshellæ§å¶å°éè¿amå½ä»¤åéIntentæ¥å¯å¨Androidåºç¨ç¨åº
ããå ³äºæ¤ç详ç»å 容请åèãAndroidå½ä»¤am详解ã
ããä¸ãå¨shellæ§å¶å°ç´æ¥éè¿davlikvmå½ä»¤å¯å¨ä¸ä¸ªJAVAç¨åºã
ãã该æ¹å¼æ个天çç缺ç¹ï¼å³å¨å ¶ä¸ï¼å¾å¤AndroidçJNIæ æ³è°ç¨ãå 为Androidçå¾å¤JNIå ¶å®æ¯éè¦æå¨æ³¨åçã
ããå ³äºè¯·åèãåºæ¬Dalvik VMè°ç¨ã
ããåãå¨shellæ§å¶å°ç´æ¥éè¿è¿è¡app_processç¨åºå¯å¨ä¸ä¸ªJAVAç¨åº
ããå¨app_processç¨åºä¸ï¼ä»ä¼å¯¹AndroidçJNIè¿è¡æå¨æ³¨åçï¼è½å¾å¥½ç使ç¨AndroidçAPIï¼å æ¤éè¿è¿è¡app_processç¨åºå¯å¨ä¸ä¸ªJAVAç¨åºï¼æ¯ä¸ä¸ªæ¯è¾å®ç¾çæ¹å¼ãapp_processç¨åºæ¯ä¸ä¸ªCç¨åºï¼å®çæºç ä½äºframeworks\base\cmds\app_processã
ããå ³äºå®ç使ç¨è¯·åèãAndroidå½ä»¤am详解ã以åshellèæ¬frameworks\base\cmds\am\amåframeworks\base\cmds\pm\pm
ããamèæ¬æ件å¦ä¸ï¼
ãã# Script to start "am" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/am.jarexec app_process $base/bin com.android.commands.am.Am "$@"pmèæ¬æ件å¦ä¸ï¼
ãã# Script to start "pm" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/pm.jarexec app_process $base/bin com.android.commands.pm.Pm "$@"CLASSPATHæå®äºä½ çç¨åºçä½ç½®ï¼com.android.commands.pm.Pmå说æäºç¨åºçå ¥å£ä¸ºcom.android.commands.pm.Pmï¼å³å ¥å£å½æ°main()æå¨çç±»ï¼"$@"å°±æ¯ä¼ éç»mainï¼ï¼å½æ°çåæ°ï¼åªæ¯è¿é"$@"æ¬èº«åæ¯ä¸ªshellä¼ å ¥çåæ°èå·²
ããéè¦æ³¨æçæ¯CLASSPATHä¸çæä»¶å¿ é¡»æ¯dalvikæä»¶æ ¼å¼çï¼å ³äºæ¤ç转æ¢è¯·åèãåºæ¬Dalvik VMè°ç¨ãå½ç¶CLASSPATHä¸çæ件å¯ä»¥æ¯apkæ件ï¼åªæ¯ä½ çapkä¸è³å°åºè¯¥æ个æ¥æmain()å ¥å£å½æ°çç±»ã
转载