adb之am、pm命令

PM命令

pm即package manager,使用pm命令可以去模拟android行为或者查询设备上的应用信息等

1、命令格式:

pm

2、命令列表:

命令功能实现方法
dump dump信息AM.dumpPackageStateStatic
clear 清空App数据AMS.clearApplicationUserData
uninstall [options]卸载应用IPackageInstaller.uninstall
force-dex-opt dex优化PMS.forceDexOpt
trim-caches <目标size>紧缩cache目标大小PMS.freeStorageAndNotify
list packages列举app包信息PMS.getInstalledPackages
get-install-location获取安装位置PMS.getInstallLocation
path 查看App路径PMS.getPackageInfo
install [options] 安装应用PMS.installPackageAsUser
hide 隐藏应用PMS.setApplicationHiddenSettingAsUser
unhide 显示应用PMS.setApplicationHiddenSettingAsUser
enable <包名或组件名>enablePMS.setEnabledSetting
disable <包名或组件名>disablePMS.setEnabledSetting
set-install-location设置安装位置PMS.setInstallLocation
get-max-users最大用户数UserManager.getMaxSupportedUsers

例如:

1、获取手机app列表信息

adb shell pm list packages 

2、输出安装包的APK路径

adb shell pm path com.android.launcher3

3、删除与包相关的所有数据:清除数据和缓存

adb shell pm clear com.android.launcher3

AM命令

am即activity manager,可以使用am命令去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播等

一、常用命令

作为一名开发者,相信对adb指令一定不会陌生。那么在手机连接adb后,可通过am命令做很多操作:

(1) 拨打电话10086

adb shell am start -a android.intent.action.CALL -d tel:10086

(2) 打开网站www.gityuan.com

adb shell am start -a android.intent.action.VIEW -d  http://gityuan.com

(3) 启动Activity

启动包名为com.yuanhh.app,主Activity为.MainActivity,且extra数据以”website”为key, “yuanh.com”为value。通过java代码要完成该功能虽然不复杂,但至少需要一个android环境,而通过adb的方式,只需要在adb窗口,输入如下命令便可完成:

am start -n com.yuanhh.app/.MainActivity -es website gityuan.com

am命令还可以启动Service、Broadcast,杀进程,监控等功能,这些功能都非常便捷调试程序,接下来讲述关于am更多更详细的功能。

4、杀死进程

adb shell am force-stop com.android.fmradio

二、 Options

主要是启动Activity命令am start [options] 使用options参数,接下来列举Activity命令的[options]参数:

-D: 允许调试功能

-W: 等待app启动完成

-R : 重复启动Activity COUNT次

-S: 启动activity之前,先调用forceStopPackage()方法强制停止app.

–opengl-trace: 运行获取OpenGL函数的trace

–user | current:
指定用户来运行App,默认为当前用户。

–start-profiler : 启动profiler,并将结果发送到 ;

-P : 类似

–start-profiler,不同的是当app进入idle状态,则停止profiling

–sampling INTERVAL: 设置profiler

取样时间间隔,单位ms;
启动Activity的实现原理: 存在-W参数则调用startActivityAndWait()方法来运行,否则startActivityAsUser()。

三、启动应用特例

启动应用的方法一般是packageName/className,但是如果只知道应用的包名,而不知道启动activity的名字,该怎么启动呢?

public static void startAppWithPackageName(Activity context, String packagename) {

        // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
        PackageInfo packageinfo = null;
        try {
            packageinfo = context.getPackageManager().getPackageInfo(packagename, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (packageinfo == null) {
            return;
        }

        // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        resolveIntent.setPackage(packageinfo.packageName);

        // 通过getPackageManager()的queryIntentActivities方法遍历
        List<ResolveInfo> resolveinfoList = context.getPackageManager()
                .queryIntentActivities(resolveIntent, 0);

        Log.i(TAG, "resolveinfoList.size=" + resolveinfoList.size());
        if (resolveinfoList.size() == 0) {
            return;
        }

        ResolveInfo resolveinfo = resolveinfoList.iterator().next();
        if (resolveinfo != null) {
            // packagename = 参数packname
            String packageName = resolveinfo.activityInfo.packageName;
            // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
            String className = resolveinfo.activityInfo.name;
            // LAUNCHER Intent
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);

            // 设置ComponentName参数1:packagename参数2:MainActivity路径
            ComponentName cn = new ComponentName(packageName, className);

            intent.setComponent(cn);
            context.startActivity(intent);
        }
    }
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值