adb之am、pm命令

来源:互联网 发布:微信公众平台跳转淘宝 编辑:程序博客网 时间:2024/05/17 08:49

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 <包名或组件名> enable PMS.setEnabledSetting disable <包名或组件名> disable PMS.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);        }    }
原创粉丝点击