What is the definitive definition of the term "Native Android Application"?
Background: I've been learning and developing Android apps with Android SDK using Java for more than two years now. I haven't found myself needing to use C/C++ lib for my projects (yet). As I'm applying to jobs and contract roles, I came across the term "Native Android Application" multiple times and I found myself unsure if I'm qualified. I've been searching the web for the exact definition, but the following definitions is confusing to me and I hope someone can clarify the term once and for all:
Definition A: "Native Apps" vs "Web Apps", as in a Native Android App is built using the Android SDK with Java (or now Kotlin) and a Native iOS App for is built using xCode with Objective-C or Swift
Definition B: Another Google search of Native Android App pointed me to the Android NDK, with a description "The Android NDK is a toolset that lets you implement parts of your app in native code.. " This definition is more intuitive to me, got the word native in it.
My confusion comes when I'm looking at job descriptions, when they ask for "experience in native android application development" what do they mean?
There are some frameworks that can help you to develop applications for multiple platforms (iOS .. android.. ) at the same time. Apps created with those are not native.
(Example.: an app that functions only within a webview is not native because is made maybe with html, php.. and would function in multiple platforms).
Native android app must be written 'just' for android: they are created with Java code (or now Kotlin).
With the background you showed you've been developing native apps, so i think you should not worry.
when they ask for "experience in native android application development" what do they mean?
Android Native Apps = Java most of the time, but you can use 3 language to native development, Java, C++ and Kotlin.
Related
I'm bidding for a contract that insists on using the NDK for their iOS app. Basically, they're arguing that they already have an iOS app and they want to use the Android NDK to have an Android app for it.
I'm sorry if this comes off ignorant. I suggested that I could rewrite the entire app in Native Java/Kotlin but they don't see it any other way. Is there a way to use Android NDK to create an android version of an existing iOS app? I've never worked with the NDK.
Android does not support either Objective-C or Swift, the two main development languages for iOS development. If the iOS app is written in either of those then there's nothing for it but to rewrite the app for Android.
As #CommonsWare says in their comment, if the app is written in C++ using OpenGL ES, which is cross-platform, then you might be able to share significant parts of the code between platforms.
You also say "I'm bidding for a contract that insists on using the NDK for their iOS app." That doesn't really make sense. The Android NDK does not support cross-development for iOS. You can't use it to develop iOS apps, full stop.
I'm maintaining a plethora of apps for one of my clients all of which have native projects for each of the three main platforms. The apps are relatively simple in functionality. My client wants to always take advantage of the latest features in each platform for marketing opportunities. They also want to appear to be a native app (responsive, not laggy). I haven't followed cross-platform development very much lately, so that's why I'm reaching out to SO.
My initial idea is to write a C++ library that has all the functionality shared by the three platforms. Then, for each platform, I'll write some network, file access, and UI-code that connects the abstract library code to the concrete platform.
Of course, this is exactly what cross-platform systems aim to do. Would it be a waste of my time to write the above myself when this has already been done by platforms like PhoneGap? My concern is that I would be dependent on a third-party. If I write the code myself, I have full control, and I will always have access to the latest features.
Hope to get some pro's and con's.
Thanks!
Yet a third option (after Facebook's React Native and Microsoft's Xamarin) is Google's new Flutter and as the other answers suggests "then writing the Windows app purely natively". BTW, React Native does have Windows support the lack of which in Flutter could be a plus or a minus depending on how you look at it.
Have you considered using React Native for iOS and Android, then writing the Windows app purely natively?
There are tons of articles out there about pros and cons for React Native.
PhoneGap is just a web, written in HTML, CSS and JavaScript. React Native actually renders native components for iOS/Android.
There is also Xamarin. It supports multiple platforms and uses c#. The new features from the native languages all work great.
Is it Reccommended to use JNI and C++ Code to make a shared library code between IOS and Android ?
I'am asking this because i think it not just saves us plenty of wasted time for implementing same logic in both platforms but also we will have the speed of a C++ core Backing the logic-process of our modules.
Update :
I ask my question in another way :
is it recommended to share a C++ Library for core functions of Android And IOS versions of a similar app ? or it would be better to completely migrate the codes to a multiplatform language ?
Since I remember my needs back then, I know that hybrid apps were not an option, Also JNI is not used for making cross-platform apps but the best use is to drive hardware peripherals via native UNIX scripts for Android or run c++ code on Android. So if we omit PhoneGap, Appcelerator, Ionic etc we will be facing several cross-platform technologies that have attracted many developer attentions so far.
Xamarin:
The framework was founded by the same people who have created Mono, an Ecma standard-compliant, .NET Framework-compatible set of tools. Xamarin offers developers a single C# codebase that can be used to produce native apps for all major mobile operating systems.
Unlike many other frameworks, Xamarin has already been used by over 1.4 million developers from around the world. Thanks to Xamarin for Visual Studio, developers can take advantage of the power of Microsoft Visual Studio and all its advanced features, including code completion, IntelliSense, and debugging of apps on a simulator or a device. Xamarin Test Cloud makes it possible to instantly test apps on 2,000 real devices in the cloud. This is by far the best way how to deal with the heavy fragmentation of the Android ecosystem and released bug-free apps that work without any major issues.
But being honest I didn't enjoy my first time face-to-face meeting with Xamarin. There were so many bugs and also speed and performance problems were bothering.
React Native
React Native is developed by Facebook and used by Instagram, Airbnb, Walmart, Tesla, Baidu, and many other Fortune 500 companies. It is an open-source version of Facebook’s React JavaScript framework. Because React Native uses the same UI building blocks as regular iOS and Android apps, it’s impossible to distinguish a React Native app from an app built using Objective-C or Java. As soon as you update the source code, you can see the changes instantly manifest in an app preview window. Should you ever feel the urge to manually optimize certain parts of your application, React Native lets you combine native code with components written in Objective-C, Java, or Swift.
The ones I mentioned above are not the only options, but since now they are the most used frameworks between programmers. But beware that Flutter is being publicly announced by Google in Google IO and maybe it may be going to create a hit soon.
I am new to mobile development with a requirement to develop applications for Android and IOS. My programming background is in C#.
Which is the best language and framework to start developing mobile applications?
Is it better to use native development or use cross-platform frameworks?
Please suggest frameworks and languages with respect to ease of development, development support etc..
I am no expert in Cross Platform Mobile Development (in fact, I was just searching for a cross platform mobile development languages/frameworks), but you could take a look at Xamarin, especially as you have a C# Background.
You may also want to take a look at Apache Cordova (and Adobe Phonegap), they use HTML+CSS+JavaScript.
I recently found Flutter, the development language is Dart and it's an early stage OSS project (as of 2016 october) and Haxe. They both seem like active projects, so worth following the progress on GitHub.
If I had to choose and I already had skills in C#, I'd go with Xamarin.
I strongly recommend you give a try to Flutter... It just came out from Google... It's in Beta, but Google heavily used it until now in production mobile applications. It uses Dart, as a programming language and it's awesome. If you have a background in C# (or similar languages, like Java for example) you won't have any problems - it's quick to learn and there are a bunch of tutorials already.
Do a search on YouTube for Flutter, and also on medium...
Here's the website link: http://flutter.io
You can also download some sample applications with all the Android / iOs widgets you can use in a Flutter application. Here's the app for Android: https://play.google.com/store/apps/details?id=io.flutter.gallery&hl=en
The key difference between Flutter and React native for example is that there's no Javascript bridge... and it compiles to native code. You also write the code once, and it will work by default both on Android and iOs... Hack, you can even switch to iOs widgets on an Android phone.
It's AWESOME!!!
I am very good with AppInventor to build Android apps. I have good knowledge of C++ and little knowledge of Java and GUI building in Java. Suggest me how should I shift from App Inventor to Eclipse to build Android apps? Which path should I follow? Is building in Eclipse similar to building in AppInventor like defining different components and then handling their events? Or is it much more than that? Please guide me.
There is also the AppInventor to Java Bridge project at java.appinventor.org, details see below
About:
The AppInventor to Java Bridge project is an addition to
AppInventor that creates a Java written version of the application
from an existing application created through AppInventor. After
creating an application through AppInventor,the user can download a
version of the application that is written in Java, which uses the
JavaBridge* library .
What Our Application Can Do:
Create an Android project in JavaBridge using AppInventor
Applications that use texting, internet and/or sound are supported
Limitations:
- Location aware applications not yet supported
- Nested lists are not yet supported, and will produce incorrect code
UPDATE: the newest version of that tool can be found here: java.appinventor.org
Definitely you should check out the "ALTERNATE Java Bridge". The regular one, built originally by the app inventor team has long since been abandoned. Another programmer picked up the torch and has steadily been using, and improving the bridge for some time. I have been using it myself for 2 years and it is fantastic.
The google project is at: https://code.google.com/p/alternate-java-bridge-library/
and the google discussion group is at : http://groups.google.com/group/alternate-java-bridge-library-discussion
I would just go to the google project site above and ready the tutorial. It is very easy to get started, and he is really good about answering questions for newbies (and i can assist with that as well).
You could take a look at the App Inventor Java Bridge. Check out the link for lots of information, also see here...
The Google App Inventor Java Bridge The App Inventor Java Bridge helps
make a transition from developing Android applications with App
Inventor for Android, to developing with Java and the Android SDK. It
lets you incorporate App Inventor components into apps that you create
in Java with the standard Android SDK tools. If you’ve been using App
Inventor and know some Java, then the Java Bridge is a good way to get
started with the SDK, because building with App Inventor components
hides many of the complexities of the Android framework. As you gain
experience, you can switch over to regular SDK development and create
apps that harness the full power of Android.
Here another link:
http://code.google.com/p/apptomarket/ and you also find videos about the Java Bridge on Youtube, for example this one