Compare commits

...

6 commits

Author SHA1 Message Date
Ahmed Essameldin 49512d9645
Merge d135387b0e into 38855d4e64 2024-02-21 10:29:48 -07:00
skydoves 38855d4e64
Merge branch 'main' of https://github.com/skydoves/android-developer-roadmap 2024-02-22 00:33:49 +09:00
skydoves 960f7e876b
Use ZoomableAsyncImage for zoomable subsampling 2024-02-22 00:33:42 +09:00
Ahmed Essameldin d135387b0e
Move list below the roadmap image 2023-01-30 05:17:11 +02:00
Ahmed Essameldin 025b3997b2
Remove checkboxes 2023-01-30 05:01:41 +02:00
Ahmed Essameldin 2839349117
Add roadmap bullet check-list 2023-01-30 04:51:28 +02:00
4 changed files with 267 additions and 29 deletions

258
README.md
View file

@ -24,6 +24,262 @@ In addition, **you don't need to learn everything from this roadmap**. So we rec
<img alt="Roadmap" src="images/android_developer_roadmap.png"> <img alt="Roadmap" src="images/android_developer_roadmap.png">
</picture> </picture>
## Content list
- - [ ] **Application Fundamentals**
- - [ ] Languages
- - [ ] Kotlin
- - [ ] Java
- - [ ] C++ (JNI)
- - [ ] Android Package
- - [ ] APK
- - [ ] AAB
- - [ ] **Android Operating System**
- - [ ] Multi-User Linux
- - [ ] File Permissions
- - [ ] Resource Isolations
- - [ ] Process Management
- - [ ] **Android Platform Architecture**
- - [ ] The Linux Kernel
- - [ ] Hardware Abstraction Layer
- - [ ] Android Runtime
- - [ ] Native Libraries
- - [ ] Java API Framework
- - [ ] System Apps
- - [ ] **App Manifest**
- - [ ] Package
- - [ ] Application ID
- - [ ] **App Components**
- - [ ] Activity (detailed later)
- - [ ] Service
- - [ ] Broadcast Receiver
- - [ ] Content Provider
- - [ ] Intent
- - [ ] Intent Filters
- - [ ] Explicit Intents
- - [ ] Implicit Intents
- - [ ] **App Architecture**
- - [ ] **App Entry Points**
- - [ ] Activities
- - [ ] Activity Lifecycles
- - [ ] Activity State Changes
- - [ ] Task and Back Stack
- - [ ] Parcelables and Bundles
- - [ ] App Shortcuts
- - [ ] **App Navigation**
- - [ ] Navigation Component
- - [ ] Navigation Graph
- - [ ] Global Actions
- - [ ] Destinations
- - [ ] DeepLink
- - [ ] Fragments
- - [ ] DialogFragment
- - [ ] BottomSheetDialogFragment
- - [ ] Fragment Lifecycles
- - [ ] Fragment State Changes
- - [ ] Fragment Manager
- - [ ] Fragment Transactions
- - [ ] App Links
- - [ ] TabLayout
- - [ ] ViewPager
- - [ ] ViewPager2
- - [ ] Custom Back Navigation
- - [ ] **App Startup**
- - [ ] **Dependency Injection** (detailed later)
- - [ ] **Architecture Components**
- - [ ] UI Layer
- - [ ] ViewBinding
- - [ ] DataBinding
- - [ ] Lifecycle
- - [ ] ViewModel
- - [ ] LiveData
- - [ ] Paging
- - [ ] Data Layer
- - [ ] Data Store
- - [ ] WorkManager
- - [ ] **Design Patterns**
- - [ ] Builder Pattern
- - [ ] Factory Pattern
- - [ ] Dependency Injection
- - [ ] Dagger
- - [ ] Hilt
- - [ ] Koin
- - [ ] Kodein
- - [ ] Repository Pattern
- - [ ] Observer Pattern
- - [ ] Flow
- - [ ] RxJava/RxKotlin
- - [ ] LiveData
- - [ ] **Architecture**
- - [ ] MVVM
- - [ ] MVP
- - [ ] MVI
- - [ ] MVC
- - [ ] Clean Architecture
- - [ ] **Network**
- - [ ] OkHttp
- - [ ] Interceptor
- - [ ] Okio
- - [ ] Retrofit
- - [ ] Ktor
- - [ ] Volley
- - [ ] Apollo-Android
- - [ ] **Image Loading**
- - [ ] Glide
- - [ ] Fresco
- - [ ] Coil
- - [ ] Picasso
- - [ ] **Local Storage**
- - [ ] SQLite
- - [ ] SQLDelight
- - [ ] Room
- - [ ] DataStore
- - [ ] Realm
- - [ ] SharedPreferences
- - [ ] **Asynchronous**
- - [ ] Coroutines
- - [ ] RxJava/RxKotlin
- - [ ] Thread
- - [ ] WorkManager
- - [ ] **User Interface**
- - [ ] Layouts
- - [ ] ConstraintLayout
- - [ ] MotionLayout
- - [ ] LinearLayout
- - [ ] FrameLayout
- - [ ] Material
- - [ ] RecyclerView
- - [ ] Design Guides
- - [ ] Material
- - [ ] Material You
- - [ ] Neumorphism
- - [ ] Styles
- - [ ] Light Theme
- - [ ] Dark Theme
- - [ ] Message
- - [ ] Toast
- - [ ] Snackbar
- - [ ] Notification
- - [ ] Animation
- - [ ] ValueAnimator
- - [ ] ObjectAnimator
- - [ ] Lottie
- - [ ] Material Motion
- - [ ] **Compose UI:**
- - [ ] Recomposition
- - [ ] Snapshot
- - [ ] State:
- - [ ] State Hoisting
- - [ ] MutableState
- - [ ] remember
- - [ ] rememberSaveable
- - [ ] Side-Effects:
- - [ ] LaunchedEffect
- - [ ] DisposableEffect
- - [ ] produceState
- - [ ] derivedStateOf
- - [ ] snapshotFlow
- - [ ] Theming:
- - [ ] Material
- - [ ] Color
- - [ ] Typography
- - [ ] Shape
- - [ ] Custom
- - [ ] Dimens
- - [ ] Factories
- - [ ] Data
- - [ ] Modifier:
- - [ ] Modifier Order
- - [ ] Chaining
- - [ ] Composed Modifier
- - [ ] Layout:
- - [ ] Column
- - [ ] Box
- - [ ] Row
- - [ ] ConstraintLayout
- - [ ] List:
- - [ ] LazyColumn
- - [ ] LazyRow
- - [ ] LazyVerticalGrid
- - [ ] LazyPagingItems
- - [ ] Image:
- - [ ] Icon
- - [ ] Image
- - [ ] coil-compose
- - [ ] Landscapist
- - [ ] Text:
- - [ ] TextField
- - [ ] OutlinedTextField
- - [ ] ClickableText
- - [ ] Graphics:
- - [ ] Surface
- - [ ] Canvas
- - [ ] Gestures:
- - [ ] Scrolling
- - [ ] Dragging
- - [ ] Swiping
- - [ ] Zooming
- - [ ] Animation:
- - [ ] AnimatedVisibility
- - [ ] AnimatedContent
- - [ ] Crossfade
- - [ ] rememberInfiniteTransition
- - [ ] animateContentSize
- - [ ] updateTransition
- - [ ] animate*AsState
- - [ ] AnimationState
- - [ ] animate
- - [ ] Animatable
- - [ ] Animation
- - [ ] CompositionLocal:
- - [ ] CompositionLocalProvider
- - [ ] compositionLocalOf
- - [ ] staticCompositionLocalOf
- - [ ] **Service:**
- - [ ] Google:
- - [ ] Google Play Services
- - [ ] Google Maps
- - [ ] Firebase:
- - [ ] Authentication
- - [ ] Crashlytics
- - [ ] Remote Config
- - [ ] Cloud Messaging
- - [ ] FiresStore
- - [ ] Realtime Database
- - [ ] Advertisements:
- - [ ] Google AdMob
- - [ ] Meta Audience Network
- - [ ] MoPub
- - [ ] **Code Analysis & Testing**:
- - [ ] Linter:
- - [ ] Ktlint
- - [ ] Detekt
- - [ ] Android Lint
- - [ ] Debugging:
- - [ ] Timber
- - [ ] LeakCanary
- - [ ] Stetho
- - [ ] Chucker
- - [ ] Unit Testing:
- - [ ] Unit Test:
- - [ ] JUnit
- - [ ] Kluent
- - [ ] Mockk
- - [ ] Android Test:
- - [ ] Robolectric
- - [ ] Espresso
- - [ ] Kaspresso
- - [ ] Benchmark
- - [ ] **CI/CD**:
- - [ ] GitHub Actions
- - [ ] Jenkins
- - [ ] Travis CI
- - [ ] Circle CI
- - [ ] Bitrise
- - [ ] **QA & App Publishing**:
- - [ ] Firebase App Distribution
- - [ ] Google Play
## ✍️ Articles ## ✍️ Articles
<a href="https://getstream.io/blog/android-developer-roadmap/"><img src="images/article.png" /></a><br> <a href="https://getstream.io/blog/android-developer-roadmap/"><img src="images/article.png" /></a><br>
@ -51,7 +307,7 @@ If you're interested in building a robust chat, video/audio calls, or livestream
## 📱 Demo Application ## 📱 Demo Application
This project includes a demo project which shows the roadmap image. You can download the latest APK on the [Releases](https://github.com/skydoves/android-developer-roadmap/releases). This project includes a demo project which shows the roadmap image. You can download the latest APK on the [Releases](https://github.com/skydoves/android-developer-roadmap/releases).
## 🤝 Contribution ## 🤝 Contribution
This project doesn't cover everything, so if something is missing or should be fixed, anyone can contribute to this project by following the [CONTRIBUTING](CONTRIBUTING.md) guides. This project doesn't cover everything, so if something is missing or should be fixed, anyone can contribute to this project by following the [CONTRIBUTING](CONTRIBUTING.md) guides.

View file

@ -51,5 +51,5 @@ dependencies {
implementation "com.github.skydoves:landscapist-coil:$landscapist_version" implementation "com.github.skydoves:landscapist-coil:$landscapist_version"
implementation "com.github.skydoves:landscapist-placeholder:$landscapist_version" implementation "com.github.skydoves:landscapist-placeholder:$landscapist_version"
implementation "me.saket.telephoto:zoomable:0.6.2" implementation "me.saket.telephoto:zoomable-image-coil:0.8.0"
} }

