Related
Hello XDA-dev community
For the past couple of months i've been thinking about getting a Pocket PC for a new phone instead of a Symbian Nokia [ah my old 6630, may she rest in pieces...]. Anywho, I think i've decided on the HTC Touch Pro / Raphael. At ~AU$600 it's the highest I was trying not to pay (i'm not rich), however it seems to be a pretty powerful and full featured device.
I do have a few questions I hope some of the kind experts/veterans here might be able to answer for me though
1) I written a few things in Java and PHP and other even-more-basic languages, but am interested in learning a new language with hopes to create software for both Windows PC and Windows Mobile. What choices do we as end-users have here? .NET is an obvious one [I own a copy of Visual Studio 2008 Pro], but are there any other languages of note?
2) From the Raphael specs on the Wiki here, it lists it as an ARMv6 architecture-based processor. This comes from the ARM11 family, which is the successor (I think) to the XScale family (ARMv5TE). Are these ARMv6 processors backwards compatible with 'XScale accelerated' binary builds of software? I.E., a PPC application has two versions for download/purchase - a 'Generic ARM Release' and an 'XScale optimized release' - would the Raphael ARMv6-based device be compatible with these XScale-optimized binaries? Or do ARM do things differently and ARMv6 is not backwards compatible?
3) Has anybody ever heard any rumors or made any talks about porting Android to the Raphael? Just curious. I'd prefer a Windows Mobile device (not a Linux user) but I can see all this OpenSource stuff does have a future... EDIT: Nevermind, I found the page at http://wiki.xda-developers.com/index.php?pagename=RaphaelLinux
4) How does the device perform with 3D-heavy applications? Does it make use of any sort of acceleration (I assume no, not like the iPhone for example).
OK thats all... thanks a lot for your replies, if there's anything else you think is worth mentioning to a soon-to-be-first-time owner of a Windows Mobile device, please do say so Cheers.
In reply to 2) VS 2005 Pro onwards targets code at ARMv4I, basically generic ARM processors also capable of running the Thumb (16 bit) instruction set. Thumb represents a limited set of ARM 32 bit instructions coded as 16 bit instructions. It allows much smaller code sections, but with megabytes of memory available these days who cares? If you code in .NET none of this matters anyway, as the code is created as IL byte code, the .NET runtime sorts it out.
If you code in Embedded Visual C++ 3 or 4 the target chipset is ARMv4. When you use the IDE to create the code on a WinMo 5/6 machine it complains that the target machine cannot run the code. It's lying, what it really means is it does not recognize the processor class. As it is ARM 32bit code only it will work.
It is not worth targetting the code for a specific, (read non generic), ARM chipset. You are just making a rod for your own back when it won't work on something else.
Thanks for the reply stephj. There will indeed be a bit of research for me to do as to which language and/or IDE I decide to choose to train myself in then it seems. Specifically though...
stephj said:
It is not worth targetting the code for a specific, (read non generic), ARM chipset. You are just making a rod for your own back when it won't work on something else.
Click to expand...
Click to collapse
...what I was referring to is - I've seen some freeware PPC software, mainly emulators, that have two versions - a 'generic ARM' one and an 'XScale Compatible' alternative version. On the ARMv6 based phones, assuming the software was released back when XScale was the newest ARM family, would both work on the Raphael? If so, which would be faster?
Obviously though, for a developer, creating the most compatible/generic code to work on the widest range of devices is the main focus - later possibly implementing optimiziations or hacks that are specific to a certain platform - but I'm just wondering if these already built, older 'specifically optimized' builds are compatible with the succeeded chipsets.
P.S. Do you know where I could find some resources on choosing between Visual C++ or .NET? I.e. pros and cons of each?
Thanks a lot!
jonusc said:
Hello XDA-dev community
...
1) I written a few things in Java and PHP and other even-more-basic languages, but am interested in learning a new language with hopes to create software for both Windows PC and Windows Mobile. What choices do we as end-users have here? .NET is an obvious one [I own a copy of Visual Studio 2008 Pro], but are there any other languages of note?
...
Click to expand...
Click to collapse
Since you have VS2008Pro, C++/win32 if you want fast and lightweight applications
"P.S. Do you know where I could find some resources on choosing between Visual C++ or .NET? I.e. pros and cons of each?"
.net pros
easy to get something running fast even if one is a n00b
got a lot of components meaning less time to develop
can be programmed with c# and c++ and even eeeeewww basic
.net con
slow as in sloooooowww
require one to install the framework if the app
require a newer version then what ones phone came with and the framework is pretty big
and people don't seem to have success with installing it on sd cards
compact framework is also limited in features vs. .net on pc so apps don't just port always
limited in features unless one do unmanaged code
c++ pro
fast
require no extre stuff
small in size and again fast
have access to every feature in the phone
c++ con
one have to do everything and that mean msg loop
and a lot of leg work just to get a dialog with a button
steaper learning curve
more risks of mem leaking
harder to debug as stacktrace is not just there
like on .net
Very nice, thanks for the replies guys
So from what I can gather, a basic .NET application would be ideal for RAD (quick and dirty), particularly GUI-centric applications, but tend to be bulky; whereas C(++) is a more native / low-level language and is thus faster, but very hardcore as most functions need to be done from scratch.
I should have assumed it's pretty much the same as a Windows PC
What about C++ versus C#? And does VS2008 have a decent API/IDE set for mobile development i.e. does it have many libraries for C(++/#) already included or are more easily available?
Thanks again for the answers guys... it's obvious i'm keen to learn about it, but i'm a little worried that someone like me going from stuff like PHP and VB to C might be biting off more than I could chew....? Ah well if .NET is gonna cause problems down the line, then I guess I have no choice
Don't bother with the C++ version of .NET, the casts that you have to make, to get it to work makes the code very hard to read, and besides it only compiles to the IL level anyway, it's just not worth the effort.
So, under .NET use C#, or VB if you prefer, there is not much difference between them, but in my opinion, C# is a bit more elegant.
Under C++ you have the choices of WIN32, ATL (Active Template Library), or MFC (Microsoft Foundation Classes), programming models.
WIN32 is the simplist but the hardest to code, the other two add progressively more objects to make things easier, but you need to distribute the run time libraries with them. A simple WIN32 app can be distributed as a single .EXE if the DLLs it already uses are part of the CE/PPC operating system.
PS When it comes to running code compiled for a specific ARM class on your device, just give it a go. If the CPU hits an instruction it can't run, it will throw an exception and stop anyway.
stephj said:
Don't bother with the C++ version of .NET, the casts that you have to make, to get it to work makes the code very hard to read, and besides it only compiles to the IL level anyway, it's just not worth the effort.
Click to expand...
Click to collapse
Fair enough. So C++ in VS2008 is a bad idea
stephj said:
So, under .NET use C#, or VB if you prefer, there is not much difference between them, but in my opinion, C# is a bit more elegant.
Click to expand...
Click to collapse
I thought VB was dead? Wasn't VB6 the last one they made? Or is VB just what they call generic/common .NET Framework apps? Anyway, yeah i've read good things about C#, especially compared to .NET in general. EDIT: Oh, .NET is not the program language but VB is *facepalm* I get it, nevermind
stephj said:
Under C++ you have the choices of WIN32, ATL (Active Template Library), or MFC (Microsoft Foundation Classes), programming models.
WIN32 is the simplist but the hardest to code, the other two add progressively more objects to make things easier, but you need to distribute the run time libraries with them. A simple WIN32 app can be distributed as a single .EXE if the DLLs it already uses are part of the CE/PPC operating system.
Click to expand...
Click to collapse
Ah, same as a Windows PC. That makes sense.
Thanks for the answers I think I might take a look at C sharp.
C++ in VS2008 is fine, use the smart device WIN32 ,ATL, or MFC models take your pick.
Sorry my mistake, the C++ .NET version is not available for smart devices. Its the three models above only.
After additional research, I don't really want to be tied down with the proprietary C# system. So is VS2008 a decent IDE for WIN32 C++ development on Windows Mobile? Or are there better alternatives?
VS 2005/2008 Pro takes some beating. After you have installed about 3 CD's worth of MSDN libraries all the help is on tap. The IDE also looks at MSDN online if you have an internet connection to see if there are any forums on the same topic you are inquiring about.
The code is generated as ARMv4I and can be tested/debugged on the images provided by the WinMo 5 or 6 SDK. The emulators are that good you only put it on your phone when you have tested it to death on the emulator.
EVC 3 and 4 use a previous method where the emulators run a x86 version of the code. I still use EVC 4 for code that has to run on anything, Windows Mobile 2003 for example.
It's all pretty proprietory, when it comes down to it, but I guess we're stuck with it.
How can I become a XDA Developer? I'd love to become one, specifically programming for Android apps, ROMs, and stuff like that.
Can anyone give me an head start?
Specs:
MacBook Pro, Mid-2010
Processor: 2.4 Intel Core i5
Memory: 4GB 1067MHz DDR3
Graphics: nVIDIA GeForce GT 330M
OSX: Lion 10.7.2 (Build 11C74)
I can't seem to install Android Kitchen, and fink is too confusing for me.
I already have the AOSP source code for ICS.
Learn java for programming apps. C for developing kernels. Both are similar to an extent so it shouldn't be that hard. I am unfamiliar with the offerings of a OSX but if you can dual boot to windows or Linux, get eclipse (the more preferable one) or netbeans for java and if you're on windows, visual c++ 2008 or whatever (dev c++ is very loose with its strictness in syntax so avoid that).
Books... Well these books contain a lot, and I mean a lot of information. They will have a lot of jargon which you will probably be unfamiliar with, so learning from one might be really difficult. So I suggest say a dummies book or something concise and in layman terms at first, then after maybe head first into java, a reference c manual or c how to program for the nitty gritty stuff or when you're more experienced.
Don't worry, your computer is more than enough for your stage right now, it'll probably take you a year or so or more to actually get up to the "developer" (note not professional developer level, that you will need your 4 years. xD) (if you take this really seriously e.g. classes, practise, reading, etc).
I have Eclipse for OSX, and it has the Android plug-in and can write Java and C programs.
But what language do I use for ROMs?
it is written in both c and java. The java runs on top of the c. Most of what we use is in java, but the core (kernel (think drivers etc)) is in c.
If you are thinking of say a cyanogen mod level of modding (meaning changing the source code to improve android) then you will need a professional level of development skills, which will take a long time, unless you are some genius. But most chefs really only build a rom through using an existing rom, use a tool/ program to do say deodex or such, remove this app and that, put in this kernel, change this file to this file, and done, it's a custom rom. That requires no programming knowledge whatsoever.
You seem to know a lot. Could you be my mentor/tutor or something?
Oh no, i'm still in high school lawl. I've only done computer science for one year and a half right now and that's it. I know nothing of java and its syntax and really I only know an intermediate level of c. So yeah i can't really tutor or help you, sorry. xD We'll be on the same road my firend, although my dreams aren't stopping with android. (I'm aiming for you holograms and car AI systems, you best be ready.)
Anyways there's a forum on xda dedicated to helping people learn how to develop roms/android and possibly apps called chef central. Head over there for the big guys to help.
I will be honest, I'm not an Android developer - at least not yet. That said, I'm looking for an environment to performance test apps. More or less, looking for a sandbox to test apps with. For this, it doesn't really make sense to use a real device. So I'm debating between the SDK emulator and using Android x86 in a virtual machine. Each seems to have strengths and weaknesses.
I think the main advantage of the SDK emulator over Android-x86 is that it can be used to test apps for different AVDs very easily. Plus, it natively supports NDK ARM code and can be used with x86 code with version 17 (right?). The downside, is that it is painfully slow.
On the otherhand, Android-x86 has much better performance itself, but currently (maybe not for too much longer) lacks support for ARM-specific code.
Another option is BlueStacks, but I haven't looked into it much yet and am not sure how well it will suit my goals.
I was hoping to get a little survey of opinions regarding the two from developers and folks more familiar with Android than myself.
CurlySpiral said:
I will be honest, I'm not an Android developer - at least not yet. That said, I'm looking for an environment to performance test apps. More or less, looking for a sandbox to test apps with. For this, it doesn't really make sense to use a real device. So I'm debating between the SDK emulator and using Android x86 in a virtual machine. Each seems to have strengths and weaknesses.
I think the main advantage of the SDK emulator over Android-x86 is that it can be used to test apps for different AVDs very easily. Plus, it natively supports NDK ARM code and can be used with x86 code with version 17 (right?). The downside, is that it is painfully slow.
On the otherhand, Android-x86 has much better performance itself, but currently (maybe not for too much longer) lacks support for ARM-specific code.
Another option is BlueStacks, but I haven't looked into it much yet and am not sure how well it will suit my goals.
I was hoping to get a little survey of opinions regarding the two from developers and folks more familiar with Android than myself.
Click to expand...
Click to collapse
I always use the sdk emulator OK its a little on the slow side but quickly let's you test apps on a range of set ups. Plus having it integrated with eclipse makes the process even quicker
Sent from my GT-N7000 using xda premium
So I was wondering if its possible for someone to create or start developing an application that can emulator x86/64 code on an arm architecture?
What x86 code, exactly, do you mean? Do you mean running native x86 code directly or do you mean taking Java or .NET code and running it?
Ultimately, pretty much *anything* is possible to emulate. However, emulating it in a way that it can run in a reasonable amount of time is unlikely to happen. There are just so many things that are limited in the RT version of the .NET Framework.
ok, im not exactly best qualified for this but ill try and explain
in short, no, you could potentially make an emulator for a given program, but to make some be all end all x86 emulator to cover everything would be massively inefficient and probably not possible
you primary obstacle is that RT uses managed code, that means MS tells you want you can and cant do, it gives you the frame work if you like and you can build what you want within that frame work but step outside it and do your own thing isn't possible (yet)
once you got over that barrier, next up would be to port every single function and call sent to the CPU to an ARM equivalent, ARM is like a tadpole compared to Blue Whale of X86 so it wont do everything on chip meaning youd need to also convert it in software to something it can do
It would be like trying to blow a golf ball through a garden hose
however, small limited programs that don't rely on many hardware functions and with limited calls outside of its own program would potentially be possible to emulate assuming you can get native code to work anyway
Surface RT - Paperweight
Surface Pro - Glorified Tablet/Notebook
Just go with the Pro, it will make life much easier. The whole emulator debacle isn't even necessary if you just go with the logical choice.
I mean the Tegra 3 is awful as an SoC--I don't know what moron said Quad A9's are better than A15's, not to mention the GPU is junk compared to an SGX.
Overall Micro$oft shot themselves in the foot.
qhdevon43 said:
So I was wondering if its possible for someone to create or start developing an application that can emulator x86/64 code on an arm architecture?
Click to expand...
Click to collapse
Actually Visual Studio 2012 could technically support building desktop applications to run on Surface RT and other RT (ARM) tablets. However, at this time, Microsoft is also allowing Microsoft signed applications. And, I heard that if you disabled that check in the registry, then you get blocked by RT. It is definitely possible that in the future, Microsoft might allow desktop applications to be recompiled for RT.
In the meantime, Remote Desktop is wonder in that I can connect to my Windows 8 laptop and use it to run any application with almost full touchscreen functionality. So, combining a Surface RT and a Windows 8 computer is ideal for me.
wrexus said:
Actually Visual Studio 2012 could technically support building desktop applications to run on Surface RT and other RT (ARM) tablets. However, at this time, Microsoft is also allowing Microsoft signed applications. And, I heard that if you disabled that check in the registry, then you get blocked by RT.
Click to expand...
Click to collapse
Add it stands, you can't even really disable UAC without breaking Metro in full Windows 8 (the UI setting to disable it doesn't really disable it). They have that thing locked down pretty well!
You can enable test-sign mode on RT, this would allow you to run your own ARM desktop apps, signed by your own cert, not with MS one. This is absolutely legal, but it can be closed by MS in some of the new hotfixes (and they'll definitely will, when this mode would be used to run cracked apps).
It is really possible to make a working x86 CPU emulator that would allow you to run x86 windows programs on RT. Just remember my port of "heroes of might and magic" 1 and 2 for Windows Mobile - it was more difficult to make it, as WM had a more limited Win32 API than Windows RT has.
I'll make a nearly universal emulator for RT when I'll buy a device, project is already started and has good results. But I'm waiting for a device that is based on quad-core Snapdragon S4. I would not recommend buying Tegra devices, 4-core Krait beats them in CPU and 3D speed. And high CPU speed would be necessary for smooth x86 emulation.
Quad A9's are better than A15. If you wasnt too busy kissing jobs ass, you would know this. Tegra line is alot better that any apple "cpu"
Ace42 said:
Surface RT - Paperweight
Surface Pro - Glorified Tablet/Notebook
Just go with the Pro, it will make life much easier. The whole emulator debacle isn't even necessary if you just go with the logical choice.
I mean the Tegra 3 is awful as an SoC--I don't know what moron said Quad A9's are better than A15's, not to mention the GPU is junk compared to an SGX.
Overall Micro$oft shot themselves in the foot.
Click to expand...
Click to collapse
@Jaxidian: Disabling UAC disables Mandatory integrity Controls, which is how the sandboxes for both IE and Metro-style apps are implemented. Metro-style apps check, when they are launched, if they are running in such a sandbox, and exit if they aren't.
Disabling UAC is, and always was, a terrible, idiotic thing to do, and I truly don't know why MS made it an available behavior. Just set it to auto-elevate without UI instead, if you really can't stand having proper principle of least privilege in your OS. This is a little more complex (you have to use the Local Security Policy editor, which can be launched by typing "secpol.msc" into Run or by going into the Administrative Tools) but is a much better solution as things which explicitly want to be run with limited permissions (sandboxing) still can be.
@dazza9075: Dosbox is an x86 emulator that is already available on other ARM platforms. It just doesn't support the (many) x86 opcodes that have been added since the 386. It certainly can't do 64-bit. However, it's fine for running old DOS programs, including games. Somebody should port it to the Windows Store if possible, or at least see about making a homebrew build of it that we can run on RT devices. This is totally not my area of expertise or I'd do it myself.
A full x86 emulator, like Microsoft's old Virtual PC for Mac (except running on ARM instead of PPC), is technically possible. It's just hard. It sounds like some people are already working on this, though.
Regarding publishing DosBox, Bochs, Qemu, ScummVM and other emulators to Windows Store - they would be unable to pass the certification. Read the requirements here http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx
3.9 All app logic must originate from, and reside in, your app package
Click to expand...
Click to collapse
For emulators - app logic resides in an emulated program that is typically not present in app package.
By the way, Microsoft Internet Explorer can't pass this check too - as it downloads and executes flash from web. But MS is already known for its double-standards.
The other reason why those apps may be refused:
3.5 Your app must fully support touch input, and fully support keyboard and mouse input
Click to expand...
Click to collapse
Old programs (games at least) may be unusable without keyboard or mouse. My own program was refused for this reason, because it is unusable without hardware keyboard.
It is possible (and really easy) to port Bochs or DosBox for RT as a "desktop" application (making a "metro" port would be a bit more difficult). I can do that myself when I'll get hands on a Krait-based quad-core RT device, if someone would not port them earlier.
Regarding Tegra 3 vs Krait - Krait is not directly based on A9 nor on A15.
mamaich said:
You can enable test-sign mode on RT, this would allow you to run your own ARM desktop apps, signed by your own cert, not with MS one. This is absolutely legal, but it can be closed by MS in some of the new hotfixes (and they'll definitely will, when this mode would be used to run cracked apps).
It is really possible to make a working x86 CPU emulator that would allow you to run x86 windows programs on RT. Just remember my port of "heroes of might and magic" 1 and 2 for Windows Mobile - it was more difficult to make it, as WM had a more limited Win32 API than Windows RT has.
I'll make a nearly universal emulator for RT when I'll buy a device, project is already started and has good results. But I'm waiting for a device that is based on quad-core Snapdragon S4. I would not recommend buying Tegra devices, 4-core Krait beats them in CPU and 3D speed. And high CPU speed would be necessary for smooth x86 emulation.
Click to expand...
Click to collapse
mamaich said:
Regarding publishing DosBox, Bochs, Qemu, ScummVM and other emulators to Windows Store - they would be unable to pass the certification. Read the requirements here http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx
For emulators - app logic resides in an emulated program that is typically not present in app package.
By the way, Microsoft Internet Explorer can't pass this check too - as it downloads and executes flash from web. But MS is already known for its double-standards.
The other reason why those apps may be refused:
Old programs (games at least) may be unusable without keyboard or mouse. My own program was refused for this reason, because it is unusable without hardware keyboard.
It is possible (and really easy) to port Bochs or DosBox for RT as a "desktop" application (making a "metro" port would be a bit more difficult). I can do that myself when I'll get hands on a Krait-based quad-core RT device, if someone would not port them earlier.
Regarding Tegra 3 vs Krait - Krait is not directly based on A9 nor on A15.
Click to expand...
Click to collapse
But its only a matter of time before we figure out a way to sideload metro apps without going through the store.
Here's a link to the project:
http://code.google.com/p/zgrom/
A cut&paste from the page:
ZGrom is a gaming oriented distribution for Sharp Zaurus PDA devices. It's a console based distribution built around the Gmenu2X SDL GUI. ZGrom has a wide selection of quality emulators, game engines and apps. Currently, ZGrom only supports the following Zaurus models:
•C-1000 - Akita
•C-3000 - Spitz
•C-3100 - Borzoi
•C-3200 - Terrier
ZGrom comes with GINGE. In a nutshell, GINGE enables ZGrom users to run unmodified GP2X binaries. Some of the emulators and game engines that come with ZGrom are plain, unmodified GP2X binaries that execute on Zaurus devices via the GINGE static loader.
A link to the gmenu2x page:
http://mtorromeo.github.com/gmenu2x/
A cut&paste from the page:
GMenu2X is a frontend application targeted at embedded devices, originally developed for the GP2X and successively ported to other devices.
GMenu2X provides an easy to use interface with quick access to the games and applications of the device trough links similar to those found on PC's desktops.
Its interface is fully customizable with skins.
Other features include: built-in selector for emulators, manuals and readmes integration, built-in overclocker, gamma and volume configuration, ram timings tweaker.
I started working with these but like with other projects... i'm short on time these days. The last of my efforts had a working kernel for these, only a keymap was needed to give to the zgrom developer to build a rootfs, and for someone to text and debug.
IMO the better way would be focusing on developing Android distro, because probably most people are still waiting for working Android on our beloving UNI! Anyway, your efforts are great and mainly because of you UNI developing is still alive!!! Good luck!!
l2tp said:
IMO the better way would be focusing on developing Android distro, because probably most people are still waiting for working Android on our beloving UNI! Anyway, your efforts are great and mainly because of you UNI developing is still alive!!! Good luck!!
Click to expand...
Click to collapse
Lol, I know, I’m taking a break waiting for another project to finish up:
http://forum.xda-developers.com/showthread.php?t=1948803
I’m working on shrinking android now; deleting unneeded library’s and functions to lower memory/processor requirements and running processes. This OS is better suited for people who don’t use their universal as a phone and only have 64mb of ram. I don’t have time to work on this either, the question “Who wants to port ZGrom?” wasn’t rhetorical; I really want someone to pick up where I left off porting it. And android for universals is mostly done all hardware except the cams work. Power saving, gprs, sound on both ends of the call all work… I just need to trim and speed it up….and learn some arm assembly to add in iwmmxt optimizations.
I understand that 64 MB of RAM is too little to run any recent Android version (and by recent I mean higher than 2.2), so it'd be good if there was some alternative OS to bring life to old Universals with the standard RAM - even if that new 'life' doesn't including phone abilities. I don't think the PXA 27x CPUs aren't really that optimized to run Android either (Android can be slow on ARMv6, let alone ARMv5). I'm not telling you to give up on the Android thing; just trying to make people realize notime can't focus forever on something that can't be further optimized... but if it can, then just go ahead
In that sense, I support any development efforts towards something that's not Android.
Also, the work done in porting recent Linux kernel versions can be used not only in Android but in any other Linux-powered OS porting. I may have a go at it... once I format my computer with a bigger ext4 partition (currently out of space to install any kind of cross-compiling tools or SDK) - and this can get delayed for several months.
I was playing around with my Universal (with a dead battery), running old Linux distros on it (with things like Qtopia and Opie), when I started thinking if there wasn't a more recent thing to run other than Android. Then I remembered I had promised to try to port this thing once I got my computer formatted...
Actually I have already formatted my computer and now I have a mostly free >250 GB ext4 partition. I'll only be able to start working on this in the beginning of July, however.
This seems like the perfect use for a Uni that doesn't survive when it isn't charging.