You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中代码读取/data/app文件夹遇空指针异常求助

问题分析与解决方案

为什么你的代码读不了/data/app?

Android从**Android 6.0(API 23)开始收紧了存储权限管控,/data/app属于系统级受保护目录,普通第三方应用默认没有直接访问的权限。那些能做到无Root访问的应用(比如ShareIt、APK备份工具),要么是拿到了厂商白名单的特殊系统权限,要么是用了存储访问框架(SAF)**让用户手动授权访问,不是直接通过File API硬读的。

你的代码里new File("/data/app").listFiles()因为权限不足返回了null,后续直接访问files.length自然就触发空指针异常了。

可行解决方案

方案1:用存储访问框架(SAF)让用户手动授权(最合规)

这是普通第三方应用能访问该目录的唯一合法路径,不需要Root,步骤如下:

  1. 启动SAF目录选择器,引导用户选择/data/app:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 100);
  1. 在onActivityResult里处理用户选择的目录,遍历内容:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100 && resultCode == RESULT_OK) {
        Uri treeUri = data.getData();
        // 持久化权限,下次打开不用再授权
        getContentResolver().takePersistableUriPermission(treeUri,
                Intent.FLAG_GRANT_READ_URI_PERMISSION);
        
        DocumentFile rootDir = DocumentFile.fromTreeUri(this, treeUri);
        if (rootDir != null && rootDir.isDirectory()) {
            for (DocumentFile file : rootDir.listFiles()) {
                Log.d("APP_LIST", file.getName() + " - " + file.getUri());
            }
        }
    }
}

方案2:适配旧版本Android(API < 23)

如果你的应用只针对Android 5.1及以下版本,可以在Manifest里声明READ_EXTERNAL_STORAGE权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

但注意:这种方式在API 23+完全无效,系统会直接拦截对/data/app的访问。

方案3:系统级权限(不推荐给普通应用)

如果你的应用是系统预装应用,或者能拿到厂商的签名权限,可以申请android.permission.READ_PRIVILEGED_STORAGE权限,但普通第三方应用根本拿不到这个权限,所以不做重点推荐。

额外避坑提示

永远不要默认listFiles()不会返回null,先做判空处理可以避免空指针:

File appDir = new File("/data/app");
if (appDir.exists() && appDir.isDirectory()) {
    File[] files = appDir.listFiles();
    if (files != null) {
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }
    } else {
        Log.e("ACCESS_ERROR", "无权限访问/data/app目录");
    }
}

内容的提问来源于stack exchange,提问作者Ragib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:28:46