如何在 USB 连接设备上的 Android Studio 中调试应用程序升级
How to debug an app upgrade in Android Studio on a USB connected device
我在 phone 上安装了 Google Play 商店应用程序的生产版本,并在 Android Studio 中安装了该应用程序的更新版本。 我想测试升级过程,但是 运行 遇到版本控制问题,然后是日志记录问题。
要获得 "clean" 安装,我可以进入 phone 的设置 Backup & reset > Automatic restore
,将其关闭,然后卸载该应用程序,然后从应用商店。或者,我可以下载生产 APK 并从 adb
命令行安装它(详情如下)。结果是我的设备应该和普通生产用户一样。
与问题没有直接关系,但要了解我观看升级过程的动机是该应用程序有一个 SQLite 数据库并且我扩展了 SQLiteOpenHelper
,因此调用了 onUpgrade()
,还有一些数据库架构工作正在进行中。
更新不兼容
如果我点击按钮部署应用程序,然后 select 我连接的设备,它想要在继续之前卸载:
Installation failed with message Failed to finalize session : INSTALL_FAILED_UPDATE_INCOMPATIBLE
显然我可以卸载,但是那不会测试升级过程!
正在生成签名 APK
我使用 Generate Signed APK...
构建了一个 "release" APK,这与我在生成要上传到 Play 商店的版本时使用的过程相同。这解决了版本控制问题,但会导致日志记录可见性问题。以前和现在使用的release配置是这样的:
正在从命令行将 APK 安装到设备
"C:\Program Files (x86)\HTC\HTC Sync Manager\HTC Sync\adb" install -r app-release.apk
以上没有卸载升级。我使用的过程是在 Android Studio 中打开 Terminal
,将目录切换到存储生成的 APK 的目录,然后键入上面的命令。
记录/调试问题
adb 命令行触发了升级过程,但它没有立即开始向 Logcat window 提供调试信息。我可以为所有进程连接到 Logcat,但我无法获得我的进程的调试信息,并且无法访问调试工具。
问题
我如何从 运行 已签名生产版本的设备开始,然后在不卸载的情况下将 Android Studio 中包含的更新版本更新为 运行在升级过程中查看调试输出的能力?或者我如何修改已签名的生产版本以允许新版本更新并允许调试?
因为您从 Debuggable=false
的 APK 开始,您的解决方法包括使用与生产发布过程相同的过程构建应用程序更新并获得 Logcat所有流程可能是您能做的最好的。
从以前的源代码管理版本重建
一种选择是从您的源代码控制系统中提取特定版本的应用程序并使用 Debuggable=true
构建它,并使用生成的 APK 作为起点,而不是使用 Play 中的 APK商店。
为了未来
与其只制作一个 APK 发布版本并将其上传到 Play 商店,不如制作两个版本。一个版本将照常签名和上传。使用完全相同的源代码,制作另一个具有 Debuggable=true
的 APK。使用版本号重命名每个文件。然后,以后,如果您想尝试从任何版本升级到任何版本,您可以这样做,并且仍然具有调试功能。
我在 phone 上安装了 Google Play 商店应用程序的生产版本,并在 Android Studio 中安装了该应用程序的更新版本。 我想测试升级过程,但是 运行 遇到版本控制问题,然后是日志记录问题。
要获得 "clean" 安装,我可以进入 phone 的设置 Backup & reset > Automatic restore
,将其关闭,然后卸载该应用程序,然后从应用商店。或者,我可以下载生产 APK 并从 adb
命令行安装它(详情如下)。结果是我的设备应该和普通生产用户一样。
与问题没有直接关系,但要了解我观看升级过程的动机是该应用程序有一个 SQLite 数据库并且我扩展了 SQLiteOpenHelper
,因此调用了 onUpgrade()
,还有一些数据库架构工作正在进行中。
更新不兼容
如果我点击按钮部署应用程序,然后 select 我连接的设备,它想要在继续之前卸载:
Installation failed with message Failed to finalize session : INSTALL_FAILED_UPDATE_INCOMPATIBLE
显然我可以卸载,但是那不会测试升级过程!
正在生成签名 APK
我使用 Generate Signed APK...
构建了一个 "release" APK,这与我在生成要上传到 Play 商店的版本时使用的过程相同。这解决了版本控制问题,但会导致日志记录可见性问题。以前和现在使用的release配置是这样的:
正在从命令行将 APK 安装到设备
"C:\Program Files (x86)\HTC\HTC Sync Manager\HTC Sync\adb" install -r app-release.apk
以上没有卸载升级。我使用的过程是在 Android Studio 中打开 Terminal
,将目录切换到存储生成的 APK 的目录,然后键入上面的命令。
记录/调试问题
adb 命令行触发了升级过程,但它没有立即开始向 Logcat window 提供调试信息。我可以为所有进程连接到 Logcat,但我无法获得我的进程的调试信息,并且无法访问调试工具。
问题
我如何从 运行 已签名生产版本的设备开始,然后在不卸载的情况下将 Android Studio 中包含的更新版本更新为 运行在升级过程中查看调试输出的能力?或者我如何修改已签名的生产版本以允许新版本更新并允许调试?
因为您从 Debuggable=false
的 APK 开始,您的解决方法包括使用与生产发布过程相同的过程构建应用程序更新并获得 Logcat所有流程可能是您能做的最好的。
从以前的源代码管理版本重建
一种选择是从您的源代码控制系统中提取特定版本的应用程序并使用 Debuggable=true
构建它,并使用生成的 APK 作为起点,而不是使用 Play 中的 APK商店。
为了未来
与其只制作一个 APK 发布版本并将其上传到 Play 商店,不如制作两个版本。一个版本将照常签名和上传。使用完全相同的源代码,制作另一个具有 Debuggable=true
的 APK。使用版本号重命名每个文件。然后,以后,如果您想尝试从任何版本升级到任何版本,您可以这样做,并且仍然具有调试功能。