Почему Android DDMS File Explorer показывает только 3 каталога? - PullRequest
5 голосов
/ 13 марта 2012

Почему Android DDMS File Explorer отображает только данные, mnt и системные каталоги? Есть другие каталоги и файлы, если я выполню "adb shell ls -l"

1 Ответ

2 голосов
/ 17 марта 2012

Я немного покопался и обнаружил, что представление File Explorer в ADT ограничено классом с именем

com.android.ddmlib.FileListingService

Внутри вы увидите список утвержденных каталогов верхнего уровня:

/** 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,
};

Позже к этому списку обращаются, и если он находится в утвержденном списке, вы увидите его в Проводнике файлов в 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;
                }
            }

Итак, если вы хотите изучить все содержимое устройства, вы можете изменить код, чтобы утвердить все каталоги верхнего уровня, удалив весь этот блок кода. Тогда вам придется перекомпилировать и установить свой собственный плагин ADT.

Далее при выполнении команды:

adb shell ls -l

тогда вы переходите в низкоуровневую оболочку, похожую на терминал вашего Android-устройства. На этом уровне такой фильтрации нет.

...