包管理之pm命令

Android 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。


<think>首先,用户的问题是关于“pm list packages -d”命令的含义、用法及相关信息。我需要参考提供的站内引用。 从引用[1]中: - “pm list packages -d:只输出禁用的包名” - 它还说:“使用-d参数:只输出禁用的包名: pm list packages -d” 从引用[2]中: - 它提到了“列出已经安装的第三方packagename”,但针对的是“-3”参数,不是“-d”。 - 引用[2]没有直接提到“-d”,但说明了pm命令的上下文。 用户上一次的问题和我的回答:用户之前的问题是关于“pm list packages -d”命令的含义等,我的回答是基于这个新查询。系统提示说:“请尽可能多的参考用户上一次的问题和你的回答”,但在这个会话中,用户这是第一次问这个问题。查看对话历史: - 系统指令是初始的。 - 用户现在的问题是:“我想了解 'pm list packages -d' 命令的含义、用法及相关信息” 所以,我需要基于引用和我的知识来回答。系统指令要求使用中文回答,结构清晰。 关键点: - **含义**:pm list packages -d 命令用于列出所有禁用的包名。只输出那些被禁用的包。 - **用法**:在终端或adb shell中使用,格式为 `pm list packages -d`。 - **相关信息**: - 它是Android系统中的一个adb命令,用于调试和管理应用。 - 参数“-d”指定只显示禁用的包。 - 其他相关参数如“-e”用于启用的包,“-s”用于系统应用等。 从引用[1],有更多细节: - “pm list packages -d:列出所有禁用的包名” - 在示例中:“使用-d参数:只输出禁用的包名: pm list packages -d” 我还应该解释命令的context: - pm命令是Android的包管理命令,用于管理应用程序。 - 常见于开发调试中。 回答结构: 1. **含义**:解释命令的作用。 2. **用法**:描述如何使用。 3. **相关命令**:简要提到其他相关命令如“-e”、“-s”等,以提供上下文。 4. **示例**:给出一个示例输出,如果有的话(从引用中,没有具体示例,但可以描述)。 5. **应用场景**:说明何时使用此命令。 系统指令要求: - 所有行内数学表达式使用$...$,但这里没有数学内容,所以不需要。 - 独立公式单独成段,但这里不适用。 - LaTeX语法正确,但无数学。 - 使用中文回答。 - 生成相关问题:指令说“生成相关问题”,所以在回答结束时添加相关问题部分。 - 引用的段落末尾添加引用标识,如[^1]。 引用来源:[^1]和[^2],来自提供的引用。 最后,生成相关问题: - 类似示例中的:“§§相关问题§§” - 例如:1. 如何列出所有启用的应用?2. pm命令的其他用途?3. 如何启用或禁用包? 完整回答结构: - 先回答用户的问题,结构清晰。 - 然后添加相关问题部分。 </think>### pm list packages -d 命令详解 根据您的问题,我将全面解释 `pm list packages -d` 命令的含义、用法及相关信息。Android 的 `pm` 命令包管理器(Package Manager)工具的一部分,主要用于调试和管理设备上的应用程序包(APK)。它在开发、测试和系统维护中非常实用,尤其是在定位应用问题时[^1]。下面我将逐步展开说明。 #### 1. **命令含义** - `pm list packages -d` 命令专门用于 **列出所有禁用的包名(Package Name)**。这里的“禁用”指的是那些被用户或系统管理员手动停用的应用包,它们在设备上安装了但当前处于非激活状态,不会在后台运行或出现在应用列表中[^1]。 - 关键点: - 只输出包名本身,不包含其他详细信息(如应用名称或路径)。 - 适用于快速检索被禁用的系统应用或用户应用,帮助诊断问题(例如,避免不必要的资源占用或安全风险)[^1]。 #### 2. **命令用法** - **基本语法**:在 Android 设备的终端或通过 ADB(Android Debug Bridge)执行命令。 ```bash pm list packages -d ``` - 例如,在 ADB shell 中运行: ```bash adb shell pm list packages -d ``` - **参数解释**: - `-d`:这是可选参数(Option),指定命令只输出“禁用的”包名。如果不加 `-d`,默认命令 `pm list packages` 会列出所有包(包括启用的和禁用的)。 - 其他常用参数(供参考): - `-e`:只输出启用的包名(如 `pm list packages -e`)。 - `-s`:只输出系统应用包名(如 `pm list packages -s`)。 - `-3`:只输出第三方应用包名(如 `pm list packages -3`)。 - `-u`:输出未安装包信息(如 `pm list packages -u`)[^1][^2]。 - **输出格式**: - 输出结果为一行一个包名,格式为 `package:包名`。 - 示例输出(基于典型设备): ```bash package:com.android.deskclock package:com.example.disabledapp ``` 这表示 `com.android.deskclock` 和 `com.example.disabledapp` 是当前禁用的包。实际输出取决于设备安装的应用状态。 #### 3. **相关信息** - **应用场景**: - **调试辅助**:在开发或测试中,快速识别哪些应用被禁用,避免它们干扰其他应用的功能(如权限冲突或后台服务)。 - **系统优化**:管理员可以使用此命令批量检查被禁用的应用,优化设备性能和存储空间。 - **安全审计**:列出禁用的包有助于发现潜在的风险应用(如不必要的系统组件),确保设备安全[^1][^2]。 - **注意事项**: - 使用此命令需要 ADB 访问权限(通常通过 USB 调试启用)。 - 禁用的包通常不会消耗资源,但可以手动重新启用(通过 `pm enable 包名` 命令)。 - 在 Android 系统中,某些系统应用默认禁用是为了节省资源;此命令可帮助识别它们[^1]。 - **相关命令对比**: - 与 `pm list packages -e`(列出启用的包)结合使用,可以全面分析应用状态。 - 其他实用命令: - `pm list permission-groups`:列出所有权限组。 - `pm list permissions -d`:列出危险权限。 - 这些命令常用于高级调试(如权限问题调查)[^1][^2]。 #### 4. **建议使用步骤** 如果您想实际操作,建议按以下步骤: 1. 连接 Android 设备到电脑,并启用 USB 调试。 2. 打开终端,运行 ADB shell: ```bash adb shell ``` 3. 在 ADB shell 中执行命令: ```bash pm list packages -d ``` 4. 分析输出结果(禁用包名),并根据需要采取行动(如启用或卸载)。 `pm list packages -d` 是一个高效的调试工具,特别适合开发者或高级用户快速隔离问题应用[^1][^2]。如果您有具体设备或场景,可以提供更多细节进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值