The most frequently googled questions about Android programming are: Why is Android development hard? and Why is Android development so complicated? All in all, developing an Android app doesn't have to be more complicated than any other app. There are a lot of things that you have to keep in mind, but with the tips presented in the article, you can make the process effortless.
Regardless of whether you are going to run your own startup or develop an app for a client, the business analysis of the idea will be the crucial stage. What is the value proposition? What are the key functionalities? Who are your customers and how are you going to reach them? What are your revenue channels? Even the best-looking app, an app developers spent much time working on, an app that someone has invested money in, will not be a success if it doesn’t solve a real problem or just brings users some fun. You can use the business model canvas as a reference or run a scoping session to check the real scope of your project and create initial estimations.
Above, we spoke about the business and creative side of the preparing for the development process. There is another side, which is also important and needs to be taken into consideration, even though it’s a little bit technical. Native Android applications are mostly written in Java. You should also get to know RxJava, which lets you build asynchronous and event-based programmes by using observable sequences. In May this year, Google’s Android team announced that Kotlin is the officially supported language, so now you can choose between Java Android and Kotlin Android.
Select supported system versions
Selecting the system versions you want to support is one of the most important decisions you need to make, as it affects how you will develop your project, and it will be extremely difficult to change later on. Unfortunately, the Android market is very fragmented, and it's practically impossible to give people all the latest features and maintain a broad device support at the same time.
More platforms mean slightly extended development time, because some features might need to be coded specifically for each of the chosen versions. It is the developer's responsibility to know and explain the differences between versions.
The crucial part now is to decide where your data will come from. Android devices, despite their continuous evolution, are still just mobile devices and users expect them to be responsive. It is a good practice to avoid processing complicated logic by the Android system and use the backend instead. The data will be processed by the backend application, and your mobile app will get ready data through API calls.
To speed up the development process, it would also be wise to select external services with mobile in mind. Some solutions offer easy-to-use libraries, which can quickly integrate many features.
Once you select the services, it will take a significant amount of time to set them all up properly. In most cases, developers will spend a lot of time on preparing separate sets of authentication keys (needed to integrate external services / APIs) for staging and production environments, creating multiple configuration files, and registering test users and devices
You have now analysed your idea, you know which platform you want to support and what services and APIs to use. The time has come to think about how you’re going to manage your project. Project management is just as important as the development process itself. People sometimes seem to forget about it, but if you break your project down into smaller and more manageable tasks, it will be easier to manage work, track what has been done and what still needs to be done, and handle unexpected problems. Your project should be managed by a project manager, who will be responsible for creating a development plan and delegating tasks. All tasks should be stored in one place so that you can continuously track your team’s progress. The best tool for project management is JIRA.
Android developers prefer a clear division between "view" and "logic" tasks. Make sure your PM is aware of that. This division has a number of consequences:
Nowadays, designing a beautiful app is just as important as keeping your app responsive and free from bugs. From the range of apps that solve the same problem and offer the same functionalities, the user is more likely to choose the one whose interface is the most intuitive and looks best. Regardless of whether you are going to develop a professional business app or a game – you need to make the design one of your top priorities.
Of course, the two cases mentioned above – a business app and a game – will differ in what defines a good design. A game will have some “fun” graphics, whereas a professional business app will need to look clean and smart. “Fun” designs for a business app will not be received as professional. An attractive UI is so important that you should cooperate with a professional designer if you are not experienced enough to create a UI that will delight your users.
Another important thing to keep in mind when creating an Android design is… “Not Android enough”. When the app is planned to be run on both iOS and Android, the designs are created for one of the platforms – in most cases for iOS. It doesn't mean that we, Android devs, don't fancy a particular design or whatever. We say, based on our experience, what UI elements can prove to be problematic. The system supports some solutions and doesn't support other. User habits are also very important here – some UI elements works in different ways on iOS and Android. Let your users use your app intuitively. If your design follows the Material Design guidelines, your project will be developed faster and look really nice on top of that.
Some UI widgets – even when they follow the Material guidelines – can add to the development time. We advise that you speak about them in advance with your PM – you will be able to work on a temporary solution to save some time and return to the initial idea whenever you get some spare resources. A case in point here would be replacing a scrollable calendar view with a date picker.
Okay, so we have reached another significant part of the Android app development process. You have already analysed your business idea, you’ve selected the right technology, you’ve decided which services and APIs you will be using, you’ve planned the project in terms of Project Management, and you even have the designs ready. What's next? Even if you aren’t a technical geek, there are some things that you should take into consideration at this stage. The things you should think about are a version control system, tools such as Continuous Integration and Delivery Platform, and a system for logging and crash reporting.
Version control is the first thing mentioned in this section for a reason. The code that you (or the developer you co-operate with) produce should be versioned under Git and later pushed to a remote version control repository such as Github or BitBucket. Firstly, it will be easier to keep track on changes that you make in code, and when something goes wrong, you can always restore the last working version. Secondly, a version control platform makes life easier when more than one developer works on the project, and we do recommend at least two developers working on a project. Why? One of the reasons is the decision-making process. There are cases when programming is something more than science: one problem can have more than one solution. In such circumstances, a brainstorming session with another developer who knows the project can be really helpful. Another reason is code review. Someone who also works on the project and has a deeper understanding of it can make a review of the commits that are part of Pull Request and also see whether they suit the whole project. Co-operating developers will need access to the code so as to make changes and review other developers’ changes. There is no other way to achieve this than a version control system.
Version control can work miracles for your project. To increase the chances of your app’s success, you can also use various tools and platforms and make the development a lot easier. The services that we use in Netguru are:
Setting up the tools and getting familiar with them will require some additional time, but it will pay off in the future, making the development and maintenance of the project a breeze.
Testing is really important, irrespective of the kind of app you develop. Why? There are multiple reasons, but one of the most important of them is to avoid launching a buggy app. A buggy app can scare your users away. Even when you have a great idea for an app, your product needs to solve a real problem of the user. If you give your users a bad experience and make solving the problem a torture with all the bugs, you will discourage them from using the app. You can fix these issues later, but the users will probably never go back to your product. The other important reason is to avoid regression. When you develop new features, you should always make sure that changes you make won’t break the existing code. Don’t forget about tests when you develop an Android app. Read our mini guide on the successful testing of Android apps to make sure you understand the process well.
Make sure that developers working on your app also write automated tests. Automated tests are written to ensure that the crucial elements of the application work as intended – they test the logic of the app. The process in Netguru looks as follows. First, developers write automated tests that cover the most important parts of the application. Then, test suites are run on Bitrise and reports are uploaded to CodeCov. A short report is also attached to every Pull Request on Github.
Other aspects that need to be tested are the app’s appearance, design, and UX. In Netguru, we have qualified QA specialists who are also part of the mobile development team. They not only verify whether the application’s design corresponds to the initial designs, but they also try to act like a typical user and tweak the app to suit their needs better.
Tests must be performed on all supported system versions. Some features will either not be available or act completely different on some platforms. Also, because no one has any control over what Android devices emerge on the market and their screen sizes, we use "density-dependent" units to position our layouts. It means that we tell devices how to display certain things only in approximation. Most of the time, it works out really well but to guarantee that the app will be properly – which doesn't always mean perfectly – displayed on all devices, a QA needs to test it on Android devices with all possible screen sizes.
Android development is quite demanding. Developing apps for Android differs from developing apps for other platforms, because the Android market is very fragmented, and what happens after the release of a Play Store app is as important as the whole development process. It’s very important for your app to have a clean, well-written and well-documented code which will be easy to maintain. High-quality code will make it easier to introduce corrections and react to user feedback after you have launched the app. That’s why it’s better to hire an agency to do it as it has both a predictable development process, a solid knowledge base, years of experience, and fully scalable teams of developers who will already know the code of your app and understand your business idea.