I am currently doing the preliminary design for a new product my company will be pushing out soon. We will start on Android, but then we will need to quickly develop the IPhone, IPad.... and then the Windows 8 ports of the application.
Basically the only code that wouldn't be reusable is the view specific code and the multimedia functions. This will be an SIP client (of course the user of the app will not know this) with several bells and whistles for our own business specific purposes.
My initial thought is to develop all of the engine in C and provide a nice API for the C library since JAVA and .NET will allow native invoking, and I should just be able to directly link to the C lib in objective-C.
Is there a better approach for vast code reuse which also remains close to the native platform? I.e. I don't want dependencies such as Mono-droid and the like or complicated interpreter/translator schemes.
I don't mind re-coding the view(s) for each platform, but I do not want to have multiple versions of the main engine. Also, if I want to have some good abstraction mechanisms (like I would in say, C++) is this possible? I have read that C++ is not allowed for the IPad and Iphone devices.
I would love to handle the media decoding in the C library, but I assume that this will be platform dependent so that probably will not be an option either. Any ideas here?
I don't want dependencies such as Mono-droid
-- That's too bad. It's probably the most promising approach for your objectives.I love OSS, but when my ass is on the line, I want complete control over the vital business functionality.
Suit yourself but most of us aren't writing systems of such high importance that this absurd amount of low level control is necessary. C as a language is rarely necessary and difficult for just anybody off the street to maintain. Smarter business decisions are ones where architectural decisions are made that take advantage of well solved issues to save development time and reduce complexity while maintaining low coupling. It sounds as if you want best of both worlds.