为什么安装包在原软件已经电脑怎样彻底卸载软件的情况下扔提示签名不一致?怎么解决呢?(adb也试过了)

adb logcat -d 这个命令是在时间上倒过来用的 就是你先操作 然后敲这个命令 打出来的log就是你刚操作那段时间的log 而且自动退出log模式

注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。

  • 查询已连接设备/模拟器
  • 包名包含某字符串的应用
  • 复制设备里的文件到电脑
  • 复制电脑里的文件到设备
  • 按 tag 和级别过滤日志
  • 重新挂载 system 分区为可写
  • 查看连接过的 WiFi 密码
  • 检测设备是否已 root

adb 命令的基本语法如下:

如果有多个设备/模拟器连接,则需要为命令指定目标设备。

指定当前唯一通过 USB 连接的 Android 设备为命令目标
指定当前唯一运行的模拟器为命令目标
指定相应 serialNumber 号的设备/模拟器为命令目标

遇到多设备/模拟器的情况均使用这几个参数为命令指定目标设备,下文中为简化描述,不再重复。

(一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。)

所以如果 adbd 以普通权限执行,有些需要 root 权限才能执行的命令无法直接用 adb xxx 执行。这时可以 adb shell 然后 su 后执行命令,也可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令了。

现在再运行 adb shell,看看命令行提示符是不是变成 # 了?

默认端口为 5037。

查询已连接设备/模拟器

  • offline —— 表示设备未连接成功或无响应。

  • device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。

  1. 没有设备/模拟器连接成功。

  2. 设备/模拟器未连接到 adb 或无响应。

通过 USB 连接来正常使用 adb 需要保证几点:

  1. 包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。

  2. Android 设备的开发者选项和 USB 调试模式已开启。

    可以到「设置」-「开发者选项」-「Android 调试」查看。

    如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。

  3. 这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。

  4. 通过 USB 线连接好电脑和设备后确认状态。

除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!

  1. 将 Android 设备与将运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  2. 将设备与电脑通过 USB 线连接。

    应确保连接成功(可运行 adb devices 看是否能列出该设备)。

  3. 找到设备的 IP 地址。

    一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到。

  4. 通过 IP 地址连接设备。

如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。

查看应用列表的基本命令格式是

即在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:

显示应用关联的 apk 文件

包名包含某字符串的应用

比如要查看包名包含字符串 mazhuang 的应用列表,命令:

当然也可以使用 grep 来过滤:

adb install 后面可以跟一些参数来控制安装 APK 的行为,常用参数及含义如下:

如果见到类似如下输出(状态为 Success)代表安装成功:

而如果状态为 Failure 则表示安装失败。常见安装失败输出代码、含义及可能的解决办法如下:

无效的 APK 文件名 确保 APK 文件名里无中文
已经安装过签名不一样的同名应用,且数据没有移除
请求的共享用户存在但签名不一致
安装包使用了设备上不可用的共享库
dex 优化验证失败或空间不足
设备系统版本低于应用要求
设备系统版本高于应用要求
应用使用了设备不可用的功能
确认 sdcard 可用,或者安装到内置存储
切换安装位置,添加或删除 -s 参数
一般为 sdcard,确认 sdcard 可用或安装到内置存储
应用与调用程序期望的不一致
以前安装过该应用,与本次分配的 UID 不一致 清除以前安装过的残留文件
已经安装了该应用更高版本
已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限
指定路径不是文件,或不是以 .apk 结尾
已安装该应用,且签名与 APK 文件不一致 先卸载设备上的该应用,再安装
manifest 文件里没有或者使用了无效的包名
manifest 文件里指定了无效的共享用户 ID
解析 manifest 文件时遇到结构性错误
应用尝试定义一个已经存在的权限名称
应用包含设备的应用程序二进制接口不支持的 native code
应用安装需要在设备上确认,但未操作设备或点了取消
先将设备与 adb 连接成功
先将设备与 adb 连接成功
先将设备与 adb 连接成功

<packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。

表示卸载 360 手机卫士。

<packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

表示清除 360 手机卫士的数据和缓存。

用于决定 intent 对象的选项如下:

表示调起微信的某 Service。

表示停止 360 安全卫士的一切进程与服务。

复制设备里的文件到电脑

其中 电脑上的目录 参数可以省略,默认复制到当前目录。

复制电脑里的文件到设备

adb shell 里有个很实用的命令叫 input,通过它可以做一些有趣的事情。

拍照(需要在相机应用里)
移动光标到行首或列表顶部
移动光标到行末或列表底部

下面是 input 命令的一些用法举例。

执行效果相当于按电源键。

可以通过上文讲述过的模拟电源键来切换点亮和熄灭屏幕,但如果明确地想要点亮或者熄灭屏幕,那可以使用如下方法。

如果锁屏没有密码,是通过滑动手势解锁,那么可以通过 input swipe 来解锁。

命令(参数以机型 Nexus 5,向上滑动手势解锁举例):

参数 300 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标

在焦点处于某文本框时,可以通过 input 命令来输入文本。

现在 hello 出现在文本框了。

Android 的日志分为如下几个级别:

  • V —— Verbose(最低,输出得最多)
  • S —— Silent(最高,啥也不输出)

按某级别过滤日志则会将该级别及以上的日志输出。

指定格式可与上面的过滤同时使用。比如:

中括号里的 [] 代表内核开始启动后的时间,单位为秒。

通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory 那一行前面的时间就是。

