Saturday, April 22, 2017
PPSSPP Gold PSP emulator APK Full v0 9 5
PPSSPP Gold PSP emulator APK Full v0 9 5
I wanted to refrain from blogging about this until I had at least somewhat delved into Android development. And although I am by no means a guru at the Android platform yet, I feel I can safely make some broad statements, step on some toes, and be able to sufficiently back up my opinions. [0] :)
The Byte Code
Google made some interesting architectural and strategic decisions regarding Android. The most notable being Java as the development language and Dalvik as the underlying bytecode. Dalvik, in short, is a byte code that is interpreted at runtime, similar to Suns Java byte code or Microsofts Intermediate Language (aka IL)[1]. I didnt really understand why Google would go and create another byte code specification for Java until I read a great article by Stefano Mazzochi. The long and short of it is, Sun has some nasty licensing around Java ME, and the "Open" Handset Alliance cant really have an Open platform with the possibility of some mega-corporation trying to wet their beaks at their expense. [2]
So, still begs the same question: why invent a whole new byte code when Intermediate Language has no such licensing (it is an ECMA approved standard)? Maybe Google took a look at it and decided it wasnt suitable for a mobile platform, or maybe they didnt want to jump into bed with Microsoft. Im guessing the latter.
The Language
At the end of the day, the byte code generated behind the scenes is about as important as the color of my socks. I generally dont think about it on a daily basis, and what really matters is the language you are writing in. I can understand that Google chose Java to ease their target developer bases transition the new platform, but still... Im going to just go ahead and say it. Java sucks.
How much does Java suck? Let me count the ways.
- Terrible constraints around package/file/directory/class names.
- Lack of anonymous methods.
- Lack of closures.
- No lambda expressions (or LINQ).
- Lack of events/delegates.
- Lack of partial classes.
- Ridiculous implementation of enumerations.
- Terrible implementation of generics (type erasure).
- No user defined value-types: no "struct" and thus no capability of having objects that live purely on the stack. This is nasty on performance when it counts (such as in games).
- Strings are immutable, but not interned.
- No access to "unsafe" code.
- No get/set accessor methods.
- No operator overloading.
- No extension methods.
- Last but not least, stupid and unintuitive brace positioning.
How many ways? 13, 14, 15, Ha, Ha, Ha, Ha, Ha!
Im not trying to be a nit-picky zealot here; everything I listed is a feature I use on a regular basis. I will admit though, that I am enjoying anonymous classes to some degree, but they would be mostly pointless with the availability of events/delegates. I realize that most of what I listed is just syntactic sugar, and neither Java or C# is more "powerful" than the other; they can each do anything you need in their own way. Except C# lets you do it more quickly, intuitively, and elegantly. [3]
The Development Environments
Eclipse is a giant steaming pile of... yeah. Yes, very capable, very flexible, but whoever is doing usability testing on this junk needs to get a job that involves testing the constricting force of a rope around their neck.
My biggest pet peeve is the fact that you cant simply click in the Expressions view and edit or add something inline. You have to right click it and click add/edit. That takes you to a vanilla text editor (which has no Intellisense/Content Assist), type in your expression, pray it is parsable, and then click ok. Otherwise you are having to go through that zillion step process yet again.
Earlier I gave some kudos to Javas inner class capabilities. As neat as they are, Eclipse makes them damn near unusable: you cant watch a value of a member variable in the parent class of an inner class. That makes debugging a giant pain: you need to load all those members into local variables if something is going wrong, otherwise it is impossible to find and fix even simple issues, such as a null reference. Im not sure if this is a problem with Eclipse, Java, or Android though.
The auto-complete in Eclipse is painfully annoying. Auto-complete should be optional, and not forcibly inserted with no regard to what the developer wants. I ended up turning it all off, because what it was inserting was generally useless. And even though the auto-complete is off, Eclipse is still inserting parenthesis for me...
The SDKs
Though I have been complaining a lot about developing on Android, I do want to point out that I havent actually complained about Android. Basically every API I could think of was standardized and implemented.
My litmus test in this regard was a port of Klaxon to Android. It really helped underscore the huge differences between the two platforms.
For me, most notable was the APIs to access device sensors. Version 1 of the Android SDK exposes a simple SensorManager class that took me 5 minutes to figure out and access. Microsoft has had 6ish versions of Windows Mobile with no Sensor API in sight.
Secondly, scheduling processes to start on Android is infinitely easier than in Windows Mobile. Heres how that learning process worked for me on Windows Mobile:
- First I started with CeRunAppAtTime. I write a gross PInvoke for this. This works for a while, then stops working completely. Others have had this issue as well. I need to switch to another mechanism.
- Then I switched to CeSetUserNotificationEx. I write yet another gross PInvoke for this.
- This involves filling out some elaborate UserNotificationTrigger structure. I eventually get this working.
- Then I find that if the device is sleeping, Klaxon sometimes does not start properly.
- I solve this issue by digging through some documentation and randomly figuring out the problem: I need to force the device to turn on or it goes back to sleep.
- Klaxon works again for a while, until daylight savings occurs. On some phones, it is now firing an hour late. I have no idea why. I have given up.
Lets compare this to Android:
- Access the AlarmManager.
- Tell it to turn on and fire an intent at a certain time.
- Handle the intent.
This just works, no hassle, no fuss. I must say, intents are easy to use, amazingly flexible, and equally powerful.
So, two of the "difficult" parts for creating Klaxon on Windows Mobile were not so difficult at all on Android. The final piece: UI implementation.
Windows Forms code versus Androids XML Layout. Windows Forms which works with absolute sizing and positioning, and Android which uses relative sizing and positioning. Windows "Static" Controls versus Androids Animatable Controls. There really is no comparison, so I wont even bother.
Simply put, the relevant Android SDK blows the Windows Mobile SDK out of the water (language and framework features aside).
Windows Mobile does have far better documentation (MSDN) than Android, but I consider that more of a teething issue that would occur with any new SDK.
The Platforms
Android is pretty heavily locked down from a security standpoint. Applications must register what capabilities they wish to have, and the user must approve of them. And though this security is all in all a positive thing, it does have its downsides; for example, it is impossible to write an application that screen shots a screen other than its own, as this is considered a security risk. [4]
And though this is not really a fault of Android per se, the phones that are actually being released are not as "open" as the name Open Handset Alliance would suggest. Carriers always have and will continue to lock down phones so long as they subsidize them. For example, the user does not have access to the root account on the G1; this makes removal/tweaking of the standard Android applications impossible. But at least on Android you can tweak the standard applications due to it being open source (after getting root).
On the flip side of the coin, Windows Mobile doesnt have a VM hiding all the nitty gritty details from you. Developers can easily get low level access to anything, without having to worry about Microsoft filling the holes. For example, if Android were to have shipped without a Sensor API, there is no way (outside of manually installing native binaries through ADB) that a developer could implement it. And that is not a comforting feeling. For example: Android does not support streaming video through the MediaPlayer yet, and as far as I know, nothing can be done about that unless the native android binaries are patched through an OTA update.
Oh, and the Android Market. Not going to bother elaborating on this point, as the statement itself is pretty self explanatory.
Summary
I dont really have anything insightful to say here, and that may be because it is 4AM. Ill wrap it up by saying, I really enjoy developing for Windows Mobile. The language and tools are great. However, the platform and applications simply are not very usable. On the other hand, though Im not completely discontent with Android development, the platform, applications, and general usability is fantastic; for once I dont have to fight my phone to do simple things like browse the web. So you can guess which phone is always in my pocket. And then you can infer which once I am more interested in developing in.
That said, I hope Microsoft can produce a usable platform in the near future; as that would make me a very happy user and developer. I cant believe Im going to say this, but they should take a page out of Apples book and just say "screw backwards compatibility, screw existing applications, were going to develop a brand new platform that works". Theyve been catering to the backwards compatibility mantra for so long that it is impossible for them to move forward. And all the while, they are alienating the very market share they are so afraid to lose.
[0] Ive released 2 applications on the Market, Telnet and Klaxon, so I feel I have a decent grasp of developing for the Android platform. Klaxon has really helped underscore the huge differences in the platform.
[1] Yes, I realize that IL is not interpreted on the Windows Platform, it is JIT compiled.
[2] As "evil" as Microsoft may be connoted to be, you dont see them on the news exercising their patent rights. Unlike Sun.
[3] Im thinking about looking into Ruby.
[4] Maybe Google will implement this in the future.
Go to link for download