美文网首页
android应用程序的安装方式与原理

android应用程序的安装方式与原理

作者: Tim_Hu | 来源:发表于2019-06-26 15:45 被阅读0次

    From: https://www.cnblogs.com/meizixiong/p/3551891.html

    https://www.cnblogs.com/ouyanliu/articles/7100682.html

    android应用程序的安装方式与原理

    四种安装方式:

    1.系统应用安装――开机时完成,没有安装界面

    2.网络下载应用安装――通过market应用完成,没有安装界面

    3.ADB工具安装――没有安装界面。

    4.第三方应用安装――通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。

    应用安装的流程及路径
    应用安装涉及到如下几个目录:

    system/app ---------------系统自带的应用程序,获得adb root权限才能删除

    data/app ---------------用户程序安装的目录。安装时把 apk文件复制到此目录
    data/data ---------------存放应用程序的数据
    data/dalvik-cache--------将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)

    安装过程:

    复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。

    卸载过程:

    删除安装过程中在上述三个目录下创建的文件及目录。

    安装过程详解

    安装应用的过程解析

    一.开机安装
    PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务

    (源文件路径:android\frameworks\base\services\java\com\android\server\PackageManagerService.java)

    PackageManagerService服务启动的流程:

    1.首先扫描安装“system\framework”目录下的jar包

    2.扫描安装系统system/app的应用程序

    3.制造商的目录下/vendor/app应用包

    4.扫描“data\app”目录,即用户安装的第三方应用

    5.扫描" data\app-private"目录,即安装DRM保护的APK文件(一个受保护的歌曲或受保 护的视频是使用 DRM 保护的文件)

    并且从该扫描方法中可以看出调用了scanPackageList()

    private PackageParser.Package scanPackageList(File scanFile,int parseFlags, int scanMode, long currentTime)

    跟踪scanPackageList()方法后发现,程序经过很多次的if else 的筛选,最后判定可以安装后调用了 mInstaller.install

    mInstaller.install() 通过

    LocalSocketAddress address = new LocalSocketAddress(

                "installd", LocalSocketAddress.Namespace.RESERVED);
    

    指挥installd在C语言的文件中完成工作

    PackageManagerService小节 :

    1)从apk, xml中载入pacakge信息, 存储到内部成员变量中, 用于后面的查找. 关键的方法

    是scanPackageList().
    

    2)各种查询操作, 包括query Intent操作.
    3)install package和delete package的操作. 还有后面的关键方法是installPackageList().

    二、从网络上下载应用:

    下载完成后,会自动调用Packagemanager的安装方法installPackage()

    PackageManagerService类的installPackage()函数

    其中是通过PackageHandler的实例mhandler.sendMessage(msg)把信息发给继承Handler的类HandleMessage()方法......最后终于回到了和开机安装一样的地方.与开机方式安装调用统一方法。

    三、从ADB工具安装

    其入口函数源文件为pm.java

    (源文件路径:android\frameworks\base\cmds\pm\src\com\android\commands\pm\pm.java)

    其中\system\framework\pm.jar 包管理库

    包管理脚本 \system\bin\pm 解析

    其中的PackageInstallObserver obs = new PackageInstallObserver();

    mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,

                    installerPackageName);   
    

    四、从SD卡安装

      系统调用PackageInstallerActivity.java(/home/zhongda/androidSRC/vortex-8inch-for-hoperun/packages/apps/PackageInstaller/src/com/android/packageinstaller)
    

    进入这个Activity会判断信息是否有错,然后调用

      private void initiateInstall()判断是否曾经有过同名包的安装,或者包已经安装
    

    通过后执行private void startInstallConfirm() 点击OK按钮后经过一系列的安装

    相关文章

      网友评论

          本文标题:android应用程序的安装方式与原理

          本文链接:https://www.haomeiwen.com/subject/sdiccctx.html