【问题标题】:Viewing private files created by an android app查看由 android 应用程序创建的私人文件
【发布时间】:2011-07-05 12:10:15
【问题描述】:

我有一个设置为 MODE_PRIVATE 的应用正在写入一个 xml 文件,但我现在想在手机之外读取该文件,以进行调试。在 Eclipse 中,我可以访问应用程序制作的其他文件并将它们复制到我的计算机,但我什至看不到这个私人文件。仅仅将文件更改为 MODE_WORLD_READABLE 文件似乎没有帮助。我认为该文件存储在无法从手机中删除的内部“SD 卡”上,但文件资源管理器中还有两个其他文件夹为空或无法访问:asec 和安全。

有人知道如何访问该文件吗?

【问题讨论】:

    标签: android file private


    【解决方案1】:

    如果您的应用安装在调试模式,您可以在设备上获取您的私人文件无需root

    1. 转到[android-sdk]/platform-tools 文件夹并运行adb shell
    2. run-as com.example.yourapp
    3. cp -r /data/data/com.example.yourapp /sdcard/

    (其中 com.example.yourapp 是您的应用程序的包名称。) 执行上述步骤后,您的应用程序的私有文件夹将复制到您的 sdcard 存储的根目录下,在您的包名下,您有权下载和查看它们.

    注意 1:如果您不需要下载它们,那么您可以使用 unix 命令来浏览和列出文件和文件夹,而不是第 3 步。

    注意 2:从 Android Studio 2.0 开始,您会在 cachefiles/instant-run 文件夹中找到更多与 Instant RunGPU 调试器 功能,由 IDE 放置在那里。

    【讨论】:

    • 正是我要找的东西,没有生根。我尝试使用 Android 文件传输(用于从 mac 访问)提取文件,但我处理到 sdcard 文件夹的 come.example... 文件没有出现在那里。我最终最终从手机的资源管理器窗口手动共享它。有更好的办法吗?谢谢。
    • @Jas - 您也可以使用adb pull 命令下载文件夹。
    • 这不适用于运行 Android 6.0.1 的三星设备:code.google.com/p/android/issues/detail?id=206581#c4
    • 我经常运行真机和模拟器。 “adb -e shell”将在模拟器上打开一个shell,而“adb -d shell”将为USB连接的设备打开一个shell。尽管在我的 Galaxy S5 上抓取文件并不走运,即使先运行“run-as com.android.myapp”也是如此。但它确实适用于模拟器。
    • 我在第 3 步得到permission denied。我在 Google Pixel Emulator Android 8.0 上运行它。有什么想法吗?
    【解决方案2】:

    您需要连接手机并做一些魔术来让您的 sdk 使用它(我认为将其置于调试模式?)。转到您解压缩 android sdk 的位置:

    C:\android-sdk_r10-windows\android-sdk-windows\platform-tools>adb shell
    #cd data/data/com.yourpackage.yourapp/files
    #ls
    

    您应该会看到列出的文件。如果您不确定应用程序的完全限定名称是什么,您可能需要运行“ls data/data”。如果文件很小并且您只想查看其中的内容,则可以从这里运行:

    #cat yourfilename.xml
    

    或者:

    #exit
    C:\android-sdk_r10-windows\android-sdk-windows\platform-tools>adb pull /data/data/com.yourpackage.yourapp/files/yourfile.xml
    

    注意:我只在模拟器上试过这个,我不知道如何在实体手机上使用adb。

    【讨论】:

    • 另外,我可以确认它不适用于真手机(这可能是应该的)。至少,它不适用于我的 Galaxy S1。
    • adb shell su 授予超级用户(root)
    【解决方案3】:

    您需要 root 手机才能查看 Context.MODE_PRIVATE 文件

    我相信它最终会存储在数据//文件中,但您需要 root 权限才能查看它们

    所以要么root你的手机或等到你完成调试然后添加Context.MODE_PRIVATE

    【讨论】:

      【解决方案4】:

      如果使用Eclipse,还有一个选择:

      DDMS 透视图 > 文件资源管理器选项卡 > data/data/com.yourpackage.yourapp/files

      您可以在哪里拉/推/删除文件。

      【讨论】:

        【解决方案5】:

        另一种选择是在应用程序中设置一个转储私有文件的命令。这仅在您不想编辑文件时才有效,但还有额外的好处,即您不必在投入生产之前将其剥离,因为用户不能用它破坏任何东西。好吧,只要文件不包含敏感信息。但是,真的,如果他们这样做,你做错了什么。正如@user1778055 所说,用户可以通过root 手机来访问它。

        【讨论】:

          猜你喜欢
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-09
          • 2016-06-25
          • 1970-01-01
          相关资源
          最近更新 更多