十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
个人了解到的静默安装的方式有以下4种:
十余年的山丹网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整山丹建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“山丹网站设计”,“山丹网站推广”以来,每个客户项目都认真落实执行。
我看了一些第三方的应用市场,一般在设置下都会有前两种静默安装的方式可供选择,而后两种静默安装的方式主要是厂商自己的应用市场使用。
如果在7.0的系统上使用第三种静默安装的方式会出现以下错误:
参考:
Android7.0的静默安装失败问题研究
Android N 静默安装和卸载
主要步骤如下:
我试了以上两篇文章的介绍的方法,还是失败,提示Failure [null],不知道怎么破了,可能是厂商的定制问题吧。。。还在思考中。。。
上面 主要分析到APK的copy过程,这里我们开始分析APK的加载过程。直接看之前流程进行到下一步的 processPendingInstall() 方法:
installPackagesLI() 可以支持单包和多包加载,加载主要分为4个阶段:
执行完2-2的 scanPackageTrackLI() 之后Pms的两大核心数据结构都已经准备好了,一个是代表扫描结果的final ArrayMapString, PackageParser.Package mPackages = new ArrayMap();中的PackageParser.Package,另外一个是mSettings.mPackages的PackageSetting 数据结构,这两个结构PackageParser.Package代表扫描结果,为静态数据,扫描完成后就不会发生变化。PackageSetting用于存储安装应用的动态数据,如权限授予情况等。PackageParser.Package由于是静态数据,扫描apk就可以获取。PackageSetting生成之后会被记录到文件中,以后每次系统启动都会重新加载。
Android App的安装可以分为有界面的安装和无界面的安装。
有界面的安装其实就是调用系统App(PackageInstaller)去安装apk,打开安装apk应用之后,点击安装按钮执行startInstall方法,然后就进入安装中界面开始安装,安装成功或者失败都会有对应的回调。内部其实也是使用PackageManager的installExistingPackage方法,通过binder机制,调用到PackageManagerService的installExistingPackage方法,最终调用到installExistingPackageAsUser方法安装,而 安装的核心原理其实就是将apk文件拷贝到系统可识别的重要的文件目录 :
无界面安装是调用adb命令,执行到一个c写的commandline脚本,调用 install_app 方法,然后再调用 pm_command ,然后执行到pm脚本,执行 run 方法,调用 runinstall ,然后调用 installPackageAsUser 通过AMS执行安装。
说到App的启动,就需要从开机开始说起,Android开机会先把所有应用安装一遍就是把apk拷贝到对应的目录(这也是Android开机慢的原因)。
整个流程如下:
其实App的启动,除了刚开机是不一样之外,正常时候基本与Activity的启动非常接近。