MICHAEL ODERA
Android Developer
PREVIOUSLY AT

Flexiple spent good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by quality developers.
Overall Flexiple brought in high-level of transparency with quick turnarounds in the hiring process at a significantly lower cost than any alternate options.
Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they connected us with quality talent quickly.
Flexiple Developers are reviewed on their experience and complexity of products built. Those who display depth and have worked on end-to-end projects are given an introductory call.
Over a call, the developer’s ability to communicate in an articulate manner is tested. A deeper understanding of the candidate’s technical experience and also motivation to freelance is achieved.
Over one or more F2F interviews, the developer’s involvement and performance in building complex software products are assessed. This sets the platform to delve deeper into technology-specific discussions.
Developers' mental agility and problem-solving abilities are tested through a coding test involving algorithmic as well as skill-specific problems. A mixture of live evaluation and timed coding tests is used.
The live experience of working with developers is verified by reaching out to past clients and/or employers. Inputs on various qualitative factors such as reliability, punctuality, communication and responsiveness are received.
Performance during each engagement is continually assessed. Our developers are expected to maintain Flexiple standards across all engagements with our customers.
Mobile development is ubiquitous. According to Evans, the number of developers targeting mobile development increased significantly from 2 Million in 2006 to 12 Million in 2016- out of which 5.9 Million were android developers. The study also predicted that the number of mobile developers would top 14 Million in 2020. The mobile traffic has increased from 48% to 52% in the last four years, and it is no surprise the Evans prediction holds true.
Finding the perfect freelance android developer in 2020 could be a serious task, but this guide has everything you need to know about hiring the best freelance android developer.
Before diving into the fundamentals of hiring a freelance android developer, let's delve into some interesting facts about the history of Android.
We have broken the sections into the following parts:
1. Let's introduce Android to you.
2. Why is Android widespread?
3. What are the tools used by Android developers?
4. Writing the Job Description to hire an Android developer
5. Interview Questions for hiring an Android developer
- Basic Questions
- Advanced Questions
- Data Structures/Algo Questions
It feels like we’ve been using android devices for ages now, but it has only been a little over ten years since the android debut.
A lot of features make Android a great choice vs. other operating systems. Two of which are:
These are some of the tools that are commonly used by Android developers:
1. Android Studio
This is the official IDE for Android development. The tool provides a common environment in which developers can build apps for various Android platforms such as phones, tablets, TVs, etc.
2. Android NDK
Using the Android Native Development Kit, Android developers can develop parts of the app using native code, written in C and C++. It also libraries through which native activities and certain physical components can be accessed.
3. Android Debug Bridge or ADB
As the name suggests, this tool is used for debugging Android devices. The tool is a command-line interface tool that lets you communicate with a device and perform various functions like installing, copying files, and running commands through the Unix shell.
4. Genymotion
Genymotion is an Android Emulator that allows Android developers to interact with a virtual Android environment. It allows users to test how the app would work on a wide range of devices.
5. Instabug
This tool enables Android developers to check for bugs, and crashes and also acquire feedback from users so that these bugs can be worked upon. Instabug would have to be added to the live app so that the end-users can reach developers via it.
Below are some key points that we at Flexiple have learned through trial and error - a process of filtering through over 15,000 developers.
If you'd like to see detailed mobile developer job descriptions, check out these templates for Flutter and Android JDs.
Now that you have made a quality JD, it can still be tricky to evaluate the skills of your applicants. To help you with that, we have created a pool of questions that a good Android developer should be comfortable with.
It is important to note that the ability to answer these questions doesn't imply that you have a top quality candidate. But it definitely is a big step in that direction.
To help you navigate through these questions, we’ve categorized the interview questions in 3 parts:
A. Basic concepts: Includes all basic concepts used across languages but we've focused on their significance in Android. This will give you an understanding of how strong their programming foundation is.
B. Advanced concepts: Includes all concepts that someone with higher expertise should know.
C. DS/Algorithm questions: To test the logical capability of the candidate.
class ValidParenthesesFunc { func isValid(_ s: String) -> Bool { var stc = [Character]() for char in s { if char == "(" || char == "[" || char == "{" { stc.append(char) } else if char == ")" { guard stc.count != 0 && stc.removeLast() == "(" else { return false } } else if char == "]" { guard stc.count != 0 && stc.removeLast() == "[" else { return false } } else if char == "}" { guard stc.count != 0 && stc.removeLast() == "{" else { return false } } } return stc.isEmpty } }
The above code will input 0(false).
import java.util.Scanner; public class Palindrome { public static void main (String[] args) { String original, reverse = ""; Scanner in = new Scanner(System.in); int length; System.out.println("Enter a number or a string"); original = in.nextLine(); length = original.length(); for (int i =length -1; i>;=0; i--) { reverse = reverse + original.charAt(i); } System.out.println("The reverse is: " +reverse); if(original.equals(reverse)) System.out.println("The string is a palindrome"); else System.out.println("The stringis not a palindrome"); } }
Output: For String- Enter a number or a string sam The reverse is: mas The string is not a palindrome For Number-Enter a number or a string 99 The reverse is: 99 The number is a palindrome
class Test { public static void main(String args[]) { String str1 = new String("Hello World"); String str2 = new String("Hello World"); String str3 = "Hello World"; String str4 = "Hello World"; int a = 0, b = 0, c = 0; if (str3 == str4) a = 1; else a = 2; if (str1.equals(str3)) b = 1; else b = 2; if (str1 == str4) c = 1; else c = 2; System.out.println("a= " + a + " b= " + b + " c= " + c); } }
D. a=1 b=1 c=2 because a new memory is created when we make an object with the help of the ‘new’ keyword, and the reference variable contains the memory location. Here the memory is created with the same string twice, but since we are comparing objects and not strings, the object will point to a different memory location and so they are not equal.