Mobile Devices
Smartphone: A mobile device with advanced computing capabilities.
Tablet: A portable touchscreen device, typically larger than a smartphone.
Wearables: Devices such as smartwatches that integrate with mobile systems.
Phablet: A device that bridges the size gap between smartphones and tablets.
Mobile Processor: A specialized chip designed for mobile devices to manage operations.
Battery Life: The length of time a mobile device can operate before needing a recharge.
Bluetooth: A wireless technology standard used for exchanging data between devices.
Touchscreen: A display that detects touch input from fingers or a stylus.
Accelerometer: A sensor in mobile devices that detects movement and orientation changes.
Gyroscope: A device sensor that detects rotation and helps manage orientation.
Mobile Operating System: An operating system like Android designed to run on mobile devices.
Wi-Fi: A technology that allows mobile devices to connect to the internet wirelessly.
Mobile Data: Internet connectivity provided via cellular networks.
SIM Card: A small chip that enables mobile devices to connect to cellular networks.
NFC (Near Field Communication): A technology for short-range wireless data exchange.
USB-C: A type of connection port used for charging and data transfer on mobile devices.
LTE (Long-Term Evolution): A standard for high-speed wireless communication for mobile devices.
5G: The fifth-generation mobile network offering faster speeds and greater bandwidth.
Fingerprint Sensor: A security feature that allows users to unlock their device via fingerprint recognition.
Face Recognition: A biometric feature that uses facial recognition to unlock devices.
Android OS
Android OS: A Linux-based mobile operating system developed by Google.
Linux Kernel: The core part of Android OS responsible for resource management and hardware interaction.
AOSP (Android Open Source Project): The open-source version of the Android OS.
Dalvik Virtual Machine: The original Android runtime for executing Android applications.
ART (Android Runtime): The replacement for Dalvik, offering improved performance and memory efficiency.
Permissions: Settings that control what an app is allowed to access, such as contacts or camera.
APK (Android Package Kit): The file format used by Android for distributing and installing applications.
Rooting: Gaining privileged access to Android’s system directories for more control.
Android Recovery Mode: A bootable partition that provides recovery options for the system.
Multitasking: The ability of Android to run multiple apps simultaneously.
Notifications: System messages that alert users to new activities or events.
Widgets: Mini applications that run on the home screen for quick access to information or functions.
Google Play Services: A framework that allows Android apps to use Google’s API features.
Material Design: Google’s design language for Android apps focusing on clarity and accessibility.
OEM (Original Equipment Manufacturer): Companies that manufacture devices running the Android OS.
OTA (Over-the-Air): The method of wirelessly delivering software updates to Android devices.
Android TV: A version of Android designed for use on televisions.
Android Auto: A version of Android designed for automobile infotainment systems.
Android Wear: The version of Android designed for wearable devices such as smartwatches.
Custom ROM: A modified version of Android created by third-party developers for enhanced features.
Overview of Android - Android Application (App) Development
Android App: A software application developed specifically for the Android operating system.
App Bundle: A file format for publishing apps on Google Play, optimizing APKs for devices.
IDE (Integrated Development Environment): A software suite like Android Studio used to build apps.
Java: The original programming language used for Android development.
Kotlin: A modern programming language used as an alternative to Java in Android development.
XML (Extensible Markup Language): A language used for defining UI layout files in Android.
Activity: A single screen with a user interface in an Android app.
Service: A background task in an Android app that runs without user interaction.
Broadcast Receiver: A component that allows apps to respond to broadcast announcements.
Content Provider: A component that manages shared app data across applications.
Intent: A messaging object that can be used to request an action from another app component.
Fragments: Modular sections of an activity that can be reused across multiple activities.
ViewGroup: A container that holds other views and defines their layout properties.
View: The basic building block for the user interface components in Android.
RecyclerView: A more advanced and flexible version of ListView for displaying data in lists.
ConstraintLayout: A flexible layout manager for positioning UI elements.
Gradle: A build automation tool used in Android app development.
Emulator: A software tool that simulates an Android device for app testing.
ADB (Android Debug Bridge): A command-line tool to communicate with Android devices for debugging.
APK Signing: The process of digitally signing the APK before uploading it to Google Play.
Key Aspects of Software Development
Software Development Life Cycle (SDLC): A process for planning, creating, testing, and deploying software.
Agile Development: A methodology focused on iterative development, where requirements evolve through collaboration.
Waterfall Model: A sequential software development process where each phase must be completed before moving to the next.
Debugging: The process of identifying and fixing bugs in software code.
Version Control: A system for managing changes to software code, such as Git.
Continuous Integration (CI): The practice of merging code into a shared repository frequently to detect issues early.
Unit Testing: A type of software testing that checks individual units of code for correctness.
UI Testing: A type of testing that ensures the user interface performs as expected.
API Testing: Testing the interaction between different software components to ensure proper functionality.
Software Patch: A quick fix to address bugs or vulnerabilities in software.
Codebase: The complete set of source code for an application or project.
Open Source: Software that is publicly available, allowing developers to modify and distribute it.
Closed Source: Software whose source code is not shared with the public.
API (Application Programming Interface): A set of tools and protocols for building software and apps.
SDK (Software Development Kit): A collection of software development tools for a specific platform.
Code Optimization: The process of improving the efficiency of code to enhance performance.
Encryption: The process of converting data into a secure format that cannot be read by unauthorized users.
Middleware: Software that connects different systems or applications and allows them to communicate.
Refactoring: The process of restructuring existing code without changing its functionality.
Technical Debt: The implied cost of additional work caused by choosing an easier, limited solution now instead of a better approach.
Components of Android Applications
Activity: Represents a single screen in an Android app with a user interface.
Service: Handles background processing in an app without direct interaction with the user.
Broadcast Receiver: Responds to system-wide broadcast messages or events.
Content Provider: Manages data sharing between different apps or processes.
Intent: Facilitates communication between different components of an Android app.
Fragment: A modular section of an activity that can be reused across activities.
Views: UI elements like buttons, text fields, or images that the user interacts with.
Layout: Defines the arrangement of views on the screen in an Android app.
ViewGroup: A container that organizes other views and defines their positioning.
Intent Filters: Defines the types of intents a component can handle.
Activity Stack: A list that manages the history of activities in an app.
Dialog: A small pop-up window that requires user interaction before proceeding.
Toast: A small message that pops up for a short period without user interaction.
Notification: A message that appears outside the app’s UI to provide updates or alerts.
AsyncTask: A class that allows background operations to be performed on a separate thread.
SharedPreferences: A mechanism for saving simple key-value pairs of data in an app.
SQLite Database: A lightweight database embedded within Android for local data storage.
Bundle: A data structure used to pass information between Android components.
Looper: A class used to loop through messages in a thread.
Handler: A class used to send and process messages between threads.
Background and Future of Android
Android Beta: The first public release of Android in 2008 for developers.
Android Cupcake: The first commercially available version of Android (Android 1.5).
Android Versions: Each major Android release is named after desserts, such as Jelly Bean, KitKat, and Oreo.
Open Handset Alliance (OHA): A consortium of companies that support the development of Android.
Google: The company responsible for developing and maintaining the Android OS.
Fragmentation: The variation in Android versions running on different devices.
API Levels: Numeric codes that identify Android versions, helping developers target specific devices.
Android Go: A lightweight version of Android designed for low-end devices with limited resources.
Android One: A line of phones using the pure Android OS, optimized for performance.
Fuchsia OS: A new OS in development by Google that may eventually replace Android.
Android Market: The original name of Google Play, the official Android app store.
Google Play: The current marketplace for Android apps, books, music, and other media.
Android Developer Program: A Google initiative to provide tools and resources for Android developers.
Android Studio: The official IDE for Android app development.
Cloud-Based Apps: Android apps that leverage cloud services for processing and storage.
Artificial Intelligence (AI) in Android: AI integrations in Android for tasks like voice commands and search.
Machine Learning (ML) Kit: A set of tools for building AI-powered features in Android apps.
Internet of Things (IoT): Integration of Android with IoT devices, such as smart home systems.
Android Security Updates: Monthly patches provided by Google to fix security vulnerabilities.
Future Trends in Android: Advances such as 5G, foldable screens, and augmented reality apps.
Tools that Collaborate with Android SDK
Android Studio: The official IDE for Android app development.
Emulator: A tool used to simulate an Android device on a computer.
Android Virtual Device (AVD): A configuration used by the emulator to mimic an Android device.
ADB (Android Debug Bridge): A command-line tool to debug apps and connect to devices.
Logcat: A command-line tool that captures and displays log messages from an Android device.
Gradle: A build automation tool integrated into Android Studio.
ProGuard: A tool used for shrinking, optimizing, and obfuscating code in Android apps.
SDK Manager: A tool that lets you download and manage SDK packages for different versions of Android.
DDMS (Dalvik Debug Monitor Service): A debugging tool for interacting with Android devices.
Monkey: A testing tool that sends random input to an app to detect crashes or issues.
Hierarchy Viewer: A tool that helps visualize the layout hierarchy of an Android app.
Layout Inspector: A debugging tool to inspect the view hierarchy of an app at runtime.
Linter: A tool that checks Android app code for bugs, security vulnerabilities, and coding style issues.
LeakCanary: A memory leak detection library for Android apps.
Firebase: A platform that offers backend services like databases, authentication, and cloud storage for Android apps.
HAXM (Hardware Accelerated Execution Manager): A tool to speed up the Android emulator by using virtualization.
JDK (Java Development Kit): The software development kit used for Java programming, a core requirement for Android.
NDK (Native Development Kit): A set of tools for building Android apps using native code languages like C and C++.
Vulkan: A cross-platform API for high-performance graphics in Android.
Robolectric: A framework for unit testing Android apps without an emulator.
Android Development Life Cycle Stages
Planning: The initial phase where the app's purpose and features are defined.
Design: The stage where UI and UX designs are created for the app.
Development: The phase where developers write code to build the app.
Testing: A phase where the app is tested for bugs, performance, and functionality.
Deployment: The process of publishing the app to users, often via Google Play.
Maintenance: Post-deployment activities to fix bugs and update the app with new features.
Wireframe: A visual guide representing the app’s layout and flow.
Prototype: An early sample version of the app used to test concepts and gather feedback.
App Monetization: The strategy for earning revenue from the app, such as ads or in-app purchases.
User Acceptance Testing (UAT): The final testing stage, where the app is tested by actual users.
Debugging: The process of identifying and fixing defects in the code.
Source Control: Using tools like Git to manage and track code changes during development.
Integration Testing: Ensuring different components of the app work together correctly.
Code Review: A systematic review of code by other developers to improve quality.
Build Automation: Using tools like Gradle to automate the build process.
Release Candidate: A version of the app that is nearly ready for release, pending final testing.
Beta Testing: Distributing a version of the app to external users for feedback.
Continuous Integration: Frequently merging code changes into a shared repository to catch issues early.
Hotfix: A quick update released to fix a critical issue in the app after deployment.
Rollout: The process of gradually releasing an app update to a broader audience.
Android Ecosystem
Android Ecosystem: A network of Android devices, services, apps, and developers.
Google Play Store: The official marketplace for Android apps and digital content.
OEM: Device manufacturers that build hardware running Android, such as Samsung and Xiaomi.
Google Play Services: A background service that allows Android apps to integrate with Google features.
Android TV: A version of Android designed for televisions and streaming devices.
Android Auto: A version of Android optimized for use in cars.
Android Wear OS: A version of Android designed for smartwatches and wearable devices.
Third-Party App Stores: Alternative app distribution platforms, such as Amazon Appstore.
Google Mobile Services (GMS): A suite of Google apps and services that comes preinstalled on Android devices.
Fragmentation: The variance of Android versions and devices that can complicate development.
Android One: A program that guarantees stock Android and timely updates on certain devices.
Custom ROM: A modified version of Android OS created by the developer community.
Android Fork: A variant of Android that is developed independently from Google, such as Fire OS.
Firmware: The software embedded in the device hardware that Android runs on.
App Bundle: A packaging format that reduces app size and optimizes performance for different devices.
SDK: A set of tools provided by Google for developing Android apps.
API: Interfaces that allow apps to interact with system services, hardware, and other apps.
Google Assistant: A voice-activated assistant integrated with Android devices.
Developer Console: A Google service for uploading and managing Android apps on Google Play.
Android Enterprise: A solution for integrating Android devices in corporate environments.
Preinstalled Android Apps
Google Play Store: The default app store for downloading apps on Android devices.
Google Chrome: The preinstalled web browser on Android devices.
Google Maps: A navigation app for location tracking, routes, and GPS services.
Gmail: The default email application on Android devices.
YouTube: A preinstalled video streaming app owned by Google.
Google Drive: Cloud storage service preinstalled on Android devices for storing files and documents.
Google Photos: A photo storage and sharing service with cloud backup for photos and videos.
Google Calendar: A calendar application to schedule events, reminders, and appointments.
Google Keep: A note-taking app for creating and organizing lists and notes.
Google Docs: A word-processing app for creating and editing documents.
Google Assistant: A voice-activated virtual assistant for searching the web, setting reminders, and controlling smart devices.
Google News: A personalized news app that curates news articles based on user preferences.
Google Play Music: A preinstalled app for streaming music and playing locally stored music files.
Contacts: A default app for managing phone contacts.
Messages: The default app for sending and receiving SMS and MMS messages.
Phone: The default dialer app for making phone calls and managing call history.
Clock: The app for setting alarms, timers, and checking world clocks.
Calculator: The default app for basic arithmetic operations.
Camera: The default app for capturing photos and videos on Android devices.
Settings: The app for managing system settings, including Wi-Fi, Bluetooth, display, and security.
Android SDK Features
Android Debug Bridge (ADB): A command-line tool for communicating with Android devices.
Emulator: A tool that simulates an Android device for testing apps on a computer.
Dalvik Virtual Machine: A process virtual machine used to run Android apps.
Logcat: A logging system that displays log messages from the device or emulator.
APK: The file format used to distribute and install Android apps.
Build Tools: Tools in the SDK that help build and package Android apps.
Platform Tools: Tools that provide platform-specific APIs and features.
SDK Manager: A tool for managing SDK packages and components.
NDK: Native Development Kit for building performance-critical portions of apps in C or C++.
ProGuard: A tool for code obfuscation, shrinking, and optimization.
Layout Inspector: A tool for debugging app layouts during runtime.
Lint: A tool for identifying and fixing bugs, security issues, and coding style violations.
R8: A code shrinker for reducing app size and improving performance.
AndroidX: A package of libraries that provide backward compatibility for Android APIs.
Gradle: The build automation tool used in Android Studio to manage dependencies and create APKs.
ConstraintLayout: A flexible layout manager used in Android to design complex layouts.
RecyclerView: A view that efficiently displays large sets of data by reusing views.
Data Binding: A library that helps bind UI components to data sources in a declarative format.
Firebase SDK: A suite of services for adding features like real-time databases and authentication to Android apps.
Google Play Services SDK: A collection of APIs that allow apps to connect with Google services like Maps and Google Sign-In.
Android Development Framework
Activity: A core component that represents a single screen in an Android app.
Fragment: A reusable portion of an Activity that can be used to create dynamic interfaces.
ViewGroup: A container that holds other UI components, allowing layouts to be structured.
Intent: A messaging object used to request actions from other app components.
Service: A background process that runs independently of the app's user interface.
BroadcastReceiver: A component that listens for system-wide broadcast announcements.
ContentProvider: A component that manages shared app data stored in databases or files.
Lifecycle: The set of stages that an Android component goes through during its existence.
AsyncTask: A class used to perform background tasks and update the UI with the results.
Handler: A class that handles messages between different threads in an app.
RecyclerView.Adapter: A class used to bind data to RecyclerView items.
LiveData: A lifecycle-aware component used to store data that can be observed by UI elements.
ViewModel: A class designed to store and manage UI-related data in a lifecycle-conscious way.
Navigation: A framework for managing in-app navigation with fragments and activities.
Data Binding Library: A library that allows binding of UI components directly to data sources.
AndroidX: A major improvement over the Android Support Library that makes development easier.
Coroutines: A Kotlin feature that simplifies asynchronous programming in Android.
Dependency Injection: A technique that simplifies code by providing instances of objects where needed.
Jetpack Compose: A modern toolkit for building native Android UIs with Kotlin.
Room: A database library for easier data storage and management in Android apps.
Android Application Architecture / Android Software Stack
Linux Kernel: The core of the Android OS that handles low-level system services.
Libraries: A layer of native libraries like SQLite and WebKit for app functionality.
Android Runtime (ART): The runtime environment that executes Android apps.
Application Framework: A collection of APIs that developers use to create Android apps.
Content Providers: Mechanisms for sharing data between applications.
Resource Manager: A system that handles resources like strings, layouts, and graphics in an app.
Package Manager: A system that keeps track of all the apps installed on the device.
Activity Manager: A system that manages the lifecycle of activities and applications.
Window Manager: A system that manages windows and views in Android.
Broadcast Receiver: A component that listens for system-wide broadcast events.
Sensors: Hardware components like accelerometers and gyroscopes that provide input to apps.
Surface Manager: Manages access to the display subsystem and provides surfaces to draw on.
System Services: A set of services like notification, power management, and telephony.
SQLite: A lightweight relational database engine embedded in Android.
Media Framework: Provides media services to play and record audio and video.
Hardware Abstraction Layer (HAL): Allows Android to communicate with the hardware of the device.
OpenGL ES: A cross-platform API used for rendering 2D and 3D graphics.
Dalvik Virtual Machine (DVM): An obsolete process virtual machine used before ART.
Binder IPC: A mechanism for communication between different processes in Android.
Java API Framework: The core set of APIs that provide access to Android features and hardware.
Android Studio
Gradle: The build automation tool used in Android Studio.
Layout Editor: A tool for designing app layouts using drag-and-drop features.
Android Virtual Device (AVD): Emulator configurations used to test apps in Android Studio.
Code Editor: The main area in Android Studio where developers write code.
Run Button: A tool used to compile and run apps directly on an emulator or physical device.
Logcat: A logging tool that displays runtime messages from an app or device.
Debugging Tools: Tools in Android Studio used to find and fix issues in the code.
Project Structure: The hierarchical organization of files and folders in an Android project.
Resource Manager: A tool to manage drawable, layout, and string resources.
Lint: A tool integrated into Android Studio that checks for code quality issues.
Profiler: A tool to measure the performance of an app, including memory and CPU usage.
Version Control: A system integrated into Android Studio for managing code versions with Git.
APK Analyzer: A tool for inspecting the contents of an APK to optimize app size.
Instant Run: A feature that allows for quicker updates to a running app without reinstalling.
Shortcuts: Keyboard shortcuts in Android Studio that increase development efficiency.
Java to Kotlin Converter: A built-in tool that automatically converts Java code to Kotlin.
Device File Explorer: A tool for exploring the file system of an Android device.
Firebase Assistant: A tool for integrating Firebase services like analytics and cloud messaging.
Code Completion: An intelligent feature that suggests possible code completions while typing.
Theme Editor: A tool for customizing the color schemes and styles of an app.
Android Manifest
Manifest File: A configuration file that provides essential information about the app to the Android system.
Package Name: The unique identifier for an Android app defined in the manifest.
Permissions: Declarations in the manifest that specify which device features the app can access.
Activities: The components declared in the manifest that define the entry points of the app's screens.
Services: Background components of an app that are declared in the manifest for continuous tasks.
Broadcast Receivers: Components that listen for and respond to broadcast messages, declared in the manifest.
Content Providers: Shared app components that manage data, declared in the manifest.
Intent Filters: Filters in the manifest that define how an app responds to specific intents or actions.
Minimum SDK Version: A declaration that specifies the lowest Android API level the app supports.
Target SDK Version: A declaration specifying the API level the app is designed to run on.
Application Tag: The main tag in the manifest that includes components like activities and services.
Metadata: Additional information in the manifest for activities or services to access certain resources.
Exported Attribute: Specifies whether a component can be invoked by other apps.
Uses-Feature: Declares the hardware and software features required by the app, such as cameras or sensors.
Launch Mode: Defines how activities are launched and how they interact in the task stack.
Backup: A manifest attribute that enables backup and restore functionality for an app.
Task Affinity: Defines the relationship of an activity to a specific task or group of activities.
Permission Protection Levels: Defines the level of protection required for a permission request.
Version Code: A manifest attribute that specifies the version number of an app.
Version Name: The user-readable version of the app, declared in the manifest.
The Lint Tool
Lint: A tool used to analyze the quality of Android app code and identify potential issues.
Code Smell: A term for bad code practices that Lint helps identify.
Code Style Check: A feature in Lint that checks if the code follows best practices for formatting.
Security Warnings: Lint identifies potential security vulnerabilities in the code.
Performance Issues: Lint checks for inefficient code that can degrade app performance.
Unused Resources: Lint flags any unused resources or code that can be safely removed.
Deprecated API Warnings: Lint highlights the use of APIs that are outdated or no longer supported.
Error Detection: Lint identifies compile-time and runtime errors in the app.
XML Validation: Lint checks XML files for errors or potential issues, such as layout inconsistencies.
Accessibility Issues: Lint identifies issues related to accessibility, such as missing content descriptions.
Multithreading Issues: Lint checks for proper handling of threads and concurrency.
Redundant Code: Lint flags code that is unnecessarily repeated and can be optimized.
Memory Leaks: Lint helps detect potential memory leaks that can affect app performance.
Code Maintainability: Lint assesses code for factors that affect long-term maintainability.
Localization Issues: Lint detects hard-coded strings or missing translations in localized versions of the app.
Lint Baseline: A feature that allows developers to ignore known issues while focusing on new warnings.
Command Line Lint: Lint can be run from the command line for batch processing of code analysis.
Lint Rules: Specific checks or rules that can be customized in Lint for different code requirements.
Static Analysis: Lint performs static code analysis, meaning it doesn't execute the code but examines its structure.
Quick Fixes: Lint provides suggestions or automated fixes for some of the detected issues.
Monkey
Monkey: A command-line tool used for stress-testing Android apps by generating random inputs.
Random Events: Monkey generates random gestures, touches, and system events to simulate user interactions.
Stress Testing: Monkey helps in stress-testing apps to ensure stability under heavy use.
Event Count: The number of random events Monkey executes during the testing process.
Seed Value: A value used to initialize the random number generator in Monkey for reproducible testing.
Package: In Monkey testing, the specific app package to be tested with random inputs.
Throttling: A parameter in Monkey that controls the delay between each event.
Verbose Mode: A mode in Monkey that provides detailed output during the testing process.
Crash Handling: Monkey reports any crashes that occur during the random testing process.
App Stability: Monkey helps assess an app's ability to handle unexpected inputs without crashing.
Test Coverage: The extent of the app tested during Monkey's execution, depending on the number of events generated.
Permissions: Monkey testing requires specific permissions to interact with certain app features.
MonkeyRunner: A companion tool that allows more sophisticated automated tests with Python scripting.
ANR Reports: Monkey identifies if an app becomes unresponsive (ANR) during the testing.
Touch Events: Monkey simulates touch interactions like taps, swipes, and scrolls.
Key Events: Monkey generates keypress events, such as back or home button presses.
System Events: Monkey can generate system-wide events like orientation changes or system shutdowns.
Bug Reporting: Monkey logs bugs and unexpected behavior during the test run for analysis.
Test Duration: The length of time Monkey runs random event tests can be specified by developers.
Integration Testing: Monkey can help with integration testing by interacting with multiple components of an app.
Gradle
Gradle: A build automation tool used in Android projects to compile, test, and deploy applications.
Build Script: A script that defines tasks and dependencies required for building an Android project.
Gradle Wrapper: A mechanism that ensures a consistent version of Gradle is used across different environments.
Dependencies: External libraries or modules declared in the build.gradle file.
Build Variants: Different versions of an app, such as debug and release, managed by Gradle.
Tasks: Specific actions Gradle executes, such as compiling code or generating APKs.
Plugins: Extensions that add functionality to a Gradle build script, such as the Android plugin.
Repositories: Locations where Gradle looks for dependencies, such as Maven Central or Google.
Build Types: Configurations like "debug" and "release" that determine how an app is built and packaged.
Product Flavors: Custom build configurations that allow creating different versions of an app.
Build.gradle File: The main configuration file for setting up tasks, dependencies, and plugins.
ProGuard: A tool used with Gradle to shrink, optimize, and obfuscate code in Android apps.
R8: A replacement for ProGuard used for code shrinking and optimization in newer Android projects.
Source Sets: Gradle configuration that defines where source code and resources are located for a project.
Multi-Module Project: A project setup where different parts of the app are divided into separate modules.
Build Cache: Gradle stores build outputs to speed up subsequent builds by reusing previously compiled components.
Custom Tasks: Gradle allows developers to create custom tasks to automate additional parts of the build process.
Manifest Merging: A process where multiple AndroidManifests are combined in a Gradle build.
Build Output: The APK or AAB generated after compiling and building an Android project.
Build System: Gradle is part of the Android build system, automating app builds and managing dependencies.