So started recently experimenting with the Android SDK and eclipse IDE and during this time I have found it very hard for various reasons to develop applications the main ones being
Poor emulator makes it hard to see your applications current state as its slow and buggy and often takes an age to load up.
Steep learning curve for xml based views and lack of consistency in application architecture.
Lack of support for dynamic web based applications
I have no experience of iPhone development but how does this compare and does this relate to the better quality of apps on the iPhone
I have no experience of iPhone development but how does this compare and does this relate to the better quality of apps on the iPhone
Just in terms of quality of apps in the store, Android has no approval process, and Android has a cheaper sign up fee, so anyone, literally, can make anything and put it up on the Market. Also, the ever changing OS features and variety of phones also makes it more difficult for an otherwise good app to be "good" on all phones.
Good developers can make amazing apps equal to or better than what is on the iPhone, but both use a completely different language from one another, so the dev part of the question is somewhat relative to your dev. experience.
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 4 years ago.
Improve this question
I started to learn android development in Java and followed that path up to now.
Nowadays there are many cross platforms development languages such as Xamarin, React Native and etc.
I know that I can develop for both iOS and Android in cross platform languages which is usually requested by customers to develop mobile app in these two platforms.
Now my question is what is the benefit for developing in native android and iOS platforms over using cross platform languages?
I think if I have not enough reason to stuck to native development, I could not satisfy my customer to develop their app in native languages and I need to migrate to cross-platform languages.
So I want to know are there any bold benefits for native development or not?
This is one of those endless debates in development. There are so many reasons to go either way.
Native Benefits:
Best possible user experience
Access to all the features of the os and hardware
Smaller and faster applications (especially UI responsiveness)
Often easier to maintain (no need to deal with platform bugs)
Quicker response to o.s. changes
Cross-platform Benefits
Faster development to access the larger user base
Easier development - no need to learn as much about each native system
Powerful integration options (Cloud, Security, Game Engines, etc.)
For involved UI, I suggest that building your UI to target the native platform and everything else to be cross-platform. It is important to understand how important the user experience is to the success of the app you are making. Something simple like accessing some data from the web and showing a chart will look fine in a cross-platform app. Doing advanced image manipulation will likely require native UI to feel right.
The bottom line is "it depends on the project"
It depends on your project requirement to develop native app or hybrid app.
Choose native development if
High performance
You want a fluid, high responsive user interface
The user interface should feel familiar to users on each platform
Your application needs full access to all device hardware and functionality.
Choose cross-platform development if
You want to develop a quick prototype to test and validate a simple concept
Your application has a simple user interface and has limited user interaction, such as listing and showing news content
Your user interface has limited scrolling and swiping and users will not be affected by a sluggish screen response
Your application does not process complex data or work with audio or video
Cross-platform development is not a silver bullet.
Taking decisions about changing from native development to hip frameworks and cross-platform tools, you need to understand specifics of implementing same features in terms of this cross-platform tools. And this can be a problem in itself, because you will need experience with cross-platforming.
Cross-platform tools are cool as in "it will be a single codebase", but in some cases they are not. Different OS means different UI / UX, services and underlining implementations, as they form according APIs. It is baffling to see a React Native project with different set of modules written for specifics of Android and iOS, just to understand that this exact project should have been written as separate native applications all along.
So, before developing, take a quick dive into specific cross-platform tooling you think will be the best and you will understand implications of using this tooling for your project.
So just use Kotlin. Kotlin is interoperable with Java and working with JVM, but also has native compiler for iOS. Of course development for both platforms makes some limits, but if you want to create cross platform application it may be useful for you.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 4 years ago.
Improve this question
Updated(for clarity and to reduce ambiguity):
I'm going to start tinkering around with android apps. I was planning on writing the in C++ using the NDK (since I have more experience in C++ and prefer it to Java) but came across the following on the Android NDK page:
you should only use the NDK if it is essential to your
app—never because you simply prefer to program in C/C++.
I was under the impression that you should use the language that you prefer, as long as it fits the job. Could somebody explain why it is so heavily advised not to use C/C++ for android development?
Original:
I'm going to start tinkering around with mobile apps, specifically android which is the OS of my current phone, and I was wondering if writing the app in C++ (or at least the core, then wrapping in Java) was an acceptable option.
Some background, I'm a computer science major who has taken 3 C++ courses(intro, intermediate, OOP, and am taking an STL course in the spring) and only 1 Java course(intermediate). Because of this, I am more comfortable with C++ and prefer it to Java. I came across the following on the Android NDK page:
Using native code on Android generally does not result in a noticeable
performance improvement, but it always increases your app complexity.
In general, you should only use the NDK if it is essential to your
app—never because you simply prefer to program in C/C++.
I was under the impression that you should use the language the fits
the job as well as one you're familiar with
I may want to port the application to another mobile platform, such
as iOS, that supports C++ but not java
While Java is a high level language and thus should make development
faster, I feel like development would be slower because I would have
to relearn almost everything (since I have only taken one class on
the language)
Any advice would be much appreciate.
ps: many of the answers on this subject are from years ago and there are very few follow up answers that mention the NDK allowing the development of full native apps on android 2.3 and newer.
Think of it this way. You have the ability using the Java SDK to build a full working application that takes advantage of 100% of the APIs available to developers. There is nothing you can do with the NDK that cannot be done with the SDK (from an API perspective), the NDK just provides higher performance.
Now look at it in reverse. If you choose to write an application 100% in the NDK, you can still write a fully functional application, but you are limited in the number of framework APIs you can access. Not all of the Android framework can be accessed at the native layer; most APIs are Java only. That's not to say that all the APIs YOU may need aren't available in the NDK, but nowhere near ALL the APIs are exposed.
Beyond this, the NDK introduces platform-specific code which expands the size of your distribution. For every device architecture you intend to support, your native code must be built into .so files (one for armv5, armv7 and x86) all packaged up into the same APK. This duplication of executable code makes your app 3x the size (i.e. a "fat binary") unless you take on the task of building separate APKs for each architecture when you distribute the application. So the deployment process becomes a bit more work if you don't want your APK to grow in size significantly.
Again, while none of this is prohibits you from doing what you choose, it points out why Google describes Java as the "preferred" method for the majority of your code and the path of least resistance. I hope it sheds some light on why the documentation is worded the way it is.
If you're only going to develop one app in your life, use the NDK.
If you're aiming at learning Android development with the intention of developing more than one application during your lifetime - and want to be able to properly support them all - you're very likely to do better in the long run if you learn Java and use Android's Java SDK instead.
The programmers at King use C++ for their game logic. And they seem to be doing fine judging by their turnover.
In my experience, C++ is for problem solvers and Java is for problem avoiders. I love either language, but C++ is quite rewarding when you write good code. However, it may just take several moments of wizardry to get there.
You could recommend C++ for Data scientists as well, who would normally get their job done by, say, Python or R. C++ can do the same with as good or not better performance, but it just takes being a genius in the language. That is why I'd never not recommend C++ to the one that wants to do it - I'd just give a heads up to the treat that they're in for.
I found this interesting article from:
http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C++ was built specifically for platform independence and as such is found on every single operating system in existence. Your typical mobile user may know that Android apps are written Java and iOS apps in Objective-C, but what many don’t know is that there is more C/C++ code in memory on your devices than anything else. C/C++ drives much of the technology of small devices (like the kernel, which interacts with the hardware, as well as typical run time libraries) and the telecommunications networks that enable these devices. More importantly for a development team, is that there are C/C++ interfaces and libraries for anything you need to do on any device and platform. The Android NDK toolset is a great example of full C/C++ support that was added originally for game development teams to enable them to get the best possible performance out of the device by avoiding Java and the Android Java runtime Dalvik, the virtual machine on which Android Java code is executed on. It has been regularly improved to enable every Android service.
I would say use java for main app. But if you have some c++ code you need to port or some library you need that is efficiently implemented in c++, then use ndk for those bits
I don't see any reason to not use C++ for normal android development , If you have extensive experience in working in C++ and with complex OS like windows or any other such, then you can grasp android quickly and is not as much complicated as the other OS are. while learning java or working without learning it would be more frustrating and complex !
The most important consideration is that the compiled Java code will run on all android devices unchanged, whereas the native code will need to be compiled for all target platforms.
The general intent for both Java and Android is that you write the majority if not all your app in Java and use native things only when there is no other option... so everything about writing the app will lend itself to doing so in Java.
You'll spare yourself a lot of aggravation in bridging between the native and Java worlds by writing in Java.
As well, you will do yourself a big favor if you take the plunge and learn Java. Not only will your Android app be the better for it, but you will expose yourself to a significantly different approach to OO and you will be a better programmer for it.
Add to that the fact that you will side-step a whole bunch of security risks by writing in Java.
In my mind, this is a no-brainer - use Java.
I want to get into some mobile development. I studied a tiny bit of J2ME way back in the day and it wasn't too bad. But now with newer technologies like Android and so forth I ask myself if it is worth my while to (re)learn and invest in J2ME as there is this perception that it is 'old' and 'clunky', yet it's what still runs on most mobile phones. What do you all think? Thanks in advance.
I don't know, but this Google Trends comparison suggests that Android is far more significant:
http://www.google.com/trends?q=java+mobile,+android&ctab=0&geo=all&date=ytd&sort=0
You might also be interested in this:
J2ME VS Android VS iPhone VS Symbian VS Windows CE
Not an exact duplicate, but close...
It's not difficult if you already know Java so why not? Everyone focuses on consumer stuff like smart phones, but it's used in a lot of embedded systems, so it might pop up in a project.
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 8 years ago.
Improve this question
I want to start making cellphone apps with Android as first choice but not the only one. I have 10 years of experience with Java, C#, C++ in commercial applications and I know that many things and practices for this applications are not valid for cellphones. Where do I start reading? How do I adapt my way of thinking to this new environment as quickly as posible? I plan to make some money with it sometime in the future as an extra income or a career change maybe, who know. Any resource or advice you could recommend will be very welcome. Thanks in advance.
Just start with Android Developer site http://developer.android.com/index.html.
It contains all you need for the beginning. Also take a look onto Commonsware android books,
those are really great both for beginners and experienced programmers - http://commonsware.com/books.html.
You could start with two great books listed as reference [1] (Ableson F. et al., Unlocking Android, 2009. Manning Publications Co., ISBN 978-1-933988-67-2) and [4] (Conder S. and Darcey L., Android Wireless Application Development, 2009. Addison-Wesley, ISBN 978-0-321-62709-4) in my degree thesis. Both have an extensive walk-through of Android, which you as a developer should know. You'll get all you need from "Hello World" to deploy an actual application in the Android Market.
Android is the place to start, since you already know Java and C# and C++. You can even use native classes in Java written in C or C++ if you have some useful standard classes in your library. More on Natives you'll find in the reference book [9] (Silva V., Pro Android Games, 2009. Apress, ISBN 978-1-4302-2647-5).
The best of luck!
Only support the TOP os's which generate income. So at this moment IOS and Android.
Don't go down the path of Symbian and Java... it's dirty, and you won't like what you see down there.
What really got me going was the Hello, Views documentation. Will really get you up and running instantly.
I recently decided studying Android, and http://developer.android.com was a great resource. You should read the Application fundamentals doc first and User Interface documentations later.
There are some tutorials too.
I read the whole Application fundamentals, and that gave me a good idea of "how to program for Android" since it has its own architecture and environment. Get the idea of Activities, Services, Broadcast Receivers and Content Providers and try to adapt yourself to that structure. Then read about how Tasks work, and later go into UI.
As a subjective opinion, being Android so popular and growing, I don't think it's worth the effort to study Java ME or even C (I'd go for iPhone devel in any case with Objective-C). Android will probably give you more money and faster. Java FX might be interesting...
iPhone
Android
Samsung Bada
I would like to mention that iphone and Android communities are very much evolved and have a great developer community and resources. Samsung Bada doesnt have a good developer network nor does the SDK support many operating systems. I think it works only on Windows.
You need to first understand the mobile platform architecture, the different frameworks which the platform exposes to the programmers to develop applications.
There are emulators for you to test, however you have to have one of those devices to do a real time on-device testing.
With respect to programming, i think your experience is more than enough but one needs to come out of the frame of mind and think differently. A typical device has limited processing power, limited memory, limited screen space but the user demands beats expectations compared to desktop/enterprise software.
Lastly most important thing is the IDEA of the application. You may want to survey existing application on the stores and start thinking. You can also develop and application which would solve your problem with mobile devices and you know other users also may want such a application.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this question
Should I use LAMP, .Net, or any other platform? I have access to resources with LAMP, .Net, ROR and Java experience. Thanks.
Sorry for being vague. Could you give me a few pluses and minuses of each like Paul? Thanks for your time and effort.
If you're planning to host the system, then you are best to work in a language that you are comfortable with and can hire people to help you. That means you want something reasonably popular, but also oriented towards the type of functionality you are implementing. Presumably you are writing some form of web application.
Personally, my favorite web app language was Perl, but it took a huge amount of self-discipline to keep from making it a mess. It's probably not great for big teams, and it's hard to hire people with experience.
PHP is great for pounding out web apps, and it has a big following. Unless I haven't been keeping up on it LAMP, .Net, ROR and PHP are all bounded by web 1.0 technologies, which means augmenting them with a JavaScript library like Dojo if you want to use AJAX (which is all the rage these days).
If the software is enterprise, then Java or C# are more sellable, but since you're running it yourself that doesn't matter. Personally I'd stay far away from J2EE, it's just too much complexity for too little functionality.
My latest combo is Java, GWT and hibernate, but I find they are very difficult technologies to master. Good if you have the time for long term development, but not so great if you're in a hurry.
So, if you're in a rush, prototyping in LAMP, with a very simple 1.0 front-end is probably best, then later once you've crystallized the concept, redoing the system in some stronger technology will help you get to the next level of performance.
Paul.
If its a professional project then use whatever you have the best resources for, if you don't know then ask your coworkers what they would be most comfortable with. If things really are equal (and I doubt they are) then use each of the platforms to write a random platform selector, and use that to make your choice.
Conversly if its a personal project and you are looking for something new, then use the thing that you know least about.
Waaaay too subjective/argumentative.
They all have gains and losses and are all adept at SAAS type architectures these days. Use whichever you're most or least comfortable with depending on your goals.
Try to see which platform has purpose built solutions. I know in .NET there is Apprenda's SaaSGrid and in Java, BEA was working on something called Genesis, but I think it was cancelled when Oracle bought them.
My answer is the same as Paul's.
Know who your users are and if they have software requirements, such as Microsoft licenses etc. It's much easier to bind Microsoft applications with .net than any other language.
Know your budget if you have one. PHP will be the cheapest and fastest to build a web app in. All you need is apache, roughly 10 lines of site configuration, and about 50 lines of code for a SAAS app.
Is it a once-off develop and forget? Most applications won't be, so you'll need to develop it in a language that's accessible and well supported. No point developing in Ruby or Perl if you need high availability, accessibility and support.
Keep in mind that you can develop enterprise-level applications in PHP, Java and .NET. One of the reasons why people develop in .NET and Java for enterprise level applications is for the available support, stricter languages, typically better developers etc. It's a myth that PHP is no good for enterprise - each platform is only as strong as its weakest component.
Are you using an Oracle or Microsoft database? While PHP can connect to those systems, they require additional drivers to do so.
First of all, figure out what you're trying to build. Prototype it in a language that you won't develop the final solution in (unless that language is your strongest and most competent language) so that you simply can't continue using the prototype as the final solution. Transfer the business logic, framework scaffolding and library ideas to your chosen language.
I've developed SaaS apps in PHP before, and from my experience there's hundreds of ways to skin the same cat so to speak
Pros:
Cheap development
Rapid development
Low server costs
Low initial maintenance costs
Cons:
Semi-competent developers who are most likely unfamiliar with OOP & SAAS concepts (this is almost always a given)
Expensive maintenance down the track, especially point 1
Performance overhead without effective caching strategies
Every developer who touches the application will want to develop it into their own system
Not a strongly typed language, so type hints are very important as well as constantly validating input for type and correctness (word?)
Hope that helps...
You could use a free web RAD called 4WS.Platform:
www.4wsplatform.org
which is free.
You could deploy it in Google App Engine and use it to create web applications on the cloud, which are a Saas solution...