包管理之pm命令

       Android系统提供了pm命令,可以在一定程度上为手机系统开发者提供了便利。本文会简单介绍相关的文件和本人经常使用的命令。


一、pm在手机中的位置

          /system/bin/pm

        -rwxr-xr-x root     shell         191 2014-01-06 12:44 pm


二、相关文件

    /frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java

    就这一个类,其中有一个main方法:

    public static void main(String[] args) {
        new Pm().run(args);
    }

      其中会根据用户不同的输入参数去执行不同的方法,当然,核心还是要通过PackageManagerService提供的相关服务来实现。


三、常用命令

       可以直接使用adb shell pm XXX来执行pm命令,或者先进入到shell(adb shell),然后执行pm XXX等命令。

       直接输入pm,可以查看它的帮助文档。



1.安装、卸载apk

      pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f]
                      [--algo <algorithm name> --key <key-in-hex> --iv <IV-in-hex>]
                      [--originating-uri <URI>] [--referrer <URI>] PATH

      pm uninstall [-k] PACKAGE


      pm install: installs a package to the system.  Options:

       -r   重新安装已经存在的app,保留它原有的数据    有时安装时会报错:应用已存在,添加此参数就不会报错

      -s   将app安装到SD card中

      -f    将app安装到内部flash中,一般应该会安装到data/app目录下

       还有其它选项,这里不介绍。


2.列表显示所有apk

        pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

        举例:输入pm list packages,就可以看到手机中的所有应用,如下

root@android:/ # pm list packages                                              
package:android
package:com.Ama.PanicFlight
package:com.android.backupconfirm
package:com.android.browser
package:com.android.browser.provider
package:com.android.calculator2
package:com.android.calendar

……

         那几个可选的参数也非常有用。

         -f   同时显示对应的apk文件的绝对路径

         举例:查找包名中包含vending的apk的路径或是apk名称

root@android:/ # pm list packages -f vending                                   
package:/system/app/Phonesky.apk=com.android.vending

        这样我们就知道Phonesky.apk是它的文件名称


        -d   只显示被隐藏的apk

        -e   只显示未被隐藏的apk

        -s    只显示系统apk,应该是system目录下的apk,包括/system/framework, /system/app,/vendor(它是个链接,链接到/system/vendor,所以也是system目录下的)

        -3   只显示第三方的apk

        -u    还包含未安装的apk


3.获取/修改系统默认安装apk路径的信息

       pm set-install-location [0/auto] [1/internal] [2/external]
       pm get-install-location

      

       0 [auto]:         让系统决定安装在什么位置
       1 [internal]:   安装在设备内部空间
       2 [external]:  安装在外部空间中

       一般内部就是只data/app目录下,外部是指SD卡中,装在内部空间中的apk之后就不能移动到SD卡中,而安装在SD卡中的可以通过settings-Apps去移动apk到内部空间。

       一般地,auto也意味着internal,这点本人不确定。

       需要说明一点,这里的安装位置并不意味着apk就会安装到相应的目录中,起决定性作用的还是apk自身是否对安装位置有要求,它可以再AndroidManifes.xml文件中通过声明installLocation(auto、internalOnly、preferExternal),如果apk没有指明这个,那么我们这里的才会生效。


4.根据包名获取apk的位置

       pm path PACKAGE

       举例:pm path com.android.vending

130|root@android:/ # pm path com.android.vending
package:/system/app/Phonesky.apk


5.列表显示所有的features和libraries

       pm list features
       pm list libraries

     


四、小结

       命令如果有需要,多使用就会熟练。

       pm命令只是把PackageManagerService提供的某些服务提供了一个接口方便使用,要了解详情,需要研究PackageManagerService。


你可能感兴趣的:(包管理之pm命令)