A better Android emulator
manymo.com
manymo.com
* Open SDK manager, install Intel image for your preferred SDK version and the "Intel Hardware Accelerated Execution Manager" from the Extras section
* Find the HAXM installer in SDK/extras and run
* Create Intel-based AVD
[0] https://developer.android.com/tools/devices/emulator.html
The emulator does take a while to start but that's a one-time cost.
Installing Play Store app on emulator still requires some hacky workarounds.
On topic, this looks great!
Both of these projects would have been extremely awesome to have a couple years ago, though.
Very curious how they pulled this off.
I feel your pain re: trouble running emulators for dev work. We built Manymo to address this pain. While it does not (yet) emulate custom android builds, like the dreaded HTC Sense builds, it does give me an emulator faster than I can spin one up locally.
I typcially develop with a phone and a tablet but using Manymo I can spin up a larger tablet or an odd-sized phone emulator to check how my Fragment code is laying out on a variety of device configurations. All of that without soaking up memory on my laptop. It helps testing against OS versions too. We also find it extrememly helpful when working with designers that do not have the SDK setup. The list goes on but suffice to say we are excited to see more people use this tool.
This has not been my experience in the least...
Have you tried running your code on any of the OEM releases like HTC sense, Samsung TouchWiz or Moto Blur?
My Android app crashes on a Droid Razr Maxx right now, when it rotates, and I don't have one to test on, so I have to get crash logs from users.
Though I'm not an Android developer, I can see how useful it would be for testing mobile web sites. You can launch an emulator in many different resolutions and pixel densities to check out your web site/app.
You can also see a video of the product in action at the last MinneDemo: http://www.youtube.com/watch?v=3TXiDPlc3Fg
It's annoying that it doesn't come with default iOS device settings, though, but it's a great alternative to running a server to test on.
Failed to connect to server (code: 1000, reason: Target closed)
But emulators are ok to test your layouts, even though the latest ADT plugin makes it much simpler with layout previews.
You will also have the difference of a touch based interface on a device and the emulated touch interface when using mouse-based devices (Manymo in your laptop/desktop browser.) That said, You can also use Manymo on your iPad...
In any case, having a device with the all screen size and OS version combinations does not really scale. Trying to do that gets rather expensive.
For testing initial layouts or on-the-fly development, emulators are fine because they offer instant local access (After the setup, of course, but who cares now that x86 emulators are so fast). For complete testing real devices are a must. That's traditionally been expensive, but there are solutions to that, such as the company I founded, AppThwack, and our competitors like TestDroid. Test locally on emulators, and test periodically on real consumer devices.
There's a reason nearly every development shop has a cupboard full of devices, and it's not because they couldn't figure out how to get a few emulators running.
"Start quickly." - not today, but hopefully in the future?
"Run smoothly." - ehmmm... Nope! Smooth as barbed wire...
"Are lightweight." - perhaps, but that makes little difference if it fails the first two bullet points.
Fantastic idea - had it worked. Let's hope it will with some tweaking :-)
While I'm sad that there are 43 (and counting) possible variations, this looks solid and helpful — I'm much more likely to attempt my port project now.
Always use dp instead of px, use dynamic layouts (like HTML/CSS) instead of absolute ones (like in iOS), use 9-patch or XML drawables wherever you can, don't fight the framework. Use the compatibility library for fragment support and other cool stuff, and use them wherever you can. Be careful about bitmap memory consumption, that's a gotcha on low-memory devices.
If you don't mess around with low-level stuff like NDK or OpenGL you should be good to go on the very most devices. The well-tread Java API paths are not as scary as some blogs want to make you believe. You don't have to own all the 10k devices which exist, because most of them have stock Android installed. For special cases you will receive stacktraces from people's devices in the Play dev console - or you use one of those crashlog services.
- OS: Android 2.2/2.3 and 4.x. (Rest doesn't matter, honestly)
- Device sizes: a big/new samsung galaxy-sized one (~ 1200x700), one 320x480 and maybe a smaller one.
Depends a bit on your target demography.
This isn't actually too much worse than what you have with iOS these days, where you have retina + non-retina + tall device. (possibly + iPad). And possibly 3 iOS versions to think about - 4.3, 5.1 and 6.0.
As for testing, things can be easier. Unlike iOS provisioning profiles you can give the application package (apk) to anyone and they can sideload it onto their device (even from following a web browser link). They just have to change one setting to allow this. This means you can distribute your app for testing to friends, family and others easily. When you put the app on the Play Store you can also restrict it. If you think there could be major compatibility issues then make it available only a small subset of countries/carriers/devices and increase as you get more comfortable.
See this talk https://www.youtube.com/watch?v=Erd2k6EKxCQ (22 minutes in if you want to skip the big picture) for how you can preview your UI across a multitude of languages and form factors.
There are places that let you test with devices remotely. This is especially useful if you need to check things out in other countries. One example is http://www.perfectomobile.com (not an endorsement). Samsung also has something http://developer.samsung.com/remoteTestLab.do
You can easily outsource testing too if it matters that much to you.
A good source of devices is http://swappa.com
I personally use 6 devices. G1 (Android 1.6), HTC something (Android 2.1), Droid (Android 2.2), different Droid (Android 2.3), Galaxy Tab (Android 4) and Galaxy Nexus (Android 4.1).
You can certainly start out supporting only a subset of Android versions (eg 2.3 onwards) and then based on user feedback figure out where to go next.