其中 scale 代表最大电量,level 代表当前电量。上面的输出表示还剩下 44% 的电量。

该设备屏幕密度为 420dpi。

而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):

把里面的有效内容提取出来就是 IMEI 了,比如这里的是 041

其中,MemTotal 就是设备的总内存,MemFree 是当前空闲内存。

设备的更多硬件与系统属性可以通过如下命令查看:

这会输出很多信息,包括前面几个小节提到的「型号」和「Android 系统版本」等。

输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看,列举一部分属性如下:

每个应用程序的内存上限

然后将 png 文件导出到电脑:

指定保存文件为 png 格式
指定截图的显示屏编号(有多显示屏的情况下)

实测如果指定文件名以 .png 结尾时可以省略 -p 参数;否则需要使用 -p 参数。如果不指定文件名,截图文件的内容将直接输出到 stdout。

需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。

视频的尺寸,比如 ,默认是屏幕分辨率。
视频的比特率,默认是 4Mbps。

重新挂载 system 分区为可写

注:需要 root 权限。

/system 分区默认挂载为只读,但有些操作比如给 Android 系统添加命令、删除自带应用等需要对 /system 进行写操作,所以需要重新挂载它为可读写。

  1. 查看当前分区挂载情况。

    找到其中我们关注的带 /system 的那一行:

如果输出没有提示错误的话,操作就成功了,可以对 /system 下的文件为所欲为了。

查看连接过的 WiFi 密码

注:需要 root 权限。

ssid 即为我们在 WLAN 设置里看到的名称,psk 为密码,key_mgmt 为安全加密方式。

注:需要 root 权限。

检测设备是否已 root

此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。

Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。

Monkey 的详细用法参考 官方文档。

注:需要 root 权限。

有时需要控制设备的 WiFi 状态,可以用以下指令完成。

若执行成功,输出为空;若未取得 root 权限执行此命令,将执行失败,输出 Killed

如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新。

  1. 通过 adb 上传和更新系统。

Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在 adb shell 里可以调用。本文档前面的部分内容已经用到了 adb shell 命令。

当前瞬间占用 CPU 百分比
进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
Resident Set Size 实际使用物理内存(包含共享库占用的内存)
进程所有者的用户 ID

top 命令还支持一些命令行参数,详细用法如下:

-n num 刷新多少次后退出 -d num 刷新时间间隔(单位秒,默认值 5

如下是其它常用命令的简单描述,前文已经专门讲过的命令不再额外说明:

改变文件的存取模式/访问权限
杀死指定 PID 的进程
查看进程的资源占用情况

  • adb 命令行的使用记录
  • Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
  • 那些做Android开发必须知道的ADB命令
  • 像高手一样使用ADB命令行(2)
本片文章的主要内容如下:
    // 如果在mPermissionGroups里面没有相应的权限组,则添加这个权限组 // 判断是否有权限树,如果有权限树,则对应的 .name); // 允许系统应用程序重新定义非系统权限 // 如果 bp权限不为空,并且这个权限的所对应的原包的包名和当前安装包的包名不一致 // 如果bp的sourcePackage等于当前安装包包名,应该是升级安装的 // 无论上面哪一步,都要进行变量初始化

    我上该方法内部分为17步,主要流程如下:

    • 第一步:检查代码路径是否存。如果不存在则抛出异常
    • 第四步:如果是系统应用程序,则变更ResolverActivity信息
    • 第五步:如果是更新安装(即只安装已经存在的包),检查它的PackageSetting信息,如果路径不一致,则抛出异常
    • 第六步:初始化包的安装目录(代码目录与资源目录)。
    • 第七步:检查是否需要重命名
    • 第八步:检测所有共享库:并且映射到真实的路径
    • 第九步:如果是升级更新安装,则检查升级更新包的签名,如果是新安装,则验证签名。其中shouldCheckUpgradeKeySetLP方法可以参考
    • 第十步:检查安装包中的provider是不是和现在系统中已经存在包的provider冲突
    • 第十一步:检测当前安装包对其他包的所拥有的权限(比如系统应用)
    • 第十三步:设置Native Library的路径。即so文件目录。
    • 第十四步:创建用户数据,主要是调用createUserData方法来实现的
    • 第十五步:对包进行dex优化,主要是调用performDexOpt方法来进行,最终还是要调用Install的dexopt函数,这里具体请参考 中
    • 第十六步:如果该包已经存在了,需要杀死该进程
    • 第十七步:将一个安装包的内容从pkg里面映射到PackageManagerService里面。这样一个安装包中的所有组件信息里面主要分为:
    • ① 建立底层的uid和 group id同行上层permission之间的映射,可以指定一个权限与几个id的对应。当一个APK被授予这个权限时,它也同时属于这几个组。
    • ② 给一些底层用户分配权限,如给shell授予各种permission权限,把一个权限赋予uid,当进程只是用这个uid运行时,就具备了这个权限。
    • ③ libary,系统增加的一些应用需要link扩展的jar。
  • 4、检查/data/system/packages.xml是否存在,这个文件是在解析apk时由writeLP()创建的,里面记录了系统的permissions,以及每个apk的name,codePath,flags,version,userId等信息,这些信息主要通过apk的AndroidManifest.xml解析获取,解析完APK后将更新信息写入这个文件并保存到flash,下次开机直接从里面读取相关信息添加到内存相关列表中。当APK升级、安装或删除时会更新这个文件。

优质内容筛选与推荐>>

我要回帖

更多关于 电脑怎样彻底卸载软件 的文章

 

随机推荐