Windows phone 7 native code support - c++

2 questions:
Can someone tell me if unmanaged c++ code will
be supported in future versions of Phone 7 OS for all developers?
What are MS reasons for not
supporting unmanaged c++ code?

This answer is purely speculative, but I feel that most others who have answered this question miss the point by a long shot. Let's for a moment assume that this is not a vindictive decision by Microsoft, but instead actually a very well thought out engineering decision that has absolutely nothing to do with content restrictions or otherwise. Those issues are just a bonus for MS
Microsoft is entering into the mobile market, this time for real it seems. Pretty soon there will be tens of millions of Nokia phone being shipped using Windows Phone and whatever they get on top of that will just be gravy. Windows Phone though still hasn't really found its home.
In the next year or two, phones, tablets and laptops will finally start converging into a single device. People will carry their phone in their pockets, but that phone will also be the CPU unit of their PC. That means that by simply sitting near a wireless HDMI monitor and connecting a keyboard and mouse via wireless USB (or bluetooth if we're all unlucky), the user will have their entire PC with them at all times. Tablets will become just a battery powered touch screen which interfaces to the PC in your pocket.
So, all software written for Windows Phone should be able to run unmodified on a PC, a tablet and/or a phone. This is because there's a huge chance that the PC you're running will be either x86 or ARM based running Windows 8. When the PC is in your pocket, the user interface you'll see will be the Windows Phone GUI. When you're hooked up to a monitor, you'll see the ribbon interface. But the underlying OS will most likely be Windows 8, not the Windows CE that is currently used.
Based on all this, the only way Microsoft can insure that developers who invest in producing apps for the Windows Mobile market will not be screwed and that users of Windows Mobile devices won't be shorted when the newer platform comes around is to ensure there is a standard system for running apps on all these processors.
Even now, writing for Honeycomb is a nightmare since if you develop native code, you have to support both ARM and x86 and there's no real support mechanism for it. The only solution is to develop, package and ship two versions. Writing apps for iDevices are a little easier since there's no overlap. x86 on desktop, ARM on device. If you have to use native code on device, ARM is all you need. Even then, there is fat binary support on both device and desktop, so this won't be a problem except when optimizing.
In the end, the decision by Microsoft to stick strictly to .NET is probably a good one. Once they have a gazillion Nokia phones on the market and things have settled a bit, native code could be a real possibility.

These answers are for the application development perspective. OEMs can write native code today, as that's how they create drivers, but that's not open or available to most developers and therefore of no use to most.
For #1 Microsoft has made no announcements, so only Microsoft knows the answer and they're not saying.
For #2 it's all about code security and overall platfrom stability It's very tough to sandbox native code and they don't want your app being able to affect other apps or the platform itself. The general idea is that you should be using Silverlight or XNA for application development, so that's what they expose.

Windows phones will go nowhere with native support. Games and other more intensive apps are driving sales. Android was forced to blow the lid off of its NDK to support the games industry. As far as supporting multiple processors, etc., those of us doing this kind of work have been doing it for a long time, so its no problem. Already handling Intel and ARM without a problems with our systems.

EDIT, finally: for WP7 unmanaged code won't ever be supported, but in Windows Phone 8 - yes it will! They've just announced it. Native apps, C/C++, iOS/Android portability and code sharing, DirectX. You'll need Visual Studio 2012 and Windows 8 for WP8 development, though. Looks like VS2010 is not getting the requisite WinRT SDK.
The nongame UI, however, will still be XAML-based. Win32 API will not be supported. They're pushing a model with managed UI layer and a native middleware beneath it.
SDK will be available later this summer.
For the sake of posterity, here's the pre-06/20/2012 answer:
Microsoft probably can.
To ensure platform closeness, as a means for attaining stability and UI consistency. To enforce app isolation. Also, to make jailbreaking/rooting harder.
EDIT: if you want a native SDK on WP7, like I do, please go sign this petition and/or that petition. Thank you!
EDIT: see this.
EDIT: also this. Still not official, but this rumor moves the timeframe for native app support even closer - to the upcoming Tango release.

I believe MS will support native development like C/C++. Really. Seriously.
Because, for end users, one of the killer app is game. And Most of game codes are based on C/C++. JS or C# based codes are exist, but meaningless from industrial perspective. Consider big players in game field like Unreal or EA. They made huge investment on C/C++ codebase. They won't give it up. In other words, MS has no power to force them to spend money for .NET. Even Xbox360 development offers C/C++ development. Because of that.
And leading platforms like iOS/Android all supports native development. WP can't bear up the situation without any game from big players. MS really wants 3rd path games, and offering native code is the only way to get them.
Of course, this can be applied to other apps which are not game, but games are biggest one. When C#/XNA just came out, there's no library. People had to make everything themselves. Now there're a little more, but still meaningless for professional games.
If MS won't offer native environment, just don't go there. MS wants to make developers to use managed .NET code, but .NET has too many limitations can be solved with only unmanaged code.
The only question is just when will MS support native development.

Related

Flash game for desktop + mobile using starling/stage3d

It has been a nice run of about 7 or 8 years now that we have developed Flash browser based games for the web exclusively. Of course with the ubiquity of mobile devices, things have changed. Clients are starting to demand, almost assume, that games will work in the browser - on the desktop and on their tablets.
Putting aside the whole discussion of using an HTML5/JS solution instead, we're sticking with Flash for the next project and need to figure out the best way to get it to run on the desktop browser and on the iPad, while maximizing code re-use.
Given the current state of technologies today, what is the best path? This game will be a 2D side-scroller type game with some physics, and development will be done mainly with bitmap graphics (as opposed to vector) and spritesheets.
Here are what I understand to be my options:
Option 1: Develop the game targeting the 'standard' flash player for web (11 or higher), then port to an iOS AIR 3.2 app, doing appropriate optimizations like the ones outlined here.
Option 2: Use Starling/Stage3D for desktop, and then port to an iPad app. Just wondering if starling is ready for primetime making production quality games for mobile + desktop. Does Stage3D still work well enough in software mode on older machines?
Option 3: The new feature in CS6 that lets us publish to HTML5. Is this even close to mature enough to publish a full game? The benefit of this solution is that it could run in the browser on the iPad instead of being a separate app.
Thianks so much for any guidance.. I'm also wondering about pitfalls, and optimization techniques involved in any of these. But it seems the underlying question in all this is should we use Starling/Stage3D or not?
Definitely Option 2.
You could go with Option 1, but performance on mobile would likely suffer without Stage3D hardware rendering.
Option 3 is only a good choice if you're designing/porting ad banners with basic animation, should be avoided for game development.
More here: Adobe Gaming SDK

Is MeeGo Development Viable?

To start, I'll put this question into context:
Is it viable for an individual programmer. Possibly a small team for an artist, but think mostly a very small non-corporate team making commercial apps. I'm mostly asking this question as a mobile apps programmer who would be interested in deploying his apps to multiple platforms.
I understand that Symbian is effectively dead (that is, on the way to dying).
I have a good amount knowledge regarding C++ and the Qt APIs for desktop OS's... I'd also therefore be wondering if programming Qt for MeeGo has a significant learning curve (is this Symbian C++ all over again?).
Any tips of advice I could get regarding application distribution on MeeGo devices, number of distributed devices, etc. would be much appreciated.
Symbian is dead because the companies that made it popular have abandoned it.
Meego never had any companies make it popular. Intel is still sort-of backing it, and eventually it is theoretically possible that it might one day end up being actively used in the market. But the thing about Intel is that they don't make a lot of phones. Or tablets. Or anything else where Meego might actually be relevant. And the companies that do make phones have so far shown next to no interest in using Meego. Nokia flirted with Meego for some years, but that was in their most schizophrenic period, when they experimented with a new technology stack every 2 months.
But right now? You'd be moving from a dying product to one that was never alive in the first place.
I wouldn't bother. Nokia have abandoned MeeGo in favour of Windows Mobile and they were the only manufacturer that had shown any interest in MeeGo.

Approach to developing an application across many Nokia devices

First off, greetings everyone and thank you for your interest in my question.
I'm currently working at a mobile startup. Our product is a communication app for Android, iOS and BlackBerry devices and we're looking to expand onto some Nokia platforms.
I don't know a lot about Symbian details as I've never actually programmed in the platform before but this is all of the information I was able to gather.
The platforms to support are Symbian S60, Symbian^3 / Symbian "Anna", Maemo + Meego.
In order to accomplish this, there's several tools at our disposal but we're not sure which ones to use.
Nokia Qt appears to be unsupported on Symbian S40 devices (we seem to be stuck with J2ME) and Symbian S60 devices pre-3rd Edition Feature Pack 1
On Symbian's C++ we can't rely on C++'s STL. This means that we can either create two versions of the same software or create our own STL that's compatible with Symbian (I'd like to avoid that).
Approach
Among the team the consensus seems to be to split this into two logical chunks:
Core business logic + libraries in C++
Device specific UI branches using Qt or native UI tools
With all this information in mind, I ask:
What is the general approach for this problem? Is there any considerable flaws with the one mentioned, namely incompatibility or inconsistencies with Qt on older platforms?
What pitfalls should we avoid to ensure compatibility and performance of the app across all Nokia devices listed?
Is there a way to get around Symbian's C++ limitation of the STL? Can we bundle the Qt sources somehow?
Suggestions and other approaches are welcome. Thank you for all your feedback.
You should consider that Symbian is a dying platform, so I would not invest huge development effort into a Symbian application. And even more so I would not use Symbian C++. Qt is a promising platform but Nokia/Microsoft announced that there will be no Qt port for Windows phone (which might be interesting for you).
Maybe you should support Nokia devices only by Java ME because Symbian has big market share but the most devices are not smartphones where you can run a Qt app.
Your approach sounds very idealized, but I am not sure if you can use the C++ libraries you mentioned for the business logic from Java ME. Is that possible?
There are STL implementations that are possible to use on Symbian.
I was once part of a team hat used a C++ core (with STL) on Symbian devices ranging from S60v1 to S60v5 as well as UIQ, S80 and S90. The same core was also used on windows mobile.
We used STLPort for the STL implementation, but I have been unable to find that specific version again. I do believe there are other Symbian STL implementations out there.
On the other hand S60 device have a very competent J2ME runtime, so if you have to develop a J2ME app for S40 devices you might as well use it on S60 as well.
I am not more experiences as you but according to me Qt is good for Application development.Write code once to target multiple platforms
Qt allows you to write advanced applications and UIs once, and deploy them across desktop and embedded operating systems without rewriting the source code saving time and development cost.
Thanks

Can I make a rather native C++ app with Android?

I'm interested in the following features:
Writing an app for Android Market that is written completely in C++ (a port of existing product actually).
Use fast screen-buffer pixel pushing (or rather using OpenGL ES for this).
Grab user input and direct it to C++ code.
Is it legal to write such an app for Market? Is Market policy somehow strict to such things?
As of NDK r5 with Android 2.3 (Gingerbread) this is possible, although I assume only devices to support natives apps must have Gingerbread on them.
From the native-activity sample:
The Android SDK provides a helper class, NativeActivity, that allows you to write a completely
native activity. With a native activity, it is possible to write a completely native application.
NativeActivity handles the communication between the Android framework and your
native code, so you do not have to subclass it or call its methods. All you need to do is declare
your application to be native in your AndroidManifest.xml file and begin creating your native
application.
It is really not my cup of tea but there is something called Android NDK (Native Development Kit) to use if you want to write your program in C. Not sure how the C++ compiler support is though.
As far as I know your app can be almost 100% native code but keep in mind that by walking that way you will probably have a hard time supporting the different CPUs out there in Android hardware. If you need to bootstrap the native code so that it is started from java it is probably not a very big problem for you.
I found a few different tutorials when googling for "Android NDK". This one is a very minimalistic Hello World. Obviously you want something much more than a library that returns a string to java but it is a good first start and you will probably have to do all of the things described. Do a search using NDK and Android as keywords and you get a good selection. I see no reason to list them here as such lists tends to be outdated and broken within a year or so.
I guess the official Android Developer site from Google will stay put and be updated on new releases of the platform, it has a link to the current NDK.
With Gingerbread (Android 2.3) it looks like you can build your entire app in C++.
cf:
http://phandroid.com/2011/01/11/android-developers-blog-awesome-ndk-leads-to-awesome-apps/
"
With the latest version of the NDK, r5, many big improvements have been made to coincide with the release of Gingerbread. The most major is the ability to code a native application for Android 2.3 entirely in C++. This means even programmers and developers with no Java knowledge won’t have to implement a single line of that code..."
Can't vouch for the veracity of this blogger, however, from what I have read, it appears you can do this
There is no 100% native solution but what I think you are looking for is the Android NDK (Native Development Kit)
From their site "Please note that the NDK does not enable you to develop native-only applications. Android's primary runtime remains the Dalvik virtual machine."
I believe it lets you make calls to your own native code from an Android application
I have personally never used it for my games, but I am sure it would help on a lot of things (like being able to manage my own memory and not have "lag" do to the garbage collector)
conversations in this thread can help you.
http://groups.google.com/group/android-ndk/browse_thread/thread/50362904ae0574cf
essence is,
It is possible to make Native only apps and Android Market doesn't restrict you either.
But with limited support for native development, there is high chance of using some of the non standard functionality which might break in future releases.
http://developer.android.com/guide/basics/what-is-android.html
"The Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language."
http://arstechnica.com/open-source/news/2009/06/android-goes-beyond-java-gains-native-cc-dev-kit.ars
In general, you don't. There is some limited C++ support through JNI, but it is mostly intended to supplement Java code, not replace it. There's no framework/API support (AFAIK) for C++, so doing this isn't really an option.

How to start develop for chinese mobile phones based on nucleus RTOS? (MTK) [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
I've noticed that chinese mobile phones became very popular, perhaps because of their very reasonable price and many modern features (touch screens, advanced multimedia, double sim cards etc).
I'm wondering if there's any way to develop custom solutions for this handsets as independent developer? How to obtain a toolkit and documentation?
I've found some resources, but mainly inconsistent tech notes, often in chinese only. For now I know, that majority of chinese handsets are based on chips from MediaTek (MTK), with operating system based on Nucleus RTOS and MMI (plutoMMI?) framework. Unfortunately, there is no Java RE avaiable (ok, there are some handsets with Java, however, Java isn't something I'm looking for)
Is there any SDK, documentation, emulators/simulators, how-tos, etc avaiable? How to develop, deploy and test custom application for MTK mobile?
I am enginner at design company. I have MTK development platform for MT series mobiles with English explanation. The original release and manuals are written in English(About 300mb pdf files). The SDK have simulator written in Visual C++. MMI interface working under nucleus rtos os. The codes are V++.
The MTK service is charged. You need to contact them and pay for the chip, software SDK, document, and technical support.
I don't know where you get the "some resource", but it must be leaked by some customer of their, thus using these resource will be considered as illegal.
I work with a lot of Chinese mobile phone manufacturers because we export mobile phones from China. I'm really interested in building a new applications, especially an email program, for these MTK based devices. Now it's a bit late to be looking at the 6225 platform because the 6235 platform seems to be where we'll see the most growth moving forward. The major differences that I'm aware of between the 6235 and 6225 are that 6235 supports Wi-Fi, works with EDGE, and is faster.
Steve, you mentioned the G2. I think that Android will be the breakout OS for Chinese phone manufacturing. Once their local engineers and designers get a handle on it a plethora of both ridiculous and useful applications and models will flourish and there won't be major export (customs) problems as we see now with the Windows Mobile devices (because the Chinese typically don't offer licensed software).
For platform sources this can be a starting point :
https://www.mentor.com/embedded-software/downloads/nucleus-source-interest_reg
I have no real experience on RTOS, I am GNU/Linux guy
I just bought a SciPhone G2 Dream and have done some initial investigation. This particular phone runs J2ME applications but I am also wondering what can be done (if anything) with native applications. Ideally I would like to get my Bluetooth GPS to work with this phone.
This page discusses getting GCC to work with Nucleus but I'm not sure whether this is useful.
Mentor (the makers of Nucleus) have a trial version of their developer suite available. I have just requested a free trial. It is a bit concerning that the website makes no mention of the cost. They also have an emulator.
What sort of phone did you get and what sort of applications are you planning to develop?
I'm in same wagon like you, trying to select an smartphone with WIFI and available SDK, low cost (lower thatn 40$). Also contacted Mediatek without results. I can give you a piece of advice, in reality is what I'm doing now. Try to negotiate a bulk purchase with a supplier together with access to SDK and documentation. I did that before with an ARM based Thinclient and worked, but I had to buy 30 pcs.
I'm not exactly sure of what you mean by a 'Chinese' phone. However, you may be talking about ODM phones. Most of the time, these phones are system clones of regular phones with some customisation. It may be a good idea to just buy one and take it apart to see what platform it runs on. Maybe it uses OMAP or something else? In which case, you probably have more knowledge on how to proceed. Maybe it is even compatible with Linux.