导航:首页 > 程序命令 > am命令

am命令

发布时间:2022-01-13 11:23:12

A. 怎么在应用运行adb命令

android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am.
usage: am [subcommand] [options]
start an Activity: am start [-D]
-D: enable debugging
send a broadcast Intent: am broadcast
start an Instrumentation: am instrument [flags]
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e : set argument to
-p : write profiling data to
-w: wait for instrumentation to finish before returning
start profiling: am profile start
stop profiling: am profile stop
specifications include these flags:
[-a ] [-d ] [-t ]
[-c [-c ] ...]
[-e|--es ...]
[--ez ...]
[-e|--ei ...]
[-n ] [-f ] []
启动的方法为:
$ adb shell
$ am start -n {包(package)名}/{包名}.{活动(activity)名称}

B. 如何防止一个activity被am命令行打开

方法:
对于一个service,可以首先把它设为在前台运行:
public void MyService.onCreate() {
super.onCreate();
Notification notification = new Notification(android.R.drawable.my_service_icon,
"my_service_name",
System.currentTimeMillis());
PendingIntent p_intent = PendingIntent.getActivity(this, 0,
new Intent(this, MyMainActivity.class), 0);
notification.setLatestEventInfo(this, "MyServiceNotification, "MyServiceNotification is Running!", p_intent);
Log.d(TAG, String.format("notification = %s", notification));
startForeground(0x1982, notification); // notification ID: 0x1982, you can name it as you will.
}

重要设置-------------------------------
相较于/data/app下的应用,放在/system/app下的应用享受更多的特权,比如若在其Manifest.xml文件中设置persistent属性为true,则可使其免受out-of-memory killer的影响。如应用程序'Phone'的AndroidManifest.xml文件:
<application android:name="PhoneApp"
android:persistent="true"
android:label="@string/dialerIconLabel"
android:icon="@drawable/ic_launcher_phone">
...
</application>
设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作。

这样设置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services)
# cat /proc/255/oom_adj

设置后的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed)
# cat /proc/155/oom_adj
-12 # 这是CORE_SERVER_ADJ
注:init进程的oom_adj为-16(即SYSTEM_ADJ): cat /proc/1/oom_adj

Android相关部分分析:
在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代码:
final ProcessRecord addAppLocked(ApplicationInfo info) {
ProcessRecord app = getProcessRecordLocked(info.processName, info.uid);

if (app == null) {
app = newProcessRecordLocked(null, info, null);
mProcessNames.put(info.processName, info.uid, app);
updateLruProcessLocked(app, true, true);
}

if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))
== (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
app.persistent = true;
app.maxAdj = CORE_SERVER_ADJ; // 这个常数值为-12。
}
if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) {
mPersistentStartingProcesses.add(app);
startProcessLocked(app, "added application", app.processName);
}

return app;
}

可见要想成为core service (即app.maxAdj = CORE_SERVER_ADJ(-12)),应用程序需要FLAG_SYSTEM和FLAG_PERSISTENT两个标志,FLAG_SYSTEM指的是应用位于/system/app下,FLAG_PERSISTENT就是指persistent属性。

而对于frameworks/base/services/java/com/android/server/SystemServer.java,则调用
ActivityManagerService.setSystemProcess();
把自己的 app.maxAdj 设置成SYSTEM_ADJ,即-16。

原理:
Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。由此带来三个问题:
1) 回收规则: 什么时候回收与回收哪一个?
2) 避免误杀: 如何阻止被回收?
3) 数据恢复与保存: 被回收了怎么办?

Android将进程分为6个等级,它们按优先级顺序由高到低依次是:
1.前台进程( FOREGROUND_APP)
2.可视进程(VISIBLE_APP )
3. 次要服务进程(SECONDARY_SERVER )
4.后台进程 (HIDDEN_APP)
5.内容供应节点(CONTENT_PROVIDER)
6.空进程(EMPTY_APP)

C. adb shell pm 命令无效怎么办

am全称activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。当你在adb shell命令下执行am命令:
am <command>
你也可以在adb shell前执行am命令:
adb shell am start -a android.intent.action.VIEW

