5 ms·
It's much simpler than this. The native development environment, compared to iOS, is just trash. As a developer, I cringe every time I have to build and test my
by hesdeadjim 14y ago
It's much simpler than this. The native development environment, compared to iOS, is just trash. As a developer, I cringe every time I have to build and test my code on an Android device.
On iOS, I can have a build running and drop into a debugger directly on device in a single button click. On Android? Ha. First I have to boot up Eclipse, set a breakpoint in our Java bridge code, start debugging on a device (assuming it connects when I plug it in), manually attach GDB, now set my native code breakpoints, then resume in Eclipse. If I'm lucky and the stars have aligned, GDB will break where I want it to and maybe give me a stack trace that is accurate.
Here's another example. On iOS there is a wonderful OpenGL debugger. At any point in my game, I can hit the snapshot button and I am presented with a state-change-by-state-change list of every single command I have sent OpenGL. I can step through each of these and see my framebuffer get built one draw call at a time. Totally invaluable for finding errors and inefficiencies. I can even have a code breakpoint trigger this debugger.
On Android? Well this is much, much tougher. I first have to find out which GPU series the device is running (PowerVR, Tegra, Adreno, ARM), then I have to search the vendor's website for their native debugger. When I find it, it is of course, Windows only. So I have to now boot up my VM. To connect my Android device to the Windows VM, I have to first disconnect it from my host OS (meaning I can no longer debug), then re-connect it. Then, I have to locate special Windows drivers for the specific device (most don't work out of the box on Windows).
At this point the steps vary. For a PowerVR powered Android device, for the native debugger to work, I have to jailbreak the phone and manually copy special debugging .so's (that will brick the device if it reboots with them enabled). Then once this is done, I can attach the OpenGL debugger in my VM and try to capture a frame. I say try because these tools are usually so poor that they crash outright when you try to use them. For the PowerVR debugger, it will only capture ES 1.1 frames -- the ES 2.0 will cause an instant hard crash.
What further complicates this is that the wide variety of GPUs that power Android devices vary greatly in their performance, capabilities, and their interpretation of the ES spec. The Adreno 20x series of GPUs, for instance, have a terrible shader compiler that refuses to treat compile time constants as valid indices for vertex varyings. This works flawlessly on every other mobile GPU, but on an Adreno you'll be faced with a black screen until you figure out why your shader was refused.
/end rant.
I will throw Android a bone here however. It is vastly, vastly, (did I mention vastly?) better than the develop environment that you had to use for Symbian devices. That was a special circle of hell that I hope I am never forced to experience again.
- general_failure 14y agoTotally agree. We should standardize on just one kind of cpu, gpu. That way we don't have to deal with any compat issues.