I am trying to develop a file communication system that interfaces between the respective file systems of a Windows PC and a connected Android device. I realize a better (or at least simpler) way to do this would probably involve using the adb push and pull commands, but I am gathering options/trying to avoid developing additional communications on the Windows side beyond its basic OS file access. I know it is possible to interact with the device's storage directly from Windows when the device is physically connected via USB - if I understand correctly, this is commonly done using MTP? However, I am also currently constrained to only being able to use an emulated Android device. The Android Emulator is a useful tool for a variety of development situations, but I am not sure it was ever intended to appear as an MTP device in Windows like its physical counterparts do.
So could anyone provide documentation or some other resource establishing either
an MTP, UMS, etc. Windows connection is indeed not possible with the default QEMU Android Emulator; or
it is, and how.
Judging by the answer provided here - https://stackoverflow.com/a/21633596/1399272 - it does not appear that accessing the Android file system using a mounted drive in the Windows file system is an option, regardless of whether it is emulated or physically connected. So my question becomes moot point.
I'm looking for a way to write a file from a Windows application to an Android device SD card over a USB connection. To do this, I will need to obtain the drive letter of the SD card, and it's mount point. My Windows application is written in C++, so I'm most hoping for a solution in C++. If not possible, perhaps there is a Java solution which can then be placed in a C++ wrapper to be called by my application's code.
I've searched around and come up with a few ideas but nothing seems to work yet. First, I came across Google's documentation on a method,Environment.getExternalStorageDirectory(), but my assumption is that since this is part of the Android SDK, it is only usable from an application residing on an Android device. Secondly, I came across some functions in Windows' native API (WinBase.h primarily), which provides a way of locating all drives and their corresponding letters, but even if I can get this information, I don't know how to determine which of these is the connected Android device's SD card.
Any help is appreciated!
I'm not a windows application expert but if you can use system calls in your C++ program to call adb.exe, then you can execute adb commands directly to the device.
For example if you can execute "adb.exe devices" you can get a list of all android devices currently attached to the computer. From there, you can use any adb commands to push files onto the device.
More information on the adb commands here: ADB wiki
What you're looking for is probably doing an adb devices in combination with adb push <your file> /sdcard/<file on sdcard>
Good luck!
When an Android device is plugged in to a PC (through USB?), is the internal file system mapped to a drive letter on the PC? So that one can copy files to and from the Android under Windows?
And, can Emulator simulate the situation when it's plugged in? How?
Thank you in advance!
Yes, it CAN be mapped to a drive letter. It was much easier with something like a Droid X (Android 2.3), since it would show up as a mass storage device (disconnecting the card from your phone in the meantime), but it's also possible on newer phones such as the LG G3 if you're willing to install 2 free programs, which you probably would like to have anyway.
ES File Explorer - Remote Manager (FTP Server)
First, you need a file manager, not only because the built-in one is useless, but also because you need an FTP server. Install "ES File Explorer" on your Android Device. Then in the options, turn on the "Remote Manager" option, which will activate the FTP server and show you its local address like "192.168.1.3:3721. You can now access your phone as an FTP site from your computer when on your local WiFi network.
Net Drive - Remote Drive Mapping Utility
Next, all you have to do is install NetDrive: http://netdrive.net/ It's freeware and seems to be used by a lot of companies, because it lets you map cloud storage to local drives. That will allow you to map your FTP server on your phone as a local drive.
Don't bother trying to map an FTP site with explorer. First, you may run into a problem that's apparently caused by Chrome, where you can't even add an FTP network location. You'll get an unexpected error telling you the path format is invalid. Interestingly, that is solved by opening the registry editor, then under [HKEY_CLASSES_ROOT\ftp] add a key named "ShellFolder" with string value "{E436EBB6-524F-11CE-9F53-0020AF0BA770}". The error will immediately cease occurring, with no restart or any other action required. Just go back in and add the ftp network location. That, however, still does not allow you to map it to a drive letter, which is why you need NetDrive.
As of Android 4, the wise ones have removed USB Mass Storage support for accessing the internal phone memory. So you no-longer get direct block-access (or a driver letter in windows). You can usually choose on the phone between MTP, or PTP (Media / Photo Transfer protocols) for whichever your OS supports better.
If your device has removable storage it should still support USBMS (with a drive letter) for that partition. At least Android still supports that, but your Manufacturer or Carrier-ware may still fail you here.
However, when it comes to the phone memory, there was a trade-off made in Honeycomb. Unified storage prevents wasted space (no more separate storage for phone / data, and having one fill up first and having confused frustrated users trying to move apps to SD, etc). The trade-off requires that:
Android can no longer ever yield up the storage for the host PC to
molest directly over USB.
Initially for Mac and Linux where support for MTP/PTP has been slower, You can use an FTP app on your phone. But now there is an increasing number of Desktop (PC/Mac/Linux) apps that understand and support the MTP or PTP protocols. You just don't get block access and so you can't get a drive letter without some hackery / third party software.
There have been hacks over the years to make FTP or WebDav or some other protocol work behind a windows drive letter, and something like could still work work for these MTP/PTP protocols, but I have yet to see any such consumer usable software for windows.
If your Linux distro doesn't include MTP support, gMTP seems pretty popular.
You can mount the device via USB but (in Win7 at least) it doesn't appear to have its own drive letter; rather it's treated like a camera or another media device. It doesn't mount automatically; you generally need to "opt-in" in the notification area with something like "Turn on USB storage"
Don't know about emulators.
Using Eclipse you can push and pull files to the emulator using the DDMS perspective. Doing similar on a real device, iirc will require root access to the device, at least to get to the 'sensitive' areas.
The SDK tools will also provide a way of push and pull via the command line.
possible with https://github.com/billziss-gh/sshfs-win
difficult finding good sshservers for android, know that at least one works but doesn't autostart at wifi and have to manually restarted, which it was possible to "come home from work, drive is connected"
this server seams to work fine
https://play.google.com/store/apps/details?id=net.xnano.android.sshserver.tv&hl=en_US
Wanted to backup(incremental) android device using Areca backup utility which requires src and dest to have drive paths.
After trying various methods like adb-sync, Syncthing, webDAV, etc. Got it working with ftp sharing.
Download any ftp server app. I used "WiFi FTP Server" by Medha Apps on Playstore to create a ftp server something like this- ftp://username:*#xxx.xxx.xxx.xxx:yyyy where username can be set in app settings and xxx is i.p. with yyyy as port number.
Map ftp URL to drive path by using free app- "DirectNet Drive"
Use the drive as if it's in your own system, though it will be slow being wireless.
I bought a very weak netbook that comes preinstalled with android 2.0 which
I want to replace with another linux distro like puppy or damnSmallLinux.
the netbook has no bios menu with "boot from SD card" option so that and when I inserted an SD card or USB key with grub/lilo it still didn't bot from it.
I wasn't able to find no key sequence to enter android debugging mode so that I don't have root for the android system.
is there an android-internal way to specify boot from another media?
is there a "das-uboot" way to force android boot from another device?
thanks!
I'm not familiar with netbooks running android so here's my experience with embedded devices.
To my best knowledge there is no "android-internal" way. Android takes over after u-boot and rarely(read never) does it modify to u-boot environment partition.
To cut the long story short it's nearly impossible and it's too much effort for nothing.
Also for starters You'll need a debug serial console attached to the board or an ADB shell. It's just guess work without a shell.
For a general algorithm:
get a shell working
Get to know the system( cpu type, partition table, ...)
Now just research what you can do with the things you know.
Or the 'all or nothing' - reverse engineer the firmware upgrade and the firmware images and try to boot with your own.
Long story:
For sd_card boot you have 2 options:
use the bootloaders on the board and load the kernel and the rootfs from the sdcard
boot from sd_card
Load kernel and fs from sd_card:
There is no general u-boot way to change the boot device without changing the u-boot environment . The u-boot environment most of the time resides in a nand partition.
There may be some way coded by the manufacturer, which may be guessed by the offline firmware upgrade procedure. This is probably your best bet for a quick solution.
Try to reverse engineer that.
Boot From sd_card:
Most platforms have SYSCONFIG registers or hardware pins, operated by jumpers on development platforms and mostly hardwired on production ones.
SYSCONFIG controls the boot devices. It can be configured for NAND only or SD_CARD only, etc...
If the system is indeed configured to load from an sd_card there are a few more problems:
Some of the times the SD card has to be formated in a specific way(for ex: http://www.omappedia.org/wiki/SD_Configuration ).
Other times the first stage loader has to be signed. And it's hard figuring out what the first stage bootloader is (x-loader, or something other) and the signing part is kind of tricky :)
you have to know the exact platform configuration to build u-boot and x-loader
I would like to have an application sync itself with some files on a host computer.. Anyone know if this is possible? Eg: When you connect an Android phone to a computer i would like an application on the android system to read some allowed folders on the connected computer. Making it so the user doesn't have to sync files itself.
I ask possible, because i assume it isn't.. for security.
You won't be able to do it solely from the Android end, because Windows doesn't make the local drives available through the USB port like that (unless you have some custom driver on the Windows side).
Your Android device will probably show up to windows as a USB drive. If you have an SD card plugged in, you may see a second drive from the Windows side.
To do something like this, you'd probably need to have software running on the Windows side that did the syncing, and then copy the data from the /sdcard directory on the Android device to wherever you ultimately need it to be.