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
ターゲットサイズの縮小
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、携帯アプリリスト情報を取得する
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コードでこの機能を完了するには複雑ではありませんが、少なくとも1つのandroid環境が必要です.adbでは、adbウィンドウで次のコマンドを入力するだけで完了します.
am start -n com.yuanhh.app/.MainActivity -es website gityuan.com

amコマンドは、サービス、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パラメータが存在する場合、startActivity AndWait()メソッドを呼び出して実行します.そうでない場合、startActivity AssUser()です.
三、応用特例の起動
アプリケーションを起動する方法は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);
        }
    }