为什么Android DDMS文件资源管理器只显示3个目录?

use*_*015 5 android adb ddms

为什么Android DDMS文件资源管理器只显示数据,mnt和系统目录?如果我执行"adb shell ls -l",还有其他目录和文件

lou*_*uie 2

我做了一些挖掘,发现 ADT 的文件资源管理器视图受到名为的类的限制

com.android.ddmlib.FileListingService
Run Code Online (Sandbox Code Playgroud)

在其中,您将看到已批准的顶级目录的列表:

/** Top level data folder. */
public final static String DIRECTORY_DATA = "data"; //$NON-NLS-1$
/** Top level sdcard folder. */
public final static String DIRECTORY_SDCARD = "sdcard"; //$NON-NLS-1$
/** Top level mount folder. */
public final static String DIRECTORY_MNT = "mnt"; //$NON-NLS-1$
/** Top level system folder. */
public final static String DIRECTORY_SYSTEM = "system"; //$NON-NLS-1$
/** Top level temp folder. */
public final static String DIRECTORY_TEMP = "tmp"; //$NON-NLS-1$
/** Application folder. */
public final static String DIRECTORY_APP = "app"; //$NON-NLS-1$

private final static String[] sRootLevelApprovedItems = {
    DIRECTORY_DATA,
    DIRECTORY_SDCARD,
    DIRECTORY_SYSTEM,
    DIRECTORY_TEMP,
    DIRECTORY_MNT,
};
Run Code Online (Sandbox Code Playgroud)

稍后,会查阅此列表,如果它在批准列表中,您将在 Eclipse 的文件资源管理器中看到它:

            // if the parent is root, we only accept selected items
            if (mParentEntry.isRoot()) {
                boolean found = false;
                for (String approved : sRootLevelApprovedItems) {
                    if (approved.equals(name)) {
                        found = true;
                        break;
                    }
                }

                // if it's not in the approved list we skip this entry.
                if (found == false) {
                    continue;
                }
            }
Run Code Online (Sandbox Code Playgroud)

因此,如果您想探索设备的全部内容,您可以通过删除整个代码块来更改代码以批准所有顶级目录。然后您必须重新编译并安装自定义 ADT 插件。

此外,当您执行命令时:

adb shell ls -l
Run Code Online (Sandbox Code Playgroud)

然后您将进入一个低级 shell,它就像 Android 设备中的终端。这个级别没有这样的过滤。