Think of an application as a tool to solve a task
The first requirement of an application is to solve your problem.
If it can’t do that, it is not complete.
But is solving the task all that matters?
The experience should be equally important.
The design team might spend days choosing the shiniest colour palette and picking the right fonts. But, an important aspect is often overlooked when it comes to user interfaces — and that is motion.
By making your application more dynamic, you’re establishing connections between your interface elements. …
The Kotlin compiler is smart. By performing static analysis on your code, the compiler identifies mistakes in your code as you type it.
One of the most notable features of the Kotlin compiler is smart casting. The compiler has the ability to perform a cast based on the type checks done by the developer.
The compiler tracks the
is-checks, null-checks, and explicit casts for immutable values. Using the acquired information, the compiler casts variables when needed.
However, the smart cast mechanism is limited. …
Jetpack Compose is a modern, fully declarative UI toolkit created to address the challenges of the old View system.
Unlike the old View system, Compose provides a declarative API that enables your UI to react to changes, without imperatively mutating the frontend views.
Conversely, the old View system requires you to manually update the nodes (views) from the View hierarchy by calling methods such as
The View system approach increases the likelihood of errors since the actual state of the Views is internalized. That means you have two states for every UI component — the state you are maintaining…
Bob has a million-dollar idea for a mobile application.
However, he doesn’t know Android programming and chooses to hire someone else to do it.
Luckily, an old friend called Alice, has a company that can implement Bob’s idea.
Alice runs through the employee records and finds the perfect match for the job — Charlie, an experienced Android developer eager to try the latest beta libraries on a new project.
In the first part of the series, we have identified that the user is the primary vulnerability exploited by attackers.
Subsequently, in the second part, we have seen the security measures enforced by Android at the OS level and the application level. This enabled us to better understand why the operating system itself is a harder target than the user.
However, so far, we have explored only the problem.
But what is the…
In the first part, we have identified that the user is the primary vulnerability exploited by attackers.
But why is that?
Why do attackers bother coming up with a convincing story when they could simply exploit the vulnerabilities of the Android OS?
In this part, we will explore the Android security model in order to understand WHY is the user the weaker link of the model.
In order to abstract unnecessary details, we…
The context generated by the COVID-19 pandemic determined attackers to retarget their arsenal towards a more susceptible audience.
To an extent, the human immune system is able to adapt and defend people against the threat of biological viruses.
Yet, what is there to defend them against computer viruses?
To identify the recurrent vulnerability that is being exploited by attackers, we will take a short journey through the history of mobile malware.