Android平台Kivy应用缓存目录查看及目录不可见问题求助
我想查看以下目录中的文件:/storage/emulated/0/Android/data/[应用名称]/cache
我用以下代码获取该目录路径并显示:
from android import mActivity
以及
context = mActivity.getApplicationContext() result = context.getExternalCacheDir() App.get_running_app().root.pathlabel.text = str(result.toString())
将手机连接到电脑后,能看到/storage/emulated/0/Android/data/目录下有很多应用的文件夹,但找不到我的应用org.test.kivycamerafive的文件夹。请问该目录是否被隐藏?还是函数返回的路径对应的目录实际不存在?我想知道在调试时如何轻松查看该目录。
我的存储权限配置如下:
main.py:
from android.permissions import request_permissions, Permission request_permissions([ Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE ])
buildozer.spec:
android.permissions = android.permission.INTERNET,android.permission.CAMERA,android.permission.WRITE_EXTERNAL_STORAGE,android.permission.READ_EXTERNAL_STORAGE
目录无法被电脑查看的原因
从Android 11(API 30)开始,系统启用分区存储机制,/Android/data/和/Android/obb/目录被设为应用私有目录,第三方工具(包括电脑通过MTP连接的文件管理器)默认无法直接访问其他应用的私有子目录。你的应用文件夹真实存在,getExternalCacheDir()返回的路径也有效,应用自身可以正常读写该目录,只是外部被系统限制了访问权限。
调试时查看该目录的方法
用Android Studio的Device File Explorer
- 连接测试设备到电脑,打开Android Studio
- 点击
View > Tool Windows > Device File Explorer - 直接导航到
storage/emulated/0/Android/data/org.test.kivycamerafive/cache,即可查看、下载或上传目录内的文件
在应用内添加文件列表展示
编写代码遍历缓存目录,在应用界面显示文件信息:import os from kivy.uix.label import Label def show_cache_files(): cache_dir = context.getExternalCacheDir() if cache_dir and os.path.exists(cache_dir): file_list = os.listdir(cache_dir) # 假设root下有一个用于展示的容器widget(如BoxLayout) for filename in file_list: self.root.file_container.add_widget(Label(text=filename))通过adb命令提取文件
在电脑终端执行adb命令,直接将缓存目录的文件拉取到本地:adb pull /storage/emulated/0/Android/data/org.test.kivycamerafive/cache/ ./local_cache/临时关闭分区存储(仅调试用)
在buildozer.spec中添加配置,让应用兼容旧版存储模式,电脑就能通过MTP看到应用文件夹:android.extra_manifest_application_args = android:requestLegacyExternalStorage="true"注:该方法仅适合调试,正式发布的应用不建议使用,会违反Google Play的存储政策。
内容的提问来源于stack exchange,提问作者Kxpr

