From 82e70f804c305312e90f3341fb3426dd597d881a Mon Sep 17 00:00:00 2001 From: Zhuang Ma Date: Sat, 23 Jul 2016 17:07:21 +0800 Subject: [PATCH] Add install apk failure codes --- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 95 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index e456c40..df03565 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ Adb,即 [Android Debug Bridge](https://developer.android.com/studio/command-li * [卸载应用](#卸载应用) * [调起应用](#调起应用) * [查看前台 Activity](#查看前台-activity) +* [文件管理](#文件管理) + * [复制设备里的文件到电脑](#复制设备里的文件到电脑) + * [复制电脑里的文件到设备](#复制电脑里的文件到设备) * [调试](#调试) * [查看/过滤日志](#查看过滤日志) * [查看设备信息](#查看设备信息) @@ -96,7 +99,7 @@ package:com.android.externalstorage 命令: ``` -adb install /path/to/filename.apk +adb install ``` 参数: @@ -121,20 +124,61 @@ Success 而如果状态为 `Failure` 则表示安装失败。常见安装失败输出代码、含义及可能的解决办法如下: -| 输出 | 含义 | 解决办法 | -|----------------------------------------------------|--------------------------------------------------|------------------------------| -| INSTALL\_FAILED\_ALREADY\_EXISTS | 应用已经存在 | 使用 `-r` 参数 | -| INSTALL\_FAILED\_OLDER\_SDK | 设备系统版本低于应用要求 | 使用高版本 Android 系统 | -| INSTALL\_FAILED\_INSUFFICIENT\_STORAGE | 空间不足 | 清理空间 | -| INSTALL\_FAILED\_MEDIA\_UNAVAILABLE | 安装位置不可用 | | -| INSTALL\_FAILED\_VERSION\_DOWNGRADE | 已经安装了更高版本 | 使用 `-d` 参数 | -| INSTALL\_CANCELED\_BY\_USER | 应用安装需要在设备上确认,但未操作设备或点了取消 | 在设备上同意安装 | -| INSTALL\_PARSE\_FAILED\_INCONSISTENT\_CERTIFICATES | 已安装该应用,且签名与 APK 文件不一致 | 先卸载手机上的该应用,再安装 | -| INSTALL\_FAILED\_INVALID\_URI | 无效的 APK 文件名 | 确保 APK 文件名里无中文 | -| Offline | 设备未连接成功 | 先将设备与 adb 连接成功 | -| error: device not found | 没有连接成功的设备 | 先将设备与 adb 连接成功 | -| protocol failure | 设备已断开连接 | 先将设备与 adb 连接成功 | -| Unknown option: -s | Android 2.2 以下不支持安装到 sdcard | 不使用 `-s` 参数 | +| 输出 | 含义 | 解决办法 | +|----------------------------------------------------|--------------------------------------------------------------------------|-------------------------------------------------| +| INSTALL\_FAILED\_ALREADY\_EXISTS | 应用已经存在 | 使用 `-r` 参数 | +| INSTALL\_FAILED\_INVALID\_APK | 无效的 APK 文件 | | +| INSTALL\_FAILED\_INVALID\_URI | 无效的 APK 文件名 | 确保 APK 文件名里无中文 | +| INSTALL\_FAILED\_INSUFFICIENT\_STORAGE | 空间不足 | 清理空间 | +| INSTALL\_FAILED\_DUPLICATE\_PACKAGE | 已经存在同名程序 | | +| INSTALL\_FAILED\_NO\_SHARED\_USER | 请求的共享用户不存在 | | +| INSTALL\_FAILED\_UPDATE\_INCOMPATIBLE | 已经安装过签名不一样的同名应用,且数据没有移除 | | +| INSTALL\_FAILED\_SHARED\_USER\_INCOMPATIBLE | 请求的共享用户存在但签名不一致 | | +| INSTALL\_FAILED\_MISSING\_SHARED\_LIBRARY | 安装包使用了设备上不可用的共享库 | | +| INSTALL\_FAILED\_REPLACE\_COULDNT\_DELETE | 替换时无法删除 | | +| INSTALL\_FAILED\_DEXOPT | dex 优化验证失败或空间不足 | | +| INSTALL\_FAILED\_OLDER\_SDK | 设备系统版本低于应用要求 | | +| INSTALL\_FAILED\_CONFLICTING\_PROVIDER | 设备里已经存在与应用里同名的 content provider | | +| INSTALL\_FAILED\_NEWER\_SDK | 设备系统版本高于应用要求 | | +| INSTALL\_FAILED\_TEST\_ONLY | 应用是 test-only 的,但安装时没有指定 `-t` 参数 | | +| INSTALL\_FAILED\_CPU\_ABI\_INCOMPATIBLE | 包含不兼容设备 CPU 应用程序二进制接口的 native code | | +| INSTALL\_FAILED\_MISSING\_FEATURE | 应用使用了设备不可用的功能 | | +| INSTALL\_FAILED\_CONTAINER\_ERROR | sdcard 访问失败 | 确认 sdcard 可用,或者安装到手机内存 | +| INSTALL\_FAILED\_INVALID\_INSTALL\_LOCATION | 不能安装到指定位置 | 切换安装位置,添加或删除 `-s` 参数 | +| INSTALL\_FAILED\_MEDIA\_UNAVAILABLE | 安装位置不可用 | 一般为 sdcard,确认 sdcard 可用或安装到手机内存 | +| INSTALL\_FAILED\_VERIFICATION\_TIMEOUT | 验证安装包超时 | | +| INSTALL\_FAILED\_VERIFICATION\_FAILURE | 验证安装包失败 | | +| INSTALL\_FAILED\_PACKAGE\_CHANGED | 应用与调用程序期望的不一致 | | +| INSTALL\_FAILED\_UID\_CHANGED | 以前安装过该应用,与本次分配的 UID 不一致 | 清除以前安装过的残留文件 | +| INSTALL\_FAILED\_VERSION\_DOWNGRADE | 已经安装了该应用更高版本 | 使用 `-d` 参数 | +| INSTALL\_FAILED\_PERMISSION\_MODEL\_DOWNGRADE | 已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限 | | +| INSTALL\_PARSE\_FAILED\_NOT\_APK | 指定路径不是文件,或不是以 `.apk` 结尾 | | +| INSTALL\_PARSE\_FAILED\_BAD\_MANIFEST | 无法解析的 AndroidManifest.xml 文件 | | +| INSTALL\_PARSE\_FAILED\_UNEXPECTED\_EXCEPTION | 解析器遇到异常 | | +| INSTALL\_PARSE\_FAILED\_NO\_CERTIFICATES | 安装包没有签名 | | +| INSTALL\_PARSE\_FAILED\_INCONSISTENT\_CERTIFICATES | 已安装该应用,且签名与 APK 文件不一致 | 先卸载手机上的该应用,再安装 | +| INSTALL\_PARSE\_FAILED\_CERTIFICATE\_ENCODING | 解析 APK 文件时遇到 `CertificateEncodingException` | | +| INSTALL\_PARSE\_FAILED\_BAD\_PACKAGE\_NAME | manifest 文件里没有或者使用了无效的包名 | | +| INSTALL\_PARSE\_FAILED\_BAD\_SHARED\_USER\_ID | manifest 文件里指定了无效的共享用户 ID | | +| INSTALL\_PARSE\_FAILED\_MANIFEST\_MALFORMED | 解析 manifest 文件时遇到结构性错误 | | +| INSTALL\_PARSE\_FAILED\_MANIFEST\_EMPTY | 在 manifest 文件里找不到找可操作标签(instrumentation 或 application) | | +| INSTALL\_FAILED\_INTERNAL\_ERROR | 因系统问题安装失败 | | +| INSTALL\_FAILED\_USER\_RESTRICTED | 用户被限制安装应用 | | +| INSTALL\_FAILED\_DUPLICATE\_PERMISSION | 应用尝试定义一个已经存在的权限名称 | | +| INSTALL\_FAILED\_NO\_MATCHING\_ABIS | 应用包含设备的应用程序二进制接口不支持的 native code | | +| INSTALL\_CANCELED\_BY\_USER | 应用安装需要在设备上确认,但未操作设备或点了取消 | 在设备上同意安装 | +| INSTALL\_FAILED\_ACWF\_INCOMPATIBLE | 应用程序与设备不兼容 | | +| does not contain AndroidManifest.xml | 无效的 APK 文件 | | +| is not a valid zip file | 无效的 APK 文件 | | +| Offline | 设备未连接成功 | 先将设备与 adb 连接成功 | +| unauthorized | 设备未授权允许调试 | | +| error: device not found | 没有连接成功的设备 | 先将设备与 adb 连接成功 | +| protocol failure | 设备已断开连接 | 先将设备与 adb 连接成功 | +| Unknown option: -s | Android 2.2 以下不支持安装到 sdcard | 不使用 `-s` 参数 | +| No space left on devicerm | 空间不足 | 清理空间 | +| Permission denied ... sdcard ... | sdcard 不可用 | | + +参考:[PackageManager.java](https://github.com/android/platform_frameworks_base/blob/master/core%2Fjava%2Fandroid%2Fcontent%2Fpm%2FPackageManager.java) ### 卸载应用 @@ -160,6 +204,42 @@ mFocusedActivity: ActivityRecord{8079d7e u0 com.cyanogenmod.trebuchet/com.androi 其中的 `com.cyanogenmod.trebuchet/com.android.launcher3.Launcher` 就是当前处于前台的 Activity。 +## 文件管理 + +### 复制设备里的文件到电脑 + +命令: + +``` +adb pull <设备里的文件路径> [电脑上的目录] +``` + +其中 `电脑上的目录` 参数可以省略,默认复制到当前目录。 + +例: + +``` +adb pull /sdcard/sr.mp4 ~/tmp/ +``` + +*小技巧:*设备上的文件路径可能需要 root 权限才能访问,如果你的设备已经 root 过,可以先使用 `adb shell` 和 `su` 命令在 adb shell 里获取 root 权限后,先 `cp /path/on/device /sdcard/filename` 将文件复制到 sdcard,然后 `adb pull /sdcard/filename /path/on/pc`。 + +### 复制电脑里的文件到设备 + +命令: + +``` +adb push <电脑上的文件路径> <设备里的目录> +``` + +例: + +``` +adb push ~/sr.mp4 /sdcard/ +``` + +*小技巧:*设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过,可以先 `adb push /path/on/pc /sdcard/filename`,然后 `adb shell` 和 `su` 在 adb shell 里获取 root 权限后,`cp /sdcard/filename /path/on/device`。 + ## 调试 ### 查看/过滤日志