<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Vishwajeet Barve on Medium]]></title>
        <description><![CDATA[Stories by Vishwajeet Barve on Medium]]></description>
        <link>https://medium.com/@vishtech36?source=rss-a43542e5de70------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*dCbsOk2zkuv8-laidK9x6g.jpeg</url>
            <title>Stories by Vishwajeet Barve on Medium</title>
            <link>https://medium.com/@vishtech36?source=rss-a43542e5de70------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 31 May 2026 18:07:47 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@vishtech36/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[512,000 lines of secrets: inside the Claude Code leak]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Anthropic accidentally published its entire coding assistant source code to npm&#x200A;&#x2014;&#x200A;here&#x2019;s what was inside, what it means, and what you&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@vishtech36/512-000-lines-of-secrets-inside-the-claude-code-leak-fa5435c9aed2?source=rss-a43542e5de70------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@vishtech36/512-000-lines-of-secrets-inside-the-claude-code-leak-fa5435c9aed2?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/fa5435c9aed2</guid>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Wed, 01 Apr 2026 18:05:59 GMT</pubDate>
            <atom:updated>2026-04-01T18:05:59.942Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Kotlin 2.0: What’s New and Exciting]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Kotlin 2.0 is the latest major release of the popular programming language, bringing a host of new features and improvements.</p><p class="medium-feed-link"><a href="https://medium.com/@vishtech36/kotlin-2-0-whats-new-and-exciting-88c57bc95b39?source=rss-a43542e5de70------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@vishtech36/kotlin-2-0-whats-new-and-exciting-88c57bc95b39?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/88c57bc95b39</guid>
            <category><![CDATA[android-app-development]]></category>
            <category><![CDATA[kotlin-beginners]]></category>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[kotlin-multiplatform]]></category>
            <category><![CDATA[androiddev]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Fri, 02 Aug 2024 07:10:51 GMT</pubDate>
            <atom:updated>2024-08-02T07:10:51.924Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Tips and Tricks for Using ChatGPT Effectively]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">ChatGPT is a versatile tool that can assist with a wide range of tasks, from generating creative content to providing information and&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@vishtech36/tips-and-tricks-for-using-chatgpt-effectively-3b577843c45b?source=rss-a43542e5de70------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@vishtech36/tips-and-tricks-for-using-chatgpt-effectively-3b577843c45b?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/3b577843c45b</guid>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Fri, 02 Aug 2024 07:07:28 GMT</pubDate>
            <atom:updated>2024-08-02T07:07:28.808Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Getting Started with Android Development: A Beginner’s Guide]]></title>
            <link>https://medium.com/@vishtech36/getting-started-with-android-development-a-beginners-guide-fd23ff6f9f96?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/fd23ff6f9f96</guid>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Fri, 02 Aug 2024 07:03:29 GMT</pubDate>
            <atom:updated>2024-08-02T07:03:29.656Z</atom:updated>
            <content:encoded><![CDATA[<p>Android development is an exciting field that offers countless opportunities for creativity and innovation. Whether you’re looking to create the next big app or simply want to learn a new skill, getting started with Android development can be both fun and rewarding. In this guide, we’ll walk you through the essential steps to kickstart your journey into Android development.</p><h4>1. Understand the Basics of Android</h4><p>Before diving into development, it’s crucial to understand the basics of the Android platform:</p><ul><li><strong>Operating System:</strong> Android is a mobile operating system based on a modified version of the Linux kernel.</li><li><strong>Programming Languages:</strong> Java and Kotlin are the primary languages used for Android development. Kotlin, in particular, has gained popularity due to its modern syntax and features.</li><li><strong>Components:</strong> Android applications are built using components like Activities, Fragments, Services, Broadcast Receivers, and Content Providers.</li></ul><h4>2. Set Up Your Development Environment</h4><p>To start developing Android apps, you’ll need to set up your development environment:</p><ul><li><strong>Android Studio:</strong> This is the official Integrated Development Environment (IDE) for Android development. It includes everything you need to start building apps, including an emulator, code editor, and various tools.</li><li><strong>Download Android Studio:</strong> Visit the <a href="https://developer.android.com/studio">official website</a> and download the latest version of Android Studio for your operating system.</li><li><strong>Install Android Studio:</strong> Follow the installation instructions. The setup wizard will guide you through the process of installing necessary components, including the Android SDK.</li></ul><h4>3. Learn the Fundamentals of Java or Kotlin</h4><p>Before you start building Android apps, you should have a good understanding of Java or Kotlin. While both languages are officially supported, Kotlin is recommended due to its concise syntax and advanced features.</p><ul><li><strong>Java:</strong> If you’re new to programming, consider starting with Java. It’s widely used and has extensive documentation.</li><li><strong>Kotlin:</strong> If you’re already familiar with Java or prefer a more modern language, Kotlin is an excellent choice.</li></ul><p><strong>Learning Resources:</strong></p><ul><li><a href="https://docs.oracle.com/javase/tutorial/">Java Documentation</a></li><li>Kotlin Documentation</li><li>Online courses and tutorials on platforms like Udemy, Coursera, and YouTube.</li></ul><h4>4. Build Your First Android App</h4><p>Once you’re comfortable with Java or Kotlin, it’s time to build your first Android app. Start with a simple project, such as a “Hello World” app, to familiarize yourself with the development process.</p><p><strong>Key Concepts to Learn:</strong></p><ul><li><strong>Activities and Intents:</strong> Understand how to create and navigate between screens.</li><li><strong>Layouts:</strong> Learn about different layout types (LinearLayout, RelativeLayout, ConstraintLayout) and how to use XML to design your UI.</li><li><strong>Resources:</strong> Get to know how to manage strings, colors, dimensions, and other resources.</li></ul><h4>5. Explore Android Development Tools and Libraries</h4><p>To enhance your development experience, familiarize yourself with essential Android development tools and libraries:</p><ul><li><strong>Android SDK Tools:</strong> These include ADB (Android Debug Bridge), AVD (Android Virtual Device), and more.</li><li><strong>Libraries:</strong> Explore popular libraries like Retrofit (networking), Glide/Picasso (image loading), and Room (database).</li></ul><h4>6. Learn About Advanced Topics</h4><p>As you progress, delve into more advanced topics:</p><ul><li><strong>Fragments:</strong> Learn how to create and manage multiple UI components within an activity.</li><li><strong>RecyclerView:</strong> Understand how to display lists of data efficiently.</li><li><strong>Networking:</strong> Get to know how to make network requests and handle APIs.</li><li><strong>Data Storage:</strong> Explore options for data storage, including SQLite, Room, SharedPreferences, and more.</li></ul><h4>7. Join the Android Development Community</h4><p>Engage with the Android development community to stay updated with the latest trends and technologies. Participate in forums, attend meetups, and follow blogs and podcasts. Some popular communities and resources include:</p><ul><li><a href="https://stackoverflow.com/questions/tagged/android">Stack Overflow</a></li><li><a href="https://www.reddit.com/r/androiddev/">Reddit</a></li><li>Android Developers Blog</li><li><a href="https://www.youtube.com/c/GoogleDevelopers">Google Developers YouTube Channel</a></li></ul><h4>8. Build and Publish Your Own App</h4><p>The best way to solidify your skills is to build and publish your own app. Start with a small project and gradually add more features. Once you’re satisfied with your app, you can publish it on the Google Play Store. This process involves:</p><ul><li><strong>Creating a Google Play Developer Account:</strong> You’ll need to pay a one-time registration fee.</li><li><strong>Preparing Your App for Release:</strong> Optimize your app, create assets (icons, screenshots), and write a compelling description.</li><li><strong>Uploading and Publishing:</strong> Use the Google Play Console to upload and publish your app.</li></ul><h4>9. Keep Learning and Experimenting</h4><p>Android development is a continuously evolving field. Stay curious and keep learning about new features, libraries, and best practices. Experiment with new technologies like Jetpack Compose, ARCore, or Wear OS to expand your skillset.</p><h4>Conclusion</h4><p>Starting your journey in Android development can be challenging but incredibly rewarding. By following these steps, you’ll gain a solid foundation and be well on your way to building amazing apps. Remember, the key to success is continuous learning and practice. So, dive in, start coding, and let your creativity flow!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fd23ff6f9f96" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Elevate Your Android Development Game: Embrace Coding Standards and Best Practices ]]></title>
            <link>https://medium.com/@vishtech36/elevate-your-android-development-game-embrace-coding-standards-and-best-practices-996f755aae07?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/996f755aae07</guid>
            <category><![CDATA[androiddev]]></category>
            <category><![CDATA[android-app-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Tue, 26 Dec 2023 16:28:23 GMT</pubDate>
            <atom:updated>2023-12-26T16:28:23.882Z</atom:updated>
            <content:encoded><![CDATA[<p>Hey Android Developers! 👋</p><p>In the dynamic world of Android app development, adhering to coding standards and best practices is the key to creating robust, scalable, and maintainable applications. 📱💻 Let’s dive into the world of clean code and best practices that will elevate your Android development skills to new heights! 🚀</p><h3>🧱 Building Blocks: Coding Standards</h3><p><strong>1. Consistent Code Formatting:</strong> Maintain a consistent code format throughout your project. Tools like Kotlin’s ktlint and Java&#39;s CheckStyle can automate this process, ensuring a unified and readable codebase.</p><p><strong>2. Meaningful Variable and Function Names:</strong> Choose descriptive names for variables and functions. Code should read like prose, making it easy for others (or future you) to understand its purpose without diving deep into the implementation.</p><p><strong>3. Follow the SOLID Principles:</strong> Embrace SOLID principles for object-oriented design. Aim for code that is easy to understand, extend, and maintain. This will make your codebase more resilient to changes and easier to collaborate on.</p><p><strong>4. Avoid Magic Numbers and Strings:</strong> Replace magic numbers and strings with constants or enums. This not only improves code readability but also makes maintenance and updates less error-prone.</p><p><strong>5. Code Review:</strong> Regularly conduct code reviews to ensure that your team adheres to coding standards. Code reviews provide an opportunity for knowledge sharing, catching bugs early, and maintaining a high-quality codebase.</p><h3>🚀 Best Practices for Android Development</h3><p><strong>1. Follow the Android Coding Style:</strong> Adopt the official Android coding style guidelines to ensure consistency across the Android ecosystem. This includes naming conventions, resource organization, and other platform-specific recommendations.</p><p><strong>2. Effective Resource Management:</strong> Optimize resource usage by leveraging Android’s resource system. Properly handle assets, layouts, and dimensions to support various screen sizes and densities.</p><p><strong>3. Memory Management:</strong> Be mindful of memory usage to prevent memory leaks and optimize app performance. Utilize tools like the Android Profiler to identify and fix memory-related issues.</p><p><strong>4. Threading and Concurrency:</strong> Effectively manage threads and concurrency to avoid UI freezes and enhance the overall user experience. Use AsyncTask, Handlers, or Kotlin Coroutines depending on your project’s requirements.</p><p><strong>5. Embrace Design Patterns:</strong> Implement design patterns such as MVVM (Model-View-ViewModel) or MVP (Model-View-Presenter) to promote separation of concerns and maintainability.</p><p><strong>6. Testing:</strong> Invest time in writing unit tests and UI tests. This not only ensures the correctness of your code but also facilitates continuous integration and delivery.</p><h3>🛠️ Tools of the Trade</h3><p>Explore and leverage tools like Android Lint, Detekt, and SonarQube to automate code analysis and ensure compliance with coding standards. These tools can catch potential issues early in the development process, saving time and effort in the long run.</p><h3>🤝 Conclusion</h3><p>In the ever-evolving landscape of Android development, adopting coding standards and best practices is not just a good idea — it’s essential. It paves the way for collaboration, scalability, and the creation of high-quality apps that stand the test of time.</p><p>So, let’s commit to writing code that not only works but also speaks volumes about the craftsmanship of Android developers. Elevate your coding game, and let’s build amazing Android experiences together! 🌟</p><p>#AndroidDev #CodingStandards #BestPractices #MobileAppDevelopment #AndroidProgramming 🚀</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=996f755aae07" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building Robust Software with Kotlin and SOLID Principles]]></title>
            <link>https://medium.com/@vishtech36/building-robust-software-with-kotlin-and-solid-principles-4a820cf49268?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/4a820cf49268</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[androiddev]]></category>
            <category><![CDATA[android-app-development]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Sat, 23 Dec 2023 17:16:23 GMT</pubDate>
            <atom:updated>2023-12-23T17:29:10.245Z</atom:updated>
            <content:encoded><![CDATA[<p>In the dynamic world of software development, the pursuit of building robust, maintainable, and scalable systems remains a constant challenge. One proven approach to achieving these goals is the adoption of SOLID principles, a set of best practices for object-oriented design. In this blog post, we’ll explore each SOLID principle and illustrate their application with Kotlin examples.</p><p><strong>Single Responsibility Principle (SRP)</strong></p><p>The Single Responsibility Principle advocates for a clear and focused purpose for each class. Let’s consider an example related to user management:</p><pre>class UserRepository {<br> fun save(user: User) {<br> // Save user to the database<br> }<br>fun delete(userId: String) {<br> // Delete user from the database<br> }<br>}<br>class UserValidator {<br> fun validate(user: User): Boolean {<br> // Validate user data<br> return true<br> }<br></pre><p>Here, we’ve separated the responsibilities of user management and user validation into two distinct classes (`UserRepository` and `UserValidator`), adhering to the Single Responsibility Principle.</p><p><strong>Open-Closed Principle (OCP)</strong></p><p>The Open-Closed Principle encourages classes to be open for extension but closed for modification. Consider a scenario involving different shapes:</p><pre>interface Shape {<br> fun area(): Double<br>}<br>class Circle(val radius: Double) : Shape {<br> override fun area(): Double = Math.PI * radius * radius<br>}<br>class Square(val side: Double) : Shape {<br> override fun area(): Double = side * side<br>}<br>// New shape (extension) can be added without modifying existing code<br>class Triangle(val base: Double, val height: Double) : Shape {<br> override fun area(): Double = 0.5 * base * height<br>}</pre><p>By introducing a common `Shape` interface and extending it with new shapes (like `Triangle`), we follow the Open-Closed Principle, allowing for easy extension without modifying existing code.</p><p><strong>Liskov Substitution Principle (LSP)</strong></p><p>Named after Barbara Liskov, the Liskov Substitution Principle states that objects of a base class should be replaceable with objects of a derived class without affecting program correctness. Let’s consider a hierarchy of birds:</p><pre>open class Bird {<br> open fun fly() {<br> println(&quot;Flying&quot;)<br> }<br>}<br>class Sparrow : Bird()<br>class Ostrich : Bird() {<br> override fun fly() {<br> println(&quot;I can&#39;t fly&quot;)<br> }<br>}</pre><p>In this example, both `Sparrow` and `Ostrich` are substitutable for the base class `Bird`, adhering to the Liskov Substitution Principle.</p><p><strong>Interface Segregation Principle (ISP)</strong></p><p>The Interface Segregation Principle advises against creating large interfaces, forcing classes to implement unnecessary methods. Consider the following:</p><pre>interface Worker {<br> fun work()<br> fun eat()<br>}<br>class Programmer : Worker {<br> override fun work() {<br> println(&quot;Coding&quot;)<br> }<br>override fun eat() {<br> println(&quot;Eating snacks&quot;)<br> }<br>}<br>class Manager : Worker {<br> override fun work() {<br> println(&quot;Managing projects&quot;)<br> }<br>override fun eat() {<br> println(&quot;Lunch break&quot;)<br> }<br>}</pre><p>By breaking down the `Worker` interface into specific roles for `Programmer` and `Manager`, we follow the Interface Segregation Principle.</p><p><strong>Dependency Inversion Principle (DIP)</strong></p><p>The Dependency Inversion Principle advocates for depending on abstractions rather than concrete implementations. Consider the following example involving message senders:</p><pre>interface MessageSender {<br> fun sendMessage(message: String)<br>}<br>class EmailSender : MessageSender {<br> override fun sendMessage(message: String) {<br> println(&quot;Sending email: $message&quot;)<br> }<br>}<br>class SMSSender : MessageSender {<br> override fun sendMessage(message: String) {<br> println(&quot;Sending SMS: $message&quot;)<br> }<br>}<br>class NotificationService(private val sender: MessageSender) {<br> fun sendNotification(message: String) {<br> sender.sendMessage(message)<br> }<br>}</pre><p>Here, `NotificationService` depends on the abstraction `MessageSender`, allowing for easy substitution of different message senders without modifying the service.</p><p>In conclusion, embracing SOLID principles provides a solid foundation for building maintainable, scalable, and adaptable software. By incorporating these principles into your Kotlin codebase, you pave the way for a resilient and future-proof application architecture. Happy coding!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4a820cf49268" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking the Power of Repository Pattern in Android ]]></title>
            <link>https://medium.com/@vishtech36/unlocking-the-power-of-repository-pattern-in-android-b7f05f37234f?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/b7f05f37234f</guid>
            <category><![CDATA[androiddev]]></category>
            <category><![CDATA[android-development]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Sat, 23 Dec 2023 16:18:48 GMT</pubDate>
            <atom:updated>2023-12-23T16:18:48.928Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>The Repository Pattern in Android Development: Simplifying Data Access</strong></p><p>The Repository Pattern is a widely adopted architectural design that brings order and efficiency to data access in Android applications. It serves as an abstraction layer between the app’s data sources (such as a local database or a remote server) and the rest of the application, providing a clean and consistent API for data manipulation.</p><p>At its core, the Repository Pattern aims to separate the logic that retrieves and stores data from the rest of the application, promoting a more modular and maintainable codebase. In an Android context, this pattern is especially useful for managing the complexities of data access, where data might be sourced from various places, such as a local SQLite database, a network API, or even in-memory caches.</p><p>The key components of the Repository Pattern in Android typically include:</p><p>1. <strong>Data Source Interface:</strong><br> Define interfaces for the different data sources, like a local database DAO (Data Access Object) interface and a remote API service interface. This allows for flexibility in implementing various data sources while ensuring a consistent contract.</p><p>2. <strong>Concrete Data Sources:</strong><br> Implement the interfaces defined earlier by creating classes for local and remote data sources. For example, a LocalDataSource might use Room for database access, while a RemoteDataSource could utilize Retrofit for network communication.</p><p>3. <strong>Repository Class:</strong><br> The Repository acts as a mediator between the ViewModel (or Presenter) and the data sources. It contains the business logic for deciding where to fetch data from (local or remote) and how to combine or transform the data if needed.</p><p>4. <strong>Model Classes:</strong><br> Define the data models that represent the entities in your application. These models are used by the Repository to interact with the underlying data sources.</p><p>By adhering to the Repository Pattern, Android developers can achieve several benefits, including:</p><p><strong>Abstraction of Data Sources:</strong> Developers can swap out or modify data sources without affecting the rest of the application, promoting flexibility and maintainability.<br> <br><strong>Testability:</strong> The separation of concerns introduced by the pattern makes it easier to write unit tests for the various components, such as the Repository and ViewModel.</p><p><strong>Consistent API:</strong> The Repository provides a unified and coherent interface for data access, simplifying the overall architecture and making it easier for developers to understand and collaborate on the codebase.</p><p>In conclusion, the Repository Pattern is a valuable tool in the Android developer’s arsenal, offering a clean and scalable solution to managing data access in applications of varying complexities. Embracing this pattern can lead to code that is more modular, testable, and adaptable to future changes in data sources or business requirements.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b7f05f37234f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building AOSP: Android 12]]></title>
            <link>https://medium.com/@vishtech36/building-aosp-android-12-cb6ac900b8e9?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/cb6ac900b8e9</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[androiddev]]></category>
            <category><![CDATA[android-app-development]]></category>
            <category><![CDATA[aosp]]></category>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Mon, 25 Jul 2022 10:03:12 GMT</pubDate>
            <atom:updated>2022-07-25T10:03:12.353Z</atom:updated>
            <content:encoded><![CDATA[<p>Before we start, you need at least a minimum system requirement to build AOSP<strong>.</strong></p><p><strong>Required:</strong></p><ul><li>2018+ Octa-core i7 with 32GB of RAM</li><li>450GB of HD space available</li><li>SSD effectively required</li><li>Ubuntu 18.04 64-bit with full root access (20.04 should also work)</li></ul><p><strong>Before we begin:</strong></p><p>You will need:</p><ol><li>4 GB USB Flash Drive will be wiped and formatted with the FAT32 file system.</li><li>Rufus application (Rufus — Create bootable USB drives the easy way).</li></ol><p><strong>Procedure:</strong></p><ol><li>Download Ubuntu 20.04 ISO image to your hard drive<br>Note: Some of the tools used in the class are incompatible with Ubuntu 22.04 Don’t install it. Download this <a href="https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Freleases.ubuntu.com%2F20.04%2F&amp;data=05%7C01%7CVishwajeet.Barve%40cerence.com%7C155bcb9a97f34921cabb08da5ae04010%7C363f8ad71be34f058a6b4955756fe2f6%7C0%7C0%7C637922216451246694%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=C6By9ikgY0Ppi6T1Dku50Grca34sq08B6HCAppxmHxA%3D&amp;reserved=0">Ubuntu 20.04.4 LTS (Focal Fossa)</a>.</li><li>Prepare a bootable USB flash drive</li><li>When you are done you should have a bootable USB drive from which you can install Ubuntu.</li><li>Install the required packages to build Android: <a href="http://source.android.com/source/initializing.html">http://source.android.com/source/initializing.html</a></li><li>You need to install the repo tool, you can follow this link <a href="https://source.android.com/setup/develop">https://source.android.com/setup/develop</a></li><li>You following commands to fetch aosp</li></ol><pre>mkdir android<br>cd android<br>mkdir android-12.0.0_r2<br>cd android-12.0.0_r2<br>repo init -u <a href="https://android.googlesource.com/platform/manifest">https://android.googlesource.com/platform/manifest</a> -b android-12.0.0_r2<br>repo sync</pre><p>7. Build AOSP:</p><pre>cd ~/android/android-12.0.0_r2<br>. build/envsetup.sh<br>lunch aosp_cf_x86_64_phone-eng<br>make</pre><p>8. Run AOSP: Download and setup the Cuttlefish tools <a href="https://android.googlesource.com/device/google/cuttlefish/">https://android.googlesource.com/device/google/cuttlefish/</a></p><p>if you faced this issue <strong>Cuttlefish — `debuild -i -us -uc -b` fails</strong></p><p>You can use the following command:</p><pre>git checkout 31df03a29f690298c8f893e279d510db593b5847</pre><p>9. Run Cuttlefish:</p><pre>HOME=${PWD}/out launch_cvd</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/444/1*boOaAJkFjF53Ao7t5patKg.png" /></figure><p>if you see a black screen, like this</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yA5pMPiYdULe71xKCMk3Hg.png" /></figure><p>install generic kernel using the following command:</p><pre>sudo apt install linux-generic</pre><p>At the next reboot, hold the SHIFT/ESC key down and you’ll get the Ubuntu boot menu. You can then select “Advanced options for Ubuntu” and select a 5.4 kernel from the list.</p><p>After rebooting use the following command:</p><pre>cd ~/android/android-12.0.0_r2<br>. build/envsetup.sh<br>lunch aosp_cf_x86_64_phone-eng<br>HOME=${PWD}/out launch_cvd</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cb6ac900b8e9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Installing apps programmatically in Android 10]]></title>
            <link>https://medium.com/@vishtech36/installing-apps-programmatically-in-android-10-7e39cfe22b86?source=rss-a43542e5de70------2</link>
            <guid isPermaLink="false">https://medium.com/p/7e39cfe22b86</guid>
            <category><![CDATA[android-app-development]]></category>
            <category><![CDATA[android-apps]]></category>
            <category><![CDATA[android]]></category>
            <dc:creator><![CDATA[Vishwajeet Barve]]></dc:creator>
            <pubDate>Fri, 13 Aug 2021 17:12:18 GMT</pubDate>
            <atom:updated>2021-08-13T17:26:10.999Z</atom:updated>
            <content:encoded><![CDATA[<p>There are some situations in the life of an Android developer where you cannot publish android apps on the Play store because of the client or organizational requirements. So you need to write your own logic download a new version of the app and update it programmatically it was a straightforward process before the Android Oreo but now things have been changed we need to do little extra work to write code that follows android’s guidelines.</p><ol><li>The first thing you need to do give is permissions for storage and installing packages (app)</li></ol><pre>&lt;uses-permission android:name=&quot;android.permission.REQUEST_INSTALL_PACKAGES&quot; /&gt;<br>&lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;<br>&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;</pre><p>2. You cannot access storage directly in android 10 we need to define File Providers in the AndroidManifest file under the application tag(for getting app location)</p><pre>   &lt;provider<br>        android:name=&quot;androidx.core.content.FileProvider&quot;<br>        android:authorities=&quot;${applicationId}.provider&quot;<br>        android:exported=&quot;false&quot;<br>        android:grantUriPermissions=&quot;true&quot;&gt;<br>        &lt;meta-data<br>            android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;<br>            android:resource=&quot;@xml/provider_paths&quot; /&gt;<br>    &lt;/provider&gt;</pre><p>3. Now you need to create <strong>provider_paths.xml</strong> while is defined in provider tag in Manifest which gives which locations your app wants to access in storage</p><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br>&lt;paths xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;<br>    &lt;external-path<br>        name=&quot;files_root&quot;<br>        path=&quot;Android/data/${applicationId}&quot; /&gt;<br>    &lt;external-path<br>        name=&quot;external_files&quot;<br>        path=&quot;.&quot; /&gt;<br>&lt;/paths&gt;</pre><p>4. You need to write code for asking runtime permission for package installation and storage</p><pre>//installtion permission<br><br>if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {<br>    if(!getPackageManager().canRequestPackageInstalls()){<br>      startActivityForResult(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES)<br>.setData(Uri.parse(String.format(&quot;package:%s&quot;, getPackageName()))), 1);<br>     }<br>}</pre><pre>//Storage Permission<br><br>if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {<br>                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 1);<br>            }<br><br>            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {<br>                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);<br>    }</pre><p>5. The final step is to write a function to install app / apk you just need to define the file path where apk is stored</p><pre>void installAPK(){<br><br>    String PATH = Environment.getExternalStorageDirectory() + &quot;/&quot; + &quot;apkname.apk&quot;;<br>    File file = new File(PATH);<br>    if(file.exists()) {<br>        Intent intent = new Intent(Intent.ACTION_VIEW);<br>        intent.setDataAndType(uriFromFile(getApplicationContext(), new File(PATH)), &quot;application/vnd.android.package-archive&quot;);<br>        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);<br>        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);<br>        try {<br>            getApplicationContext().startActivity(intent);<br>        } catch (ActivityNotFoundException e) {<br>            e.printStackTrace();<br>            Log.e(&quot;TAG&quot;, &quot;Error in opening the file!&quot;);<br>        }<br>    }else{<br>        Toast.makeText(getApplicationContext(),&quot;installing&quot;,Toast.LENGTH_LONG).show();<br>    }<br>}<br>Uri uriFromFile(Context context, File file) {<br>    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.N) {<br>        return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + &quot;.provider&quot;, file);<br>    } else {<br>        return Uri.fromFile(file);<br>    }<br>}</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7e39cfe22b86" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>