<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Harsh</title>
    <description>The latest articles on Forem by Harsh (@hpnightowl).</description>
    <link>https://forem.com/hpnightowl</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F256597%2F8e2bea51-b222-4a06-adbc-274d6bbfc80f.jpg</url>
      <title>Forem: Harsh</title>
      <link>https://forem.com/hpnightowl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hpnightowl"/>
    <language>en</language>
    <item>
      <title>How to setup Void IDE in Linux</title>
      <dc:creator>Harsh</dc:creator>
      <pubDate>Sun, 18 May 2025 07:53:47 +0000</pubDate>
      <link>https://forem.com/hpnightowl/how-to-setup-void-ide-in-linux-4j6f</link>
      <guid>https://forem.com/hpnightowl/how-to-setup-void-ide-in-linux-4j6f</guid>
      <description>&lt;h2&gt;
  
  
  What Is Void IDE?
&lt;/h2&gt;

&lt;p&gt;Void IDE is an open-source alternative to Cursor, licensed under Apache 2.0 and hosted on GitHub. It was born as a fork of the VS Code codebase, retaining full extension and theme compatibility so you can migrate seamlessly. Void ships with &lt;strong&gt;Agent Mode&lt;/strong&gt; (full read/write file operations), &lt;strong&gt;Gather Mode&lt;/strong&gt; (read-only code exploration), and standard AI-powered completions—all locally controlled.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before installing Void IDE, make sure you have the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ubuntu 18.04+&lt;/strong&gt; (Desktop or Server).&lt;/li&gt;
&lt;li&gt;A user with &lt;strong&gt;sudo&lt;/strong&gt; privileges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;200 MB&lt;/strong&gt; of free disk space for the IDE itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; installed and running locally for LLM hosting:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install via Homebrew:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; brew &lt;span class="nb"&gt;install &lt;/span&gt;ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Or via the official Linux script:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; curl https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify and pull a model (e.g., &lt;code&gt;llama2&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ollama pull llama2
 ollama run llama2 &lt;span class="nt"&gt;--prompt&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure the Ollama daemon is running:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ollama daemon start
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Install on Ubuntu
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt; the latest Linux &lt;code&gt;.deb&lt;/code&gt; from GitHub Releases (e.g. &lt;code&gt;void_1.99.30034_amd64.deb&lt;/code&gt;). &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Download Link: &lt;a href="https://github.com/voideditor/binaries/releases" rel="noopener noreferrer"&gt;https://github.com/voideditor/binaries/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/cRX9zqk9qGo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install&lt;/strong&gt; with APT to auto-resolve dependencies:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd&lt;/span&gt; ~/Downloads
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; ./void_1.99.30034_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Void vs. Cursor AI: Pros &amp;amp; Cons
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Void IDE&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Cursor AI&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Source &amp;amp; Privacy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fully open source under Apache 2.0—audit the code, self-host your models, and keep all data in your infrastructure.&lt;/td&gt;
&lt;td&gt;Proprietary; code and prompts typically go through Cursor’s managed service unless you opt—and pay—for enterprise hosting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model Flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Connect &lt;strong&gt;any&lt;/strong&gt; LLM—open-source or commercial—without vendor lock-in.&lt;/td&gt;
&lt;td&gt;Provides a curated frontier-model backend with SLA guarantees but limited ability to swap in your own LLMs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free to use, no subscription or usage fees.&lt;/td&gt;
&lt;td&gt;Subscription-based; costs scale with usage and seats, potentially expensive for heavy users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ecosystem&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leverages the vast VS Code extension marketplace, but smaller community around AI-specific plugins.&lt;/td&gt;
&lt;td&gt;Rich, first-party integrations (Composer, diff viewers, built-in agents) with deeper AI features out of the box.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stability &amp;amp; Polish&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Early-stage UX; occasional rough edges and less extensive documentation.&lt;/td&gt;
&lt;td&gt;Mature, polished UI and streamlined onboarding optimized for rapid productivity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Community-driven roadmaps; rapid iteration on GitHub with weekly contributor meetups.&lt;/td&gt;
&lt;td&gt;Backed by Anysphere with deep pockets (recent \$9 bn valuation); robust support but less direct community control.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Windows is Easy just install MSI package from github release and one click install.&lt;/p&gt;




&lt;p&gt;Happy Coding 🤘&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>voidide</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Android Automotive: Customizing System Bars with Runtime Resource Overlays</title>
      <dc:creator>Harsh</dc:creator>
      <pubDate>Thu, 19 Dec 2024 06:18:41 +0000</pubDate>
      <link>https://forem.com/hpnightowl/android-automotive-customizing-system-bars-with-runtime-resource-overlays-44fn</link>
      <guid>https://forem.com/hpnightowl/android-automotive-customizing-system-bars-with-runtime-resource-overlays-44fn</guid>
      <description>&lt;p&gt;As Android Automotive continues to evolve, automotive manufacturers often need to customize their vehicle's user interface to match their brand identity and user experience requirements. One crucial aspect of this customization is the system bar configuration. In this article, we'll explore how to customize system bars using Runtime Resource Overlays (RRO) in Android Automotive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding System Bars in Android Automotive
&lt;/h2&gt;

&lt;p&gt;Before diving into the customization process, let's understand what system bars are in the context of Android Automotive. Unlike regular Android devices that typically have a status bar at the top and navigation bar at the bottom, Android Automotive supports up to four system bars:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top System Bar&lt;/li&gt;
&lt;li&gt;Left System Bar&lt;/li&gt;
&lt;li&gt;Right System Bar&lt;/li&gt;
&lt;li&gt;Bottom System Bar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these bars can serve different purposes and can be configured independently to create a unified user experience that matches your vehicle's interface requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Resource Overlays (RRO): The Customization Tool
&lt;/h2&gt;

&lt;p&gt;Runtime Resource Overlays provide a powerful mechanism to modify resources at runtime without changing the original application's code. This is particularly useful for system UI customization in Android Automotive, as it allows manufacturers to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable or disable specific system bars&lt;/li&gt;
&lt;li&gt;Configure the type and behavior of each bar&lt;/li&gt;
&lt;li&gt;Set z-order for overlapping bars&lt;/li&gt;
&lt;li&gt;Customize the orientation of status icons&lt;/li&gt;
&lt;li&gt;Control how bars behave during immersive mode&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Implementation Guide
&lt;/h2&gt;

&lt;p&gt;Let's walk through the process of creating an RRO to customize system bars.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Project Structure
&lt;/h3&gt;

&lt;p&gt;First, create a project structure that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── Android.bp
├── AndroidManifest.xml
└── res
    ├── values
    │   └── config.xml
    └── xml
        └── car_sysui_overlays.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Define the Build Configuration
&lt;/h3&gt;

&lt;p&gt;Create an &lt;code&gt;Android.bp&lt;/code&gt; file to define your RRO package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package {
    default_applicable_licenses: ["Android-Apache-2.0"],
}

runtime_resource_overlay {
    name: "CarSystemUICustomRRO",
    resource_dirs: ["res"],
    manifest: "AndroidManifest.xml",
    system_ext_specific: true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Configure the Manifest
&lt;/h3&gt;

&lt;p&gt;Create an &lt;code&gt;AndroidManifest.xml&lt;/code&gt; that targets SystemUI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;manifest&lt;/span&gt; &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;
          &lt;span class="na"&gt;package=&lt;/span&gt;&lt;span class="s"&gt;"com.android.systemui.rro.custom"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;overlay&lt;/span&gt;
        &lt;span class="na"&gt;android:targetPackage=&lt;/span&gt;&lt;span class="s"&gt;"com.android.systemui"&lt;/span&gt;
        &lt;span class="na"&gt;android:isStatic=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
        &lt;span class="na"&gt;android:resourcesMap=&lt;/span&gt;&lt;span class="s"&gt;"@xml/car_sysui_overlays"&lt;/span&gt;
    &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/manifest&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Define System Bar Configuration
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;config.xml&lt;/code&gt; in the &lt;code&gt;res/values&lt;/code&gt; directory to define your system bar configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;resources&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Enable/disable system bars --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bool&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_enableTopSystemBar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/bool&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bool&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_enableLeftSystemBar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/bool&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bool&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_enableRightSystemBar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/bool&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bool&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_enableBottomSystemBar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/bool&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Define system bar types --&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- STATUS_BAR = 0 --&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- NAVIGATION_BAR = 1 --&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- STATUS_BAR_EXTRA = 2 --&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- NAVIGATION_BAR_EXTRA = 3 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;integer&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_leftSystemBarType"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/integer&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Configure z-order --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;integer&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_leftSystemBarZOrder"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="nt"&gt;&amp;lt;/integer&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Set status icon orientation (0 = horizontal, 1 = vertical) --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;integer&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"config_statusIconLayoutOrientation"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/integer&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/resources&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Create Resource Mapping
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;car_sysui_overlays.xml&lt;/code&gt; in the &lt;code&gt;res/xml&lt;/code&gt; directory to map your configurations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;overlay&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;
        &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"bool/config_enableLeftSystemBar"&lt;/span&gt;
        &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"@bool/config_enableLeftSystemBar"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;
        &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"integer/config_leftSystemBarType"&lt;/span&gt;
        &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"@integer/config_leftSystemBarType"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;
        &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"integer/config_leftSystemBarZOrder"&lt;/span&gt;
        &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"@integer/config_leftSystemBarZOrder"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;item&lt;/span&gt;
        &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"integer/config_statusIconLayoutOrientation"&lt;/span&gt;
        &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"@integer/config_statusIconLayoutOrientation"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/overlay&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Understanding Key Configuration Options
&lt;/h2&gt;

&lt;p&gt;Let's break down some important configuration options:&lt;/p&gt;

&lt;h3&gt;
  
  
  System Bar Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;STATUS_BAR (0)&lt;/code&gt;: Displays status information like time, battery, etc.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NAVIGATION_BAR (1)&lt;/code&gt;: Contains navigation controls&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;STATUS_BAR_EXTRA (2)&lt;/code&gt;: Additional status information&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NAVIGATION_BAR_EXTRA (3)&lt;/code&gt;: Additional navigation controls&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Z-Order Configuration
&lt;/h3&gt;

&lt;p&gt;The z-order configuration is crucial when you have multiple system bars that might overlap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Values below 10 place the bar behind Heads-Up Notifications (HUNs)&lt;/li&gt;
&lt;li&gt;Values 10 and above place the bar in front of HUNs&lt;/li&gt;
&lt;li&gt;Overlapping bars must have different z-orders to prevent runtime exceptions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Immersive Mode Behavior
&lt;/h3&gt;

&lt;p&gt;You can control how system bars behave during immersive mode using &lt;code&gt;config_systemBarPersistency&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;0 (non_immersive)&lt;/code&gt;: Show all system bars&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;1 (immersive)&lt;/code&gt;: Hide all bars&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2 (immersive_with_nav)&lt;/code&gt;: Show navigation bar but hide status bar&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Practices and Considerations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Ensure your system bar configuration aligns with your overall UI/UX strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Remember that each enabled system bar consumes system resources and screen real estate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: Thoroughly test your configuration across different screen sizes and orientations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Z-Order Conflicts&lt;/strong&gt;: Always assign unique z-orders to overlapping system bars to prevent runtime exceptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Icon Orientation&lt;/strong&gt;: Choose the icon orientation that best matches your system bar placement (vertical for side bars, horizontal for top/bottom bars).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Runtime Resource Overlays provide a powerful and flexible way to customize system bars in Android Automotive. By following this guide and understanding the various configuration options, you can create a unique and cohesive user interface that meets your specific requirements while maintaining system stability and performance.&lt;/p&gt;

&lt;p&gt;Remember that system bar customization is just one aspect of creating a great automotive UI. Consider how your system bar configuration integrates with other UI elements and contributes to the overall user experience of your vehicle's infotainment system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Implementation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://github.com/hpnightowl/SystemUISystembarsAAOS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>aaos</category>
      <category>systemui</category>
      <category>androiddev</category>
    </item>
    <item>
      <title>Adding Custom Vendor Packages to Android Source Code: A Complete Guide</title>
      <dc:creator>Harsh</dc:creator>
      <pubDate>Sun, 01 Dec 2024 17:55:46 +0000</pubDate>
      <link>https://forem.com/hpnightowl/adding-custom-vendor-packages-to-android-source-code-a-complete-guide-3k9p</link>
      <guid>https://forem.com/hpnightowl/adding-custom-vendor-packages-to-android-source-code-a-complete-guide-3k9p</guid>
      <description>&lt;p&gt;As Android developers, we often need to integrate custom applications and packages into the Android source code. This guide will walk you through the process of adding a custom vendor and its associated packages to your Android source tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Directory Structure Setup
&lt;/h2&gt;

&lt;p&gt;First, create the following directory structure in your Android source code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor/
└── oem/
    └── packages/
        └── applications/
            ├── Android.bp
            ├── packages.mk
            ├── permissions/
            │   └── com.sample.app.xml
            └── prebuilts/
                ├── SampleApp.apk
                ├── SampleAppWithPermission.apk
                └── SampleLauncher.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration Files
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Android.bp
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Android.bp&lt;/code&gt; file defines how your applications should be built and installed. Here's a breakdown of different types of app configurations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Basic Launcher Application
android_app_import {
    name: "SampleLauncher",
    privileged: true,
    apk: "prebuilts/SampleLauncher.apk",
    overrides: [
        "Launcher2",
        "Launcher3",
        "Launcher3QuickStep",
        "CarLauncher",
        "SnapdragonLauncher",
    ],
    presigned: true,
}

// Simple System Extension Application
android_app_import {
    name: "SampleApp",
    system_ext_specific: true,
    apk: "prebuilts/SampleApp.apk",
    optional_uses_libs: [
        "androidx.window.extensions",
        "androidx.window.sidecar",
    ],
    presigned: true,
}

// Privileged Application with Permissions
android_app_import {
    name: "SampleAppWithPermission",
    system_ext_specific: true,
    privileged: true,
    optional_uses_libs: [
        "androidx.window.extensions",
        "androidx.window.sidecar",
    ],
    apk: "prebuilts/SampleAppWithPermission.apk",
    required: ["privapp_whitelist_com.sample.app.xml"],
}

// Permission Configuration
prebuilt_etc {
    name: "privapp_whitelist_com.sample.app.xml",
    system_ext_specific: true,
    src: "permissions/com.sample.app.xml",
    sub_dir: "permissions",
    filename_from_src: true,
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. packages.mk
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;packages.mk&lt;/code&gt; file to define which packages should be included in the build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="c"&gt;# Packages
&lt;/span&gt;&lt;span class="nv"&gt;PRODUCT_PACKAGES&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    SampleLauncher &lt;span class="se"&gt;\&lt;/span&gt;
    SampleApp &lt;span class="se"&gt;\&lt;/span&gt;
    SampleAppWithPermission
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Permission XML
&lt;/h3&gt;

&lt;p&gt;For applications requiring privileged permissions, create a permission XML file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;permissions&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;privapp-permissions&lt;/span&gt; &lt;span class="na"&gt;package=&lt;/span&gt;&lt;span class="s"&gt;"com.sample.app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;permission&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"android.permission.CAPTURE_AUDIO_OUTPUT"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/privapp-permissions&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/permissions&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Integration with Build System
&lt;/h2&gt;

&lt;p&gt;To integrate your custom vendor packages into the Android build system, you need to include the packages.mk file in your device's product configuration. There are several ways to do this depending on your setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For standard handheld devices, add this line to &lt;code&gt;build/make/target/product/handheld_product.mk&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="k"&gt;include&lt;/span&gt;&lt;span class="sx"&gt; vendor/oem/packages/applications/packages.mk&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;For Qualcomm-based devices, you might need to add it to:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;device/qcom/qssi/qssi.mk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;device/qcom/qssi/qssi_au.mk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Or your specific device's product makefile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Important Notes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;APK Signing&lt;/strong&gt;: Ensure your APKs are properly signed before adding them to the prebuilts directory. The &lt;code&gt;presigned: true&lt;/code&gt; flag indicates that the APK is already signed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Permissions&lt;/strong&gt;: For privileged applications, make sure to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;privileged: true&lt;/code&gt; in the Android.bp configuration&lt;/li&gt;
&lt;li&gt;Create appropriate permission XML files&lt;/li&gt;
&lt;li&gt;Reference the permission XML in the &lt;code&gt;required&lt;/code&gt; field&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;System Extensions&lt;/strong&gt;: Use &lt;code&gt;system_ext_specific: true&lt;/code&gt; for apps that should be installed in the system_ext partition.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Override Existing Apps&lt;/strong&gt;: Use the &lt;code&gt;overrides&lt;/code&gt; array to replace existing system applications, as shown in the SampleLauncher configuration.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By following this guide, you can properly integrate custom vendor packages into your Android source code. Remember to test thoroughly and ensure all permissions are properly configured before building your system image.&lt;/p&gt;

&lt;p&gt;Remember that the exact integration path might vary depending on your specific device tree and BSP (Board Support Package) configuration. Always consult your device's documentation for the most appropriate location to include custom packages.&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Building Android Automotive OS: A Beginner-Friendly Guide</title>
      <dc:creator>Harsh</dc:creator>
      <pubDate>Sun, 09 Jun 2024 22:01:27 +0000</pubDate>
      <link>https://forem.com/hpnightowl/building-android-automotive-os-a-beginner-friendly-guide-4f67</link>
      <guid>https://forem.com/hpnightowl/building-android-automotive-os-a-beginner-friendly-guide-4f67</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Android Automotive OS is a version of Android tailored for in-vehicle use. It provides a seamless experience for drivers and passengers by integrating various automotive functions with Android applications. This guide will walk you through the process of building Android Automotive OS from scratch, covering all the necessary tools, setup, and steps required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting, ensure you have the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Computer with Linux or macOS&lt;/strong&gt;: Building Android Automotive OS is most compatible with Linux-based systems or macOS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adequate System Resources&lt;/strong&gt;: At least 16GB of RAM and 400GB of free disk space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internet Connection&lt;/strong&gt;: To download necessary tools and dependencies.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tools and Software Required
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Java Development Kit (JDK)&lt;/strong&gt;: Java 8 or higher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo Tool&lt;/strong&gt;: To manage the Android source code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt;: Version control system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AOSP (Android Open Source Project) Source Code&lt;/strong&gt;: Base source code for Android.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android Studio&lt;/strong&gt;: Latest stable version.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step-by-Step Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Set Up Your Environment
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Install Java Development Kit (JDK)
&lt;/h4&gt;

&lt;p&gt;First, install the JDK. Open a terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;openjdk-8-jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Install Required Packages
&lt;/h4&gt;

&lt;p&gt;For Ubuntu 18.04 or later, install the necessary packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Install Git
&lt;/h4&gt;

&lt;p&gt;Ensure Git is installed by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Install Repo Tool
&lt;/h4&gt;

&lt;p&gt;Download the Repo tool and make it executable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/bin/repo
&lt;span class="nb"&gt;chmod &lt;/span&gt;a+x ~/bin/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add Repo to your PATH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/bin:&lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Download the Android Source Code
&lt;/h3&gt;

&lt;p&gt;Create a directory for your Android build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/android-automotive
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/android-automotive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize the Repo with the Android source code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;repo init &lt;span class="nt"&gt;-u&lt;/span&gt; https://android.googlesource.com/platform/manifest &lt;span class="nt"&gt;-b&lt;/span&gt; android-13.0.0_r83
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: you can use any branch or tag which will be latest and depending on the project you are building like &lt;code&gt;android-13.0.0_r83&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Synchronize the Repo to download the source code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;repo &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Configure the Build
&lt;/h3&gt;

&lt;p&gt;Set up the environment for the build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source &lt;/span&gt;build/envsetup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose a target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lunch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select an appropriate target, such as &lt;code&gt;aosp_car_x86_64-userdebug&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Build the Android Automotive OS
&lt;/h3&gt;

&lt;p&gt;Start the build process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make &lt;span class="nt"&gt;-j&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;nproc&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This process can take several hours depending on your system's performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Flash the Build to a Device or Emulator
&lt;/h3&gt;

&lt;p&gt;Once the build is complete, you can flash it to an Android Automotive compatible device or run it on an emulator.&lt;/p&gt;

&lt;p&gt;the below command will directly launch the emulator&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;emulator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Flash to Device
&lt;/h4&gt;

&lt;p&gt;Connect your device and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;adb reboot bootloader
fastboot flashall &lt;span class="nt"&gt;-w&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Run on Emulator
&lt;/h4&gt;

&lt;p&gt;To create an AVD (Android Virtual Device) for Automotive:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Android Studio.&lt;/li&gt;
&lt;li&gt;Go to AVD Manager.&lt;/li&gt;
&lt;li&gt;Create a new AVD with an automotive system image.&lt;/li&gt;
&lt;li&gt;Start the emulator.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building Android Automotive OS from scratch involves several steps, from setting up your environment to flashing the OS onto a device or emulator. By following this guide, you can get started with developing for the automotive platform and exploring its features.&lt;/p&gt;

&lt;p&gt;For more detailed information, refer to the official &lt;a href="https://source.android.com/docs/automotive"&gt;Android Automotive OS documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://source.android.com/"&gt;Android Open Source Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/docs"&gt;Android Developer Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://source.android.com/docs/automotive"&gt;Android Automotive OS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to leave comments or questions below, and I'll be happy to help you through the process!&lt;/p&gt;

</description>
      <category>aaos</category>
      <category>android</category>
      <category>androiddev</category>
      <category>aosp</category>
    </item>
    <item>
      <title>Environment Setup: Ruby on Rails: Platform : Windows</title>
      <dc:creator>Harsh</dc:creator>
      <pubDate>Thu, 17 Feb 2022 10:27:10 +0000</pubDate>
      <link>https://forem.com/hpnightowl/environment-setup-ruby-on-rails-platform-windows-409l</link>
      <guid>https://forem.com/hpnightowl/environment-setup-ruby-on-rails-platform-windows-409l</guid>
      <description>&lt;p&gt;Environment setup of Ruby on Rails is a headache for newbie developers so let's how we can easily establish a link between the software and new developer. Just sit back and relax and follow :P ! Without wasting more time let's just get started&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 1:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install Ruby installer from &lt;a href="https://rubyinstaller.org/downloads/"&gt;https://rubyinstaller.org/downloads/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl4kmnl3ctc55ojts7fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl4kmnl3ctc55ojts7fq.png" alt="Image description" width="640" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since I have x64 Windows machine hence I will be downloading that.&lt;/p&gt;

&lt;p&gt;You can check yours using Windows &lt;br&gt;
&lt;strong&gt;Settings &amp;gt; System &amp;gt; Scroll Down&lt;/strong&gt; ( About) Your will see your System type as shown below : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshqgl87j01w8xplr2wgw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshqgl87j01w8xplr2wgw.png" alt="Image description" width="526" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What the Devkit version ?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RubyInstaller uses the MSYS2 toolchain as its development kit. It is bundled into the Ruby+Devkit installer version as a selectable component, so that no additional downloads/installs are required. It’s possible to share one Devkit among multiple versions of Ruby. MSYS2 is required in order to build native C/C++ extensions for Ruby and is necessary for Ruby on Rails&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  source: &lt;a href="https://rubyinstaller.org/"&gt;https://rubyinstaller.org/&lt;/a&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;STEP 2:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open Installer install it as the normal application no need to interfere the default configuration just next next LOL!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP 3:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Setting up Environmental variable:&lt;/p&gt;

&lt;p&gt;Search Environmental Variable in Start menu / Search Bar of Windows&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmwocrw3ibump1356gan.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmwocrw3ibump1356gan.png" alt="Image description" width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will open the window as shown below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yzuo17vwaw5wipux4iw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yzuo17vwaw5wipux4iw.png" alt="Image description" width="547" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on Environment Variable (at right down corner) as shown in image below: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupp5kn94xs2vvby5of7o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupp5kn94xs2vvby5of7o.png" alt="Image description" width="547" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now to check it is successfully installed open command line (cmd)&lt;/p&gt;

&lt;p&gt;(Search cmd in Start menu/Search bar)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dg8chn3k1tbcemwi5wj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dg8chn3k1tbcemwi5wj.png" alt="Image description" width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check this line it should contain the path of your ruby version mine is ( C:\Ruby30-x64\bin) if it is not there in your add it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno396memrjgh4viimsr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno396memrjgh4viimsr5.png" alt="Image description" width="707" height="777"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Type command &lt;code&gt;ruby --version&lt;/code&gt; you will get the version name if installed successfully Kudos! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu26eds8pbt1gf540wdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu26eds8pbt1gf540wdk.png" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To setup binaries follow the steps here &lt;a href="https://www.msys2.org/"&gt;https://www.msys2.org/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;download msys2 and as per instruction given in msys2 website do it. Now that you have done that all the binaries are installed we are very close to our missing Here after step 7 do type the following command in same terminal) &lt;/p&gt;

&lt;p&gt;&lt;code&gt;pacman -S mingw-w64-x86_64-yarn&lt;br&gt;
pacman -S mingw-w64-x86_64-nodejs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38gxtmm8gprnfazh8tt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38gxtmm8gprnfazh8tt7.png" alt="Image description" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
Nodejs and yarn are required for Webpacker and msys2 since both &lt;/p&gt;

&lt;p&gt;Now we need to Install Rails :&lt;/p&gt;

&lt;p&gt;Open cmd type below command &lt;/p&gt;

&lt;p&gt;&lt;code&gt;gem install rails&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to check if successfully installed type &lt;code&gt;rails --version&lt;/code&gt; &lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>windows</category>
      <category>setup</category>
    </item>
    <item>
      <title>Build Ionic framework App Source and Artifact Android Apk Action</title>
      <dc:creator>Harsh</dc:creator>
      <pubDate>Fri, 11 Sep 2020 14:03:23 +0000</pubDate>
      <link>https://forem.com/hpnightowl/ionic-framework-build-and-release-android-apk-action-4mpp</link>
      <guid>https://forem.com/hpnightowl/ionic-framework-build-and-release-android-apk-action-4mpp</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;his GitHub Action "Get Android Apk" is designed to automate the developers work to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure the Java,Node.js,Ionic cli&lt;/li&gt;
&lt;li&gt;Build from latest Ionic Source and make android source&lt;/li&gt;
&lt;li&gt;Then Build the Android app from latest Source&lt;/li&gt;
&lt;li&gt;Upload The build to the the Artifact for Testing on every changes done in master branch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Submission Category:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  - Maintainer Must-Haves, DIY Deployments
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Get Android APK

on: [push, pull_request]

jobs:
  build:
    name: Build APK
    runs-on: ubuntu-latest
    steps:
      - name: checkout source
        uses: actions/checkout@v2

      - name: setup java sdk
        uses: actions/setup-java@v1
        with:
          java-version: '9.0.4'

      - name: setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 13.x

      - name: Install Cordova
        run: npm install -g cordova

      - name: Install Ionic cli
        run: npm install -g @ionic/cli

      - name: Install app dependencies
        run: npm install

      - name: build the app
        run: npm run build

      - name: remove existing folder if there 
        run: rm -rf {path of your android folder dir.} # eg. /home/runner/work/Bookie/Bookie/android

      - name: Add to android
        run: npx cap add android

      - name: sync with source
        run: npx cap sync

      - name: Generate the Android App Apk
        working-directory: {working android directory} # eg. /home/runner/work/Bookie/Bookie/android 
        run: bash ./gradlew assembleDebug --stacktrace

      - name: Upload dev APK
        uses: actions/upload-artifact@v1
        with:
          name: app-dev
          path: android/app/build/outputs/apk/debug/app-debug.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/hpnightowl"&gt;
        hpnightowl
      &lt;/a&gt; / &lt;a href="https://github.com/hpnightowl/Bookie"&gt;
        Bookie
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Pocket Alternative for Personal Use
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/hpnightowl/Bookie/workflows/Get%20Android%20APK/badge.svg"&gt;&lt;img src="https://github.com/hpnightowl/Bookie/workflows/Get%20Android%20APK/badge.svg" alt="Get Android APK"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1dd14e3049eb15c15fc20a35ed9cd58b04b75e2b402aa14ca722050d532635ae/68747470733a2f2f7777772e636f6c657469762e636f6d2f7374617469632f33356236613739666561346137323839616362363739366364346164303562342f38643364652f616e64726f69642d6769746875622d616374696f6e732d73657475702d696d6167652e6a7067"&gt;&lt;img src="https://camo.githubusercontent.com/1dd14e3049eb15c15fc20a35ed9cd58b04b75e2b402aa14ca722050d532635ae/68747470733a2f2f7777772e636f6c657469762e636f6d2f7374617469632f33356236613739666561346137323839616362363739366364346164303562342f38643364652f616e64726f69642d6769746875622d616374696f6e732d73657475702d696d6167652e6a7067" alt="Flutter action" width="800"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt; Ionic Android APK Generator Action &lt;/h3&gt;
&lt;/div&gt;




&lt;ul&gt;
&lt;li&gt;This repository is dedicated to a GitHub Action for generating a new apk and pushing it to the repository, whenever changes are made in master branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Usage&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;Example Workflow file&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;An example workflow to set up your Ionic Android apk generator action quickly.&lt;/h3&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Get Android APK&lt;/span&gt;
&lt;span class="pl-ent"&gt;on&lt;/span&gt;: &lt;span class="pl-s"&gt;[push, pull_request]&lt;/span&gt;

&lt;span class="pl-ent"&gt;jobs&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;build&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Build APK&lt;/span&gt;
    &lt;span class="pl-ent"&gt;runs-on&lt;/span&gt;: &lt;span class="pl-s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="pl-ent"&gt;steps&lt;/span&gt;:
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;checkout source&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@v2&lt;/span&gt;

      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;setup java sdk&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/setup-java@v1&lt;/span&gt;
        &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;java-version&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;9.0.4&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
          
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;setup Node.js&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/setup-node@v1&lt;/span&gt;
        &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;node-version&lt;/span&gt;: &lt;span class="pl-s"&gt;13.x&lt;/span&gt;

      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Install Cordova&lt;/span&gt;
        &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;npm install -g cordova&lt;/span&gt;

      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Install Ionic cli&lt;/span&gt;
        &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;npm install -g @ionic/cli&lt;/span&gt;

      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Install app dependencies&lt;/span&gt;
        &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;npm install&lt;/span&gt;

      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;build the app&lt;/span&gt;
        &lt;span class="pl-ent"&gt;run&lt;/span&gt;: &lt;span class="pl-s"&gt;npm run&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/hpnightowl/Bookie"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/actions"&gt;
        actions
      &lt;/a&gt; / &lt;a href="https://github.com/actions/checkout"&gt;
        checkout
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Action for checking out a repo
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/actions/checkout/actions/workflows/test.yml"&gt;&lt;img src="https://github.com/actions/checkout/actions/workflows/test.yml/badge.svg" alt="Build and Test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Checkout V4&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This action checks-out your repository under &lt;code&gt;$GITHUB_WORKSPACE&lt;/code&gt;, so your workflow can access it.&lt;/p&gt;
&lt;p&gt;Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set &lt;code&gt;fetch-depth: 0&lt;/code&gt; to fetch all history for all branches and tags. Refer &lt;a href="https://docs.github.com/actions/using-workflows/events-that-trigger-workflows"&gt;here&lt;/a&gt; to learn which commit &lt;code&gt;$GITHUB_SHA&lt;/code&gt; points to for different events.&lt;/p&gt;
&lt;p&gt;The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set &lt;code&gt;persist-credentials: false&lt;/code&gt; to opt-out.&lt;/p&gt;
&lt;p&gt;When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;What's new&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Please refer to the &lt;a href="https://github.com/actions/checkout/releases/latest"&gt;release page&lt;/a&gt; for the latest release notes.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Usage&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;- &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@v4&lt;/span&gt;
  &lt;span class="pl-ent"&gt;with&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Repository name with owner. For example, actions/checkout&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Default: ${{ github.repository }}&lt;/span&gt;
    &lt;span class="pl-ent"&gt;repository&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;

    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; The branch, tag or SHA to&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/actions/checkout"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/actions"&gt;
        actions
      &lt;/a&gt; / &lt;a href="https://github.com/actions/setup-java"&gt;
        setup-java
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Set up your GitHub Actions workflow with a specific version of Java
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Setup Java&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/actions/setup-java/actions/workflows/basic-validation.yml"&gt;&lt;img src="https://github.com/actions/setup-java/actions/workflows/basic-validation.yml/badge.svg?branch=main" alt="Basic validation"&gt;&lt;/a&gt;
&lt;a href="https://github.com/actions/setup-java/actions/workflows/e2e-versions.yml"&gt;&lt;img src="https://github.com/actions/setup-java/actions/workflows/e2e-versions.yml/badge.svg?branch=main" alt="Validate Java e2e"&gt;&lt;/a&gt;
&lt;a href="https://github.com/actions/setup-java/actions/workflows/e2e-cache.yml"&gt;&lt;img src="https://github.com/actions/setup-java/actions/workflows/e2e-cache.yml/badge.svg?branch=main" alt="Validate cache"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;setup-java&lt;/code&gt; action provides the following functionality for GitHub Actions runners:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Downloading and setting up a requested version of Java. See &lt;a href="https://github.com/actions/setup-java#usage"&gt;Usage&lt;/a&gt; for a list of supported distributions.&lt;/li&gt;
&lt;li&gt;Extracting and caching custom version of Java from a local file.&lt;/li&gt;
&lt;li&gt;Configuring runner for publishing using Apache Maven.&lt;/li&gt;
&lt;li&gt;Configuring runner for publishing using Gradle.&lt;/li&gt;
&lt;li&gt;Configuring runner for using GPG private key.&lt;/li&gt;
&lt;li&gt;Registering problem matchers for error output.&lt;/li&gt;
&lt;li&gt;Caching dependencies managed by Apache Maven.&lt;/li&gt;
&lt;li&gt;Caching dependencies managed by Gradle.&lt;/li&gt;
&lt;li&gt;Caching dependencies managed by sbt.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://maven.apache.org/guides/mini/guide-using-toolchains.html" rel="nofollow"&gt;Maven Toolchains declaration&lt;/a&gt; for specified JDK versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This action allows you to work with Java and Scala projects.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;V2 vs V1&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;V2 supports custom distributions and provides support for Azul Zulu OpenJDK, Eclipse Temurin and AdoptOpenJDK  out of the box. V1 supports only Azul Zulu OpenJDK.&lt;/li&gt;
&lt;li&gt;V2 requires you to specify distribution along with the version. V1 defaults to Azul Zulu OpenJDK, only version input is required…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/actions/setup-java"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/actions"&gt;
        actions
      &lt;/a&gt; / &lt;a href="https://github.com/actions/setup-node"&gt;
        setup-node
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Set up your GitHub Actions workflow with a specific version of node.js
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;setup-node&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/actions/setup-node/actions/workflows/basic-validation.yml"&gt;&lt;img src="https://github.com/actions/setup-node/actions/workflows/basic-validation.yml/badge.svg" alt="basic-validation"&gt;&lt;/a&gt;
&lt;a href="https://github.com/actions/setup-node/actions/workflows/versions.yml"&gt;&lt;img src="https://github.com/actions/setup-node/actions/workflows/versions.yml/badge.svg" alt="versions"&gt;&lt;/a&gt;
&lt;a href="https://github.com/actions/setup-node/actions/workflows/e2e-cache.yml"&gt;&lt;img src="https://github.com/actions/setup-node/actions/workflows/e2e-cache.yml/badge.svg?branch=main" alt="e2e-cache"&gt;&lt;/a&gt;
&lt;a href="https://github.com/actions/setup-node/actions/workflows/proxy.yml"&gt;&lt;img src="https://github.com/actions/setup-node/actions/workflows/proxy.yml/badge.svg" alt="proxy"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This action provides the following functionality for GitHub Actions users:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optionally downloading and caching distribution of the requested Node.js version, and adding it to the PATH&lt;/li&gt;
&lt;li&gt;Optionally caching npm/yarn/pnpm dependencies&lt;/li&gt;
&lt;li&gt;Registering problem matchers for error output&lt;/li&gt;
&lt;li&gt;Configuring authentication for GPR or npm&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;See &lt;a href="https://github.com/actions/setup-nodeaction.yml"&gt;action.yml&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;- &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/setup-node@v4&lt;/span&gt;
  &lt;span class="pl-ent"&gt;with&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Version Spec of the version to use in SemVer notation.&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; It also emits such aliases as lts, latest, nightly and canary builds&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Examples: 12.x, 10.15.1, &amp;gt;=10.15.0, lts/Hydrogen, 16-nightly, latest, node&lt;/span&gt;
    &lt;span class="pl-ent"&gt;node-version&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;

    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; File containing the version Spec of the version to use.  Examples: package.json, .nvmrc, .node-version, .tool-versions.&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; If node-version and node-version-file are both provided the action will use version from node-version. &lt;/span&gt;
    &lt;span class="pl-ent"&gt;node-version-file&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;

    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Set this option if you want the action to check for the latest available version &lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; that satisfies the version spec.&lt;/span&gt;
    &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; It will only&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/actions/setup-node"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Made with ❤️ by hpnightowl&lt;/p&gt;

</description>
      <category>actionshackathon</category>
    </item>
  </channel>
</rss>