D. 华为交换机MAC地址绑定,am指令怎么用

是在SYSTEM VIEW后无线用am user-bind mac-addr..... ?如果是这样的话,就是交换机的软件需要升级、打H3C 800电话或者看下说明书,把交换机升级下就AM命令就能用了

麻烦采纳,谢谢!

E. adb shell am start -W -n 命令 在4.4系统上启动不了应用,是怎么回事

你的命令看起来没问题,启动一个Activity的确可以用
adb shell am start -W -n 包名/包名+Activity名来启动,例如:
adb shell am start -W -n com.android.systemui/com.android.systemui.usb.UsbStorageActivity
不知道你这边是否发生了什么错误,什么现象,有没有什么提示?
可以在调用命令的时候看下log,例如从这种LOG开始往下跟,ActivityManager( XXX): START u0 {flg=XXXX cmp=XXXX} from pid XXX。

F. 思科的交换机有am(access management) 命令

应该没有的,最起码在2960和36系列的交换机里面没有的,至于更高层的我也不大清楚

G. 在CAD里AM命令起什么作用啊

cad里面没有am,不过有个ma(MATCHPROP)是格式刷命令

H. 用adb shell am命令时候输入了adb shell am start -n JDRU.apk以后为啥提示Error:bad component name

bad component name,提示你参数不正确。想必你也看到这句话之前的一堆内容了,那些都是介绍shell am命令的,这里只讲重点。

$adbshellamstart
usage:am[subcommand][options]
usage:amstart[-D][-W][-P<FILE>][--start-profiler<FILE>]
[--samplingINTERVAL][-RCOUNT][-S][--opengl-trace]
[--user<USER_ID>|current]<INTENT>

那么咱们启动app使用的intenet,至于什么是intent,自己去了解下。再来看看intent的说明

<INTENT>:
[-a<ACTION>][-d<DATA_URI>][-t<MIME_TYPE>]
[-c<CATEGORY>[-c<CATEGORY>]...]
[-e|--es<EXTRA_KEY><EXTRA_STRING_VALUE>...]
[--el<EXTRA_KEY><EXTRA_LONG_VALUE>...]
[-n<COMPONENT>][-p<PACKAGE>][-f<FLAGS>]
........
(省略N多行)

只看重点 -n 这行,那么按照说明,启动一个app应该是这样的构造,当然后面可以加参数什么的

amstart-n{包(package)名}/{包名}.{活动(activity)名称}

包名以及启动的入口都可以从aapt中得到信息,分别为

package: name和launchable-activity

一个网上最简单的例子:

amstart-ncom.android.calculator2/com.android.calculator2.Calculator

自己多试试就会成功,找对包名类名和入口,没问题的

I. android 中用am命令在浏览器的原窗口打开新的url

你好:
呵呵,我可能明白你的意思,不过,我需要说的是,am 也就是activity manager 是可以用来开启应用的,你希望通过一条现成的命令来将URL 输入到地址栏中的话,我可能很负责任的告诉你,木有办法的啦,需要自己写instrumentationtestcase 才能实现

阅读全文

与am命令相关的资料

热点内容
linuxvi下一个 浏览:973
安卓手机的应用锁怎么解 浏览:733
linux增加路径 浏览:845
sql身份证号最后四位加密 浏览:533
xp系统表格加密 浏览:854
光遇安卓军大衣什么时候上线 浏览:838
android应用商店图标 浏览:341
java计算圆的面积 浏览:643
应用编译优化recovery 浏览:577
域控命令n 浏览:258
php导出文件 浏览:13
谷歌地图网页版无法连接服务器地址 浏览:298
菜鸟工具在线编译python 浏览:858
栅格化命令有何作用 浏览:823
为什么压缩文件不能解压 浏览:311
足球app哪个软件好 浏览:96
产品经理逼疯程序员的一天 浏览:17
修改svn服务器ip地址 浏览:584
下列关于编译说法正确的是 浏览:246
java马克思 浏览:118