The world of Android development is changing rapidly: new versions Android 15, updated libraries and the growing demand for mobile applications make this area one of the most promising for programmers. But where to start if you just discovered Android development? Many beginners get lost among dozens of programming languages, development environments and conflicting advice on the Internet.
This article will not just list the tools - it will help you avoid common mistakes, save time on learning outdated technologies and immediately tune in to practical results. We'll sort it out three critical stages of starting: choosing a language (Kotlin vs Java), setting up the development environment and creating the first working application without โhello, world!โ. You will also find out why 80% of beginners quit learning at the learning stage AndroidManifest.xml โand how to avoid it.
Spoiler: you donโt need to be a programming guru to release your first application in Google Play. The right approach and a clear plan are enough - you will find it below.
1. Choosing a programming language: Kotlin or Java?
The first question that every beginner asks himself: what language should he write in? In 2026, the answer is clear - it has become the official and priority language for Android development. It has been recommended since 2019, and today more than 70% of professional projects are written in it. But why? Kotlin has become the official and priority language for Android development. Google has been recommending it since 2019, and today more than 70% of professional projects are written in it. But why?
Kotlin offers:
- ๐น Concise syntax - Kotlin code is on average 40% shorter than the equivalent in Java. Less โtemplateโ code, more logic.
- ๐น Security โ built-in protection against
NullPointerException(the main nightmare of Java developers). - ๐น 100% compatible with Java โyou can use Java libraries in Kotlin projects and vice versa.
- ๐น Support for coroutines โa modern way of working with multithreading that simplifies asynchronous operations.
But what if you already know Java? Don't abandon it - many legacy projects (especially in the banking and public sector) are still supported in Java. However, for new projects Google and the community definitely recommend Kotlin.
โ ๏ธ Attention: If you are learning Android development โfor yourselfโ (hobby, startup), start with Kotlin. If the goal is to get a job at a large company with legacy code, study the job requirements: some still require Java.
For completeness, here's a quick comparison:
| Criteria | Kotlin | Java |
|---|---|---|
| Syntax | Concise, intuitive | Cumbersome, a lot of "template" code |
| Security | Null-safety built into the language | Frequent NullPointerException |
| Compatibility | Full with Java, the reverse is partial | Works with Kotlin, but without its advantages |
| Demand (2026) | 85% of new vacancies | 15% (legacy, support) |
| Learning curve | Faster for beginners | Longer due to complex syntax |
Conclusion: Kotlin โthe optimal choice for starting in 2026. But if you need to work with legacy systems, you will have to master Java.
2. Setting up the development environment: Android Studio and emulators
Without the right tools, even the simplest application turns into torture. The main (and free) Android developer tool is Android Studio. This is not just a code editor, but a full-fledged environment with emulators, a debugger and optimization tools.
What you need to do before starting:
- Download the latest version Android Studio Giraffe (or later) from official website. Avoid โportableโ assemblies from third parties - they often contain outdated versions of the SDK.
- Install Java Development Kit (JDK) 17 - this is the minimum version for modern projects. Older versions (JDK 8) may not support the latest Kotlin features.
- Enable
Hyper-V(for Windows) orKVM(for Linux) to speed up the emulator. Without this, the emulator will slow down even on powerful PCs.
The most common mistake of beginners is trying to save disk space by refusing to download Android SDK emulators. As a result, the first projects are not built due to the lack of necessary libraries. Minimum set to start: SDK Platform for the latest version of Android, Android Emulator and Google Play Services.
Advice on emulators:
- ๐ฑ For testing, choose an emulator with
x86_64architecture - it works faster thanARM. - ๐ Configure Snapshot (save state) to quickly launch the emulator.
- ๐ ๏ธ If the emulator lags, try reducing the screen resolution to
720por disabling animations in the developer options.
โ ๏ธ Attention: On a Mac with an M1/M2 chip emulatorsx86_64do not work - useARMversions or a physical device. This is a limitation of Apple, not Android Studio.
Download and install the latest version of Android Studio|
Install JDK 17 or later|
Download SDK Platform for the latest version of Android|
Set up an emulator with x86_64 architecture (or ARM for Mac M1/M2)|
Enable Hyper-V/KVM to speed up the emulator-->
3. Application One: What to Create Instead of "Hello World?"
"Hello World" is good for testing your development environment, but it doesn't teach anything practical. Instead, create an application that:
- ๐ฑ Solve a real problem (even a small one).
- ๐ Interacts with the user (buttons, input fields).
- ๐ Uses at least one system component (camera, geolocation, notifications).
5 ideas for the first project (sorted by complexity):
- Currency converter โ the user enters the amount in rubles, the application shows the equivalent in dollars/euros. Use a fixed rate or a simple API (for example, ExchangeRate-API).
- Shopping list - adding/removing products, saving to
SharedPreferences. Ideal for learning how to work withRecyclerView. - Password generator - random passwords with setting the length and including special characters. Practice working with strings and
Random. - Habit tracker โthe user notes whether he performed a habit today (for example, โdrink waterโ) Saving data in
Room Database. - Mini-game "Guess the number" โthe computer guesses the number, the user guesses. Use
ViewModelto save the game state when you rotate the screen.
Why these projects are better than "Hello World":
- ๐ฏ They teach you how to work with UI components (
Button,EditText,RecyclerView). - ๐พ They require saving data (albeit simple), which is close to real tasks.
- ๐ You can gradually complicate it: add animations, a dark theme, multi-threading.
Example code for a currency converter (main logic):
// In the file MainActivity.ktfun convertCurrency(amount: Double, rate: Double): Double {
return amount * rate
}
// Call when the button is pressed
binding.convertButton.setOnClickListener {
val amount = binding.amountEditText.text.toString().toDouble()
val result = convertCurrency(amount, 0.011) // Rate 1 RUB = 0.011 USD
binding.resultTextView.text = "$.{%.2f}".format(result)
}
Do not copy project code from GitHub โas isโ - better understand how it works and rewrite it in your own words. This will help avoid problems during modification.
4. Application architecture: why MVVM is better than โeverything in MainActivityโ
90% of beginners write all the code in MainActivity.kt โand after a month they themselves cannot figure out their project. This is called "Spaghetti code", and it leads to:
- โ Inability to scale the application.
- โ Difficulties in testing.
- โ Frequent crashes when changing the configuration (for example, rotating the screen).
The solution is to use an architectural pattern. In 2026, the de facto standard for Android is MVVM (Model-View-ViewModel). Its advantages:
- ๐น Separation of responsibility: UI (View) does not know about the business logic (Model), and ViewModel links them.
- ๐น Saving state when rotating the screen (thanks to
ViewModel). - ๐น Ease of testing โeach component can be tested separately.
Comparison of architectures:
| Pattern | Pros | Cons | Suitable for beginners? |
|---|---|---|---|
Everything in Activity |
Quick to write | Does not scale, difficult to maintain | โ No |
| MVC | Easier than MVVM | Activity becomes a controller, grows |
โ ๏ธ Only for small projects |
| MVP | Better than MVC | Lots of boilerplate code, difficult to save state | โ ๏ธ You can try |
| MVVM | Modern, recommended by Google | Moderate to understand for a beginner | โ Yes, with gradual learning |
| Clean Architecture | Maximum flexibility | Too complicated for first projects | โ No |
How to start with MVVM:
- Create a class
ViewModelinherited fromAndroidViewModel. - Move all logic from
ActivitytoViewModel. - Use
LiveDataorStateFlowto exchange data between the ViewModel and the UI. - In
Activity/Fragmentleave only the display-related code.
Example of MVVM project structure:
myapp/
โโโ data/ # Data models, repositories
โโโ di/ # Dependency Injection (later)
โโโ ui/ # Everything related to UI
โ โโโ MainActivity.kt
โ โโโ MainFragment.kt
โโโ viewmodel/ # ViewModel for each screen
โโโ MainViewModel.kt
MVVM seems complicated only at first. After 2-3 projects, you will understand how it saves time on maintaining and adding new features.
5. Working with API and network requests: Retrofit + Coroutines
The vast majority of applications interact with the server: weather, exchange rates, social networks - everything requires network requests. In Android, for this they use the library Retrofit (for requests) + Kotlin Coroutines (for asynchrony).
Why not AsyncTask or RxJava?
- ๐น
AsyncTaskoutdated and removed from the latest versions of Android. - ๐น
RxJavaPowerful, but difficult for beginners (many operators, complex debugging). - ๐น Coroutines + Retrofit โa modern duo recommended by Google.
Steps to add Retrofit to a project:
- Add dependencies to
build.gradle (Module: app):implementation 'com.squareup.retrofit2:retrofit:2.9.0'implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - Create an interface for API:
interface CurrencyApi {@GET("latest")
suspend fun getRates(@Query("base") base: String): Response
} - Configure the Retrofit client:
object RetrofitClient {private const val BASE_URL = "https://api.exchangerate-api.com/v4/"
val api: CurrencyApi by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(CurrencyApi::class.java)
}
} - Execute a request from ViewModel using coroutines:
viewModelScope.launch {try {
val response = RetrofitClient.api.getRates("USD")
if (response.isSuccessful) {
_rates.value = response.body()?.rates
}
} catch (e: Exception) {
_error.value = "Error: ${e.message}"
}
}
Typical errors when working with network:
- ๐ซ They forget to add
<uses-permission android:name="android.permission.INTERNET" />toAndroidManifest.xml. - ๐ซ They make network requests to
MainThread(leads toNetworkOnMainThreadException). - ๐ซ They do not handle errors (for example, the absence Internet).
โ ๏ธ Attention: C Android 9 (API 28) HTTP requests are blocked by default (HTTPS only). If your API does not support HTTPS, addandroid:usesCleartextTraffic="true"toAndroidManifest.xml(but this is not safe for production applications!).
How to test an API without a server?
Use MockWebServer from Square to simulate server-side responses. This will allow you to test application logic without depending on the real API.
- Add. dependency:
testImplementation 'com.squareup.okhttp3:mockwebserver:4.10.0' - Create a test server in unit tests:
val server = MockWebServer()server.enqueue(MockResponse().setBody("{\"rate\": 75.5}"))
server.start() - Configure Retrofit to use the URL of this server.
6. Publishing on Google Play: requirements and pitfalls
When your application is ready, it's time to share it with the world But! publication in Google Play is not just an APK download. Here's what you need to know:
Developer account requirements:
- ๐ฐ Registration fee - $25 (one-time). Payment is accepted by cards or through Google Pay.
- ๐ Developer data โidentity confirmation (passport or company data) will be required.
- ๐ง Email โmust be linked to a Google account that is not subject to restrictions (for example, work/school accounts can block publication).
Technical requirements for the application:
- ๐ฑ Target API level - not lower
targetSdkVersion 33(for Android 13). Applications withtargetSdkVersionbelow 23 (Android 6.0) are not accepted. - ๐ Privacy Policy โrequired even for applications without data collection. Can be generated on privacypolicytemplate.net.
- ๐จ Icon and screenshots - the icon should be
512ร512in PNG format, screenshots - for different resolutions (minimum for1080pand720p). - ๐ Description โminimum 80 characters in the primary language, support for at least one additional language (English recommended).
Publishing process:
- Create signed release APK/AAB in Android Studio (
Build โ Generate Signed Bundle / APK). - Fill in application listing in Google Play Console: title (up to 50 characters), description, category, keywords.
- Indicate target audience and content rating (questions about violence, drugs, etc.).
- Download a binary file (
.aabpreferable than.apk). - Configure price and distribution (free or paid, countries of distribution).
- Submit for review. The verification period is from 1 to 3 days (sometimes longer under high load).
โ ๏ธ Attention: Google Play blocks applications that violate the privacy policy (for example, collecting data without the user's consent) or using prohibited libraries (for example, to bypass advertising). Before publishing, check the application for compliance rules.
What to do if the application is rejected?
- ๐ Carefully read the letter with the reason for rejection - it states what exactly violates the rules.
- ๐ Fix the problem and download a new version. Do not argue with moderators without arguments.
- ๐ค If you do not understand the reason, contact support Google Play via the developer console.
Publish first in closed testing (Open/Closed Testing). This will allow you to test the application on real users before the full release.
7. Training and development: Android developer roadmap
Android development is not only about writing code, but also about constant learning. Technologies change quickly: those who do not keep up with new products risk being left with outdated skills. Here road map for development from scratch to the level of a middle developer:
Stage 1: Basics (1-3 months)
- ๐ Learn Kotlin (syntax, collections, lambdas, coroutines).
- ๐ ๏ธ Master Android Studio and basic components:
Activity,Fragment,RecyclerView. - ๐ฑ Create 3-5 small projects (see section 3).
Stage 2: Advanced topics (3-6 months)
- ๐๏ธ Learn MVVM +
LiveData/StateFlow. - ๐ Master work with Retrofit i Room Database.
- ๐ Understand Jetpack Compose (a modern alternative to XML for UI).
- ๐ฆ Learn to use Dependency Injection (Dagger Hilt or Koin).
Stage 3: Professional level (6-12 months)
- ๐งช Write unit tests (JUnit, Mockito) and UI tests (Espresso).
- ๐ Explore Firebase (authentication, cloud functions, analytics).
- ๐ก๏ธ Understand security: encryption, secure data storage, protection from reverse engineering.
- ๐ Publish at least one application to Google Play.
Recommended resources for learning:
| Resource type | Name | For whom | Cost |
|---|---|---|---|
| Course | Android Basics in Kotlin (Google) | Beginners | Free |
| Book | "Android Programming: The Big Nerd Ranch Guide" | Beginners who love books | ~$40 |
| YouTube | Channel Philipp Lackner | Visuals, practice | Free |
| Practice | Codewars (tasks on Kotlin) | Reinforcement syntax | Free |
| Community | Kotlin Slack | Communication, help | Free |
Learning tip: donโt try to learn everything at once. Focus on practice - it is better to do 10 small projects than to read 10 books on theory.
8. Typical mistakes of beginners and how to avoid them
Even with a good theoretical basis, beginners make the same mistakes. Here are the top 5 problems and how to prevent them:
๐ฅ Error 1: Ignoring AndroidManifest.xml
Many beginners believe that this file is not important and copy it โas isโ from tutorials. In fact, the following are indicated here:
- Permissions (
<uses-permission>). - Application theme and support for different screens.
- SDK versions (
minSdkVersion,targetSdkVersion).
Consequences: the application may not run on some devices or may not request the necessary permissions.
๐ฅ Error 2: Storing data in SharedPreferences for everything
SharedPreferences is convenient for small data (for example, theme settings), but not suitable for:
- Large amounts of data (slows down).
- Complex objects (needs to be serialized in JSON).
- Data to search/filter.
Solution: use Room Database for structured data.
๐ฅ Error 3: Lack of screen rotation processing
When rotated screen Activity is recreated and all unsaved data is lost. This annoys users.
Solution:
- Use
ViewModelto store data. - For temporary data (for example, text in an input field) use
onSaveInstanceState.
๐ฅ Error 4: Forgetting about multithreading
Network requests, working with a database or heavy calculations in MainThread lead to ANR (Application Not Responding) - the application freezes.
Solution:
- Use
viewModelScope.launchfor coroutines. - For database operations -
Roomautomatically executes queries in the background.
๐ฅ Error 5: Copying code without understanding
Many beginners copy code from Stack Overflow or GitHub without understanding how it works. This leads to:
- The inability to modify the code to suit their needs.
- Use of outdated libraries or unsafe practices.
Solution: Always understand what the copied code does. Ask questions: "Why is it used here lifecycleScopeand not viewModelScope?".
โ ๏ธ Attention: If your application uses advertising (for example, AdMob), make sure that you do not violate the rules Google Play