Why does Android DDMS File Explorer only show data, mnt, and system directories? There are other directories and files if I execute "adb shell ls -l"
I did some digging and found that ADT's File Explorer view is restricted by a class named
com.android.ddmlib.FileListingService
Inside of it, you will see a listing of approved top level directories:
/** 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,
};
Later, this listing is consulted and if it is in the approved list, you will see it in the File Explorer in 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;
}
}
So, if you wanted to explore the entire contents of the device, you could change the code to approve all top-level directories by removing that entire block of code. Then you'd have to recompile and install your custom ADT plug-in.
Further, when you execute the command:
adb shell ls -l
then you are going into a low-level shell that is like a terminal into your Android device. There's no such filtering at this level.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With