【中国源码网站】【源码 贵】【betdice源码】android pm源码

时间:2024-12-28 08:37:42 来源:autofac源码 分类:娱乐

1.Android 7.1.1 Framework 修改记录(一) 静默安装/卸载 (pm命令抛异常的过来看看)
2.如何在Android中启动JAVA程序

android pm源码

Android 7.1.1 Framework 修改记录(一) 静默安装/卸载 (pm命令抛异常的过来看看)

       RK平台Android 7.1.1版本下,为满足客户需求提供静默安装/卸载的API,团队选择了自行实现。

       初期探索发现,通过PM命令实现安装基本可行,中国源码网站且能够跳过未知来源进行安装。源码 贵然而,尝试使用PM命令卸载时却遭遇异常问题。经过多番研究,团队最终决定深入系统源代码实现静默安装与静默卸载功能。

       实际上,桌面操作的卸载功能最终调用的是PackageManager.deletePackage方法。然而,betdice源码此方法为隐藏API,虽然可通过引入framework.jar调用,操作繁琐。因此,qince源码团队决定利用PM命令作为卸载解决方案。

       实现原理基于PM命令的执行,实际上是由framework层的PackageInstallerService类负责处理。为允许非ROOT级用户执行卸载操作,Careerbuilder 源码团队修改了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()入口函数的类。

       è½¬è½½