View file

@ -24,16 +24,9 @@ import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface import androidx.compose.material.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.skydoves.landscapist.ImageOptions
import com.skydoves.landscapist.coil.CoilImage
import com.skydoves.landscapist.components.rememberImageComponent
import com.skydoves.landscapist.placeholder.shimmer.ShimmerPlugin
import io.getstream.androiddeveloperroadmap.ui.theme.AndroidDeveloperRoadmapTheme import io.getstream.androiddeveloperroadmap.ui.theme.AndroidDeveloperRoadmapTheme
import io.getstream.androiddeveloperroadmap.ui.theme.shimmerHighLight import me.saket.telephoto.zoomable.coil.ZoomableAsyncImage
import me.saket.telephoto.zoomable.rememberZoomableState
import me.saket.telephoto.zoomable.zoomable
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -53,20 +46,10 @@ class MainActivity : ComponentActivity() {
@Composable @Composable
private fun AndroidRoadmap() { private fun AndroidRoadmap() {
val background = MaterialTheme.colors.background ZoomableAsyncImage(
CoilImage( modifier = Modifier.fillMaxSize(),
modifier = Modifier model = "https://user-images.githubusercontent.com/24237865/144350753-5a52e6e5-3517-476c-8e5c-adad919abe8e.png",
.fillMaxSize() contentDescription = null
.zoomable(rememberZoomableState()),
imageModel = { "https://user-images.githubusercontent.com/24237865/144350753-5a52e6e5-3517-476c-8e5c-adad919abe8e.png" },
component = rememberImageComponent {
// shows a shimmering effect when loading an image.
+ShimmerPlugin(
baseColor = background,
highlightColor = shimmerHighLight
)
},
imageOptions = ImageOptions(contentScale = ContentScale.Fit)
) )
} }

View file

@ -1,16 +1,15 @@
buildscript { buildscript {
ext { ext {
compose_version = '1.5.2' compose_version = '1.6.1'
compose_compiler_version = '1.5.3' compose_compiler_version = '1.5.9'
compose_activity_version = '1.7.2' compose_activity_version = '1.7.2'
landscapist_version = '2.2.10' landscapist_version = '2.3.1'
zoomable_version = '1.5.1'
} }
} }
plugins { plugins {
id 'com.android.application' version '8.1.2' apply false id 'com.android.application' version '8.1.2' apply false
id 'org.jetbrains.kotlin.android' version '1.9.10' apply false id 'org.jetbrains.kotlin.android' version '1.9.22' apply false
id "com.diffplug.spotless" version "6.7.0" apply false id "com.diffplug.spotless" version "6.7.0" apply false
} }