如何调试从Play Store安装的APK(不删除保存的用户数据)



问题

我正在使用一个Android应用程序,该应用程序将用户数据保存到由SQLCipher加密的数据库中。安卓密钥库用于存储密钥。出现特定于设备的问题(可能与正在保存的数据有关)。我可能会找到遇到这个问题的设备,然而,从我所能找到的信息来看,我从上述设备中提取的信息非常有限。有没有任何可能的方法可以在不丢失用户数据的情况下,将调试器附加到加载到设备上的当前APK上,或者用可调试的版本替换它?

该设备正在运行android 6.0.1,我正在使用android Studio

我在调试APK版本时发现了什么

当我连接一台加载了从PlayStore下载的APK的android平板电脑时,我能看到的唯一数据是使用logcat(android Studio)的应用程序特定调试日志。当我尝试调试应用程序时,安卓工作室告诉我先卸载现有的APK,然后才能加载可调试的APK。然而,这将删除现有的数据,我不希望发生这种情况。

我试图解决最初问题的其他事情

尝试让特定用户向我发送他们有问题的数据库

这不起作用,因为我没有访问私钥的权限,所以即使我得到了文件,我也无法解密数据。

尝试让特定用户向我发送应用程序日志

这将不起作用,因为自Android 4.1以来,应用程序特定的日志只对那些特定的应用程序是私有的(除非设备是root的,而有问题的设备不是,并且root并不是一个真正的选项)。这实际上引出了我的另一个不太相关的问题。为什么我能够在logcat中看到特定于应用程序的日志,即使通过CatLog等应用程序在未打开的设备上查看日志时这些日志是不可见的?

您可以安装一个可调试的APK,只需使用您的发布密钥而不是调试密钥进行签名,并确保设置了debug标志。我总是这样做,因为不断卸载和重新安装不同的版本会很痛苦,尤其是在具有不同调试密钥库的不同计算机之间进行交换时。

安装用您的发布密钥签名的APK只会执行就地升级,即使设置了可调试标志,也会保持所有应用程序数据不变。

例如

buildTypes {
debug {
minifyEnabled false
debuggable true
signingConfig signingConfigs.release
}
release {
minifyEnabled false
signingConfig signingConfigs.release
}
}

只要日志是由您自己的应用程序生成的,您就可以从用户设备获取日志。允许您自己的进程访问您自己的应用程序日志条目。

在应用程序中以编程方式读取logcat

最新更新