Making my first App

Making my first App

I have a long list of things I want to understand and make. Some of the entries on this list are apps. Back during the winter break I thought I would finally get the ball rolling and learn to make a simple android application.

Of the apps I actually want to build, the simplest idea is a tracker for your level at a skill.

I am a big fan of the levelling up system in games like Skyrim. As you use fire magic, your level in fire magic increases. I often wished I could see what my own level and stats were in real life. For example, I think it would have been really motivating to get real time feedback on how that boring maths homework was increasing my level in arithmetic, or how that kick on a punching bag increased my martial arts level.

Of course, life is not that simple. We forget the things we learn and some kicks will be better than others seemingly at random. Despite this, there are ways to gamify life and there is a whole genre of apps attempting to do exactly this. None have quite the barebones approach I want for this project though.

In my app, you start by creating a skill, such as planking. Then you define what an experience point represents for that skill and how much is required to level up.

For example, I am using it to do more push-ups. I defined an EXP point to be one extra push-up added to my consecutive max and that to move up a level I require 10 EXP. This means if I can do a maximum of 42 consecutive push-ups then I have a skill called push-ups which is level 4 with 2 points of EXP towards the next level.

I decided to log the journey of making my first app in a kind of devlog. I hope you find it interesting.


Day 1:

After an evening of work the app looked like this:

The add new skill button did not work at this point but I did manage to get the level and experience amount to be persistent (it stays the same if you stop running the app - although I would later have to redo this). I made it this far by scrapping things together from various YouTube tutorials but realised I could only get so far with this approach. I decided to do a longer introductory course in Java the next day.


Day 2:

I watched the first half of an introduction to android development. I had never really had to delve into object-oriented programming so it was interesting to learn about it. I was proud to finally know what is meant by a polymorphism in Java (basically 3 different scenarios where dependent on context the same code will do different things).


Day 3:

I learnt more about how to use XML and added a progress bar. I then learnt about lists and realised that with a bit of googling I could probably make a functional first prototype now. By night the app was looking like this:


Day 4:

More fiddling around and I managed to get the skills class to save so that your progress was not reset every time you closed the app (the rework of what I did on day 1). I eventually figured out how to get the buttons to open a new activity (in android development an activity is similar to a new screen).

I had a revelation thanks to a stack exchange answer and realised I could make the skill list a singleton class and so access it from any activity. I then added edit buttons. At this point they passed to a new activity that simply had the name of the skill selected.


Day 5:

The first prototype was now complete. I made an add button that worked. Although the app did not have a finished look, in terms of basic functionality, it was pretty much there.

I decided to playtest it and see what I wanted to change.


I used the app for most of January. There are a few quality of life improvements I would like to make but to move from a prototype to a truly complete first app I would need to give the app a fresh coat of paint.

I want to give the app a similar ascetic to the screen the main character in the series Solo Levelling (a Korean webcomic) uses.

Due to the honestly surprising success I had using this app I made another one for tracking more complicated daily goals soon after. However, I decided that for any further app development I would use Flutter.

Flutter has the advantage of building for Android and IOS simultaneously. It also has a different approach to app design (widgets for everything). I’m hoping I will gel with that system of user interface creation more readily than I did with XML.

The code I wrote to make the app is on my GitHub. I'm not sure when I will finish the app but watch this space! :)