Android adb shell 查看包名、权限、进程信息
2018年04月25日 14:38:57 Yjnull 阅读数 6041
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014306335/article/details/80079067
adb 相关命令
- adb 删除系统应用 :
adb shell pm uninstall -k --user 0 包名
(注意风险) - adb 运行应用 :
adb shell am start -n 包名/包名.活动名
- adb 查看手机上应用包名 :
adb shell pm list packages
- 查看手机上 apk 文件的安装位置 :
adb shell pm list packages -f
- 查看危险权限:
adb shell pm list permissions -d -g
- 查看进程信息:
adb shell ps
或者adb shell ps | grep 包名
- zsh 查看当前使用主题
echo \$ZSH_THEME
或者echo $RANDOM_THEME
(使用 random 主题时)
Android 各种目录
Environment.getExternalStorageDirectory()
:/storage/emulated/0
Context.getExternalCacheDir()
:/storage/emulated/0/Android/data/包名/cache
Context.getFilesDir()
:/data/user/0/包名/files
Context.getCacheDir()
:/data/user/0/包名/cache
.gitignore规则不生效的解决方法:
把某些目录或文件加入忽略规则,发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:
git rm -r --cached <file>
git add .
git commit -m ‘message'
- 1
- 2
- 3
git操作之撤销 commit
git reset --soft HEAD^
- 1
该操作参考 git使用情景2
通过命令安装了QQ的apk文件后,准备卸载时,发现用abd shell pm list packages这个命令,查不到QQ对应的包名,不知道什么原因,然后使用adb shell pm list packages -3这个输出第三方的包可以查到
adb shell pm list packages [options] <FILTER>
打印所有软件包,可选择只打印软件包名称中包含<FILTER>的软件包。
不使用参数:adb shell pm list packages,打印设备/模拟器上的所有软件包
不使用参数:adb shell pm list packages,打印设备/模拟器上的所有软件包
使用-f参数:adb shell pm list packages -f,输出包和包相关联的文件
使用-d参数:adb shell pm list packages -d,只输出禁用的包。由于本机禁用没有,输出为空。
使用-e参数:adb shell pm list packages -e,只输出启用的包。
使用-s参数:adb shell pm list packages -s,只输出系统的包。
使用-3参数:adb shell pm list packages -3,只输出第三方的包。
使用-i参数:adb shell pm list packages -i,只输出包和安装信息(安装来源)。
使用-u参数:adb shell pm list packages -u,只输出包和未安装包信息(安装来源)。
使用--user参数:adb shell pm list packages --user <USER_ID>,根据用户id查询用户的空间的所有包,USER_ID代表当前连接设备的顺序,从零开始:
使用-e参数且设置过滤条件:adb shell pm list packages -e "ximalaya",只输出启用的包。
Android 通过ADB Shell 强行关闭和启动应用
2018年10月16日 10:39:23 乐自由我 阅读数 2894
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lindroid/article/details/83069028
1.在PC上通过adb 关闭/启动应用
1)通过adb连接设备 adb connect 192.168.1.XX , 当然也可以通过USB 直接连接;
2) 执行adb shell ps 查看当前正在运行的进程列表,可以获取进程的名字;
3)执行adb shell am force-stop 包名 即可强行关闭进程,eg: adb shell am force-stop com.xxx.xxx
执行adb shell am start -n 包名/启动类的名称 , eg: adb shell am start -n com.xxx.xxx/com.xxx.xxx.SplashActivity
2.在代码中:
-
try {
-
//关闭其他应用
-
Process exec = Runtime.getRuntime().exec("am force-stop 包名");
-
//打开其他应用
-
Process exec = Runtime.getRuntime().exec("am start -n 包名/启动类名称");
-
if (exec.waitFor() == 0) {
-
//执行成功
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
其中,Runtime.getRuntime.exec() 时可能会阻塞UI线程, 所以建议是在子线程中执;
可以参考我的另一篇: 代码模拟物理按键 https://blog.csdn.net/lindroid/article/details/83062250
操作进程,需要权限
-
//允许程序启动其他应用程序
-
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
-
//允许程序调用killBackgroundProcesses(String).方法结束后台进程
-
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
-
//如果你使用adb connect
-
<uses-permission android:name="android.permission.INTERNET" />
如果想彻底退出当前进程
-
int pid = android.os.Process.myPid();
-
String command = "kill -9 "+ pid;
-
try {
-
Runtime.getRuntime().exec(command);
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
退出当前应用,并强行回到桌面
-
Intent startMain = new Intent(context, LoginActivity.class);
-
startMain.addCategory(Intent.CATEGORY_HOME);
-
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
startMain.addCategory(Intent.ACTION_MAIN);
-
context.startActivity(startMain);
-
System.exit(0);
1.查看进程
1 |
|
2.杀死进程
方法1:强制停止APP进程,不会清除APP进程在系统中产生的数据
1 |
|
执行该命令后没有输出,手机对应进程已被杀死。
方法2:停止APP进程,并且清除这个APP进程产生的所有数据,相当于reset
1 |
|
执行该命令后输出success即表示命令执行成功,app进程被杀死,且会清楚所有数据,相当于卸载重装的效果,一般不建议使用。