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

时间:2017-02-08 15:50:27

标签: android android-studio debugging apk release

问题

我正在使用Android应用,其中用户数据被保存到由SQLCipher加密的数据库中。 Android密钥库用于存储密钥。存在特定于设备的问题(可能与正在保存的数据有关)。我可能会遇到遇到此问题的设备,但是,从我能找到的信息中,我可以从所述设备中提取的信息非常有限。有没有可能的方法我可以以某种方式将调试器附加到加载到设备上的当前APK或以某种方式用可调试版本替换它而不会丢失用户数据?

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

我发现尝试调试发布APK

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

我试图解决原始问题的其他事情

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

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

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

这不起作用,因为Android 4.1,特定于应用程序的日志仅对那些特定应用程序是私有的(除非设备已植根,有问题的设备不是,并且根本不是一个选项)。这实际上导致了另一个轻微相关的问题。为什么我能够在logcat中看到特定于应用程序的日志,即使它们在通过诸如CatLog等应用程序登录无根设备时不可见?

1 个答案:

答案 0 :(得分:2)

您可以通过使用发布密钥而不是调试密钥进行签名来安装可调试的APK,并确保设置了Debug标志。我总是这样做,因为继续卸载和重新安装不同版本变得很痛苦,尤其是在使用不同调试密钥库的不同计算机之间进行交换时。

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

e.g

 buildTypes {

    debug {
        minifyEnabled false
        debuggable true
        signingConfig signingConfigs.release
    }

    release {
        minifyEnabled false
        signingConfig signingConfigs.release
    }

}

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

Read logcat programmatically within application