<?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"><channel><title><![CDATA[Abhishek Anand's blog]]></title><description><![CDATA[Trust me, I'm a software engineer]]></description><link>https://blog.abhishekanandok.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1735449025715/fc220951-5be1-4f53-89f0-fde3c0f2e982.png</url><title>Abhishek Anand&apos;s blog</title><link>https://blog.abhishekanandok.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 05:37:24 GMT</lastBuildDate><atom:link href="https://blog.abhishekanandok.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to Convert .AAB to .APK on Windows and macOS]]></title><description><![CDATA[Introduction
When using Expo’s EAS Build, the output is an .aab (Android App Bundle) instead of an .apk. However, .apk files are often needed for local testing and sharing. In this guide, we’ll walk through how to convert .aab to .apk using simple co...]]></description><link>https://blog.abhishekanandok.com/how-to-convert-aab-to-apk-on-windows-and-macos</link><guid isPermaLink="true">https://blog.abhishekanandok.com/how-to-convert-aab-to-apk-on-windows-and-macos</guid><category><![CDATA[Expo]]></category><category><![CDATA[React Native]]></category><category><![CDATA[apk]]></category><category><![CDATA[aab]]></category><category><![CDATA[Playstore]]></category><category><![CDATA[android development]]></category><dc:creator><![CDATA[Abhishek Anand]]></dc:creator><pubDate>Thu, 13 Feb 2025 05:57:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739426138920/36cebf6a-efbe-4859-8471-1f695bce14ef.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<h2 id="heading-introduction">Introduction</h2>
<p>When using Expo’s <strong>EAS Build</strong>, the output is an <code>.aab</code> (Android App Bundle) instead of an <code>.apk</code>. However, <code>.apk</code> files are often needed for local testing and sharing. In this guide, we’ll walk through how to convert <code>.aab</code> to <code>.apk</code> using simple commands on <strong>Windows</strong> and <strong>macOS</strong>.</p>
<h2 id="heading-prerequisites">Prerequisites</h2>
<ul>
<li><p><strong>Java Development Kit (JDK)</strong> installed (for <code>bundletool.jar</code>).</p>
</li>
<li><p>The <code>.aab</code> file generated from <strong>Expo EAS Build</strong>.</p>
</li>
<li><p><strong>Android SDK (adb)</strong> installed for testing.</p>
</li>
</ul>
<h2 id="heading-step-1-download-bundletooljar">Step 1: Download <code>bundletool.jar</code></h2>
<p>Download Google's official <strong>BundleTool</strong>:<br /><a target="_blank" href="https://github.com/google/bundletool/releases/latest">👉 Download bundletool.jar</a></p>
<p>Save it to an accessible location, e.g., <strong>Downloads</strong>.</p>
<h2 id="heading-step-2-generate-the-apk-from-aab">Step 2: Generate the APK from .AAB</h2>
<p>Run the following command:</p>
<pre><code class="lang-bash">java -jar bundletool.jar build-apks --bundle=myapp.aab --output=myapp.apks --mode=universal
</code></pre>
<p>This creates a <code>.apks</code> archive containing the <code>.apk</code> file.</p>
<h2 id="heading-step-3-extract-the-apk">Step 3: Extract the APK</h2>
<p>Rename the <code>.apks</code> file to <code>.zip</code> and extract it. You’ll find your <code>.apk</code> inside the <code>universal</code> folder.</p>
<p>Alternatively, extract it via command line:</p>
<pre><code class="lang-bash">unzip myapp.apks -d myapp_apks
</code></pre>
<p>Find the APK at:</p>
<pre><code class="lang-bash">myapp_apks/universal.apk
</code></pre>
<h2 id="heading-step-4-install-the-apk-on-your-device">Step 4: Install the APK on Your Device</h2>
<p>To install the APK, connect your Android device via USB and run:</p>
<pre><code class="lang-bash">adb install myapp_apks/universal.apk
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>You’ve successfully converted an .aab to an .apk for testing! 🎉</p>
]]></content:encoded></item><item><title><![CDATA[How to Create an APK for Production Using Expo and Submit It to the Play Store]]></title><description><![CDATA[Introduction
So, you've built a fantastic React Native app with Expo, and now you're eager to publish it on the Google Play Store. But wait—how do you generate a production-ready APK? Worry not! In this guide, I'll walk you through the entire process...]]></description><link>https://blog.abhishekanandok.com/how-to-create-an-apk-for-production-using-expo-and-submit-it-to-the-play-store</link><guid isPermaLink="true">https://blog.abhishekanandok.com/how-to-create-an-apk-for-production-using-expo-and-submit-it-to-the-play-store</guid><category><![CDATA[Expo]]></category><category><![CDATA[React Native]]></category><category><![CDATA[apk]]></category><category><![CDATA[Playstore]]></category><category><![CDATA[Mobile Development]]></category><dc:creator><![CDATA[Abhishek Anand]]></dc:creator><pubDate>Thu, 13 Feb 2025 05:54:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739426008472/9cc2303f-036d-48b4-a570-0ef697ecf99d.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<h2 id="heading-introduction">Introduction</h2>
<p>So, you've built a fantastic React Native app with Expo, and now you're eager to publish it on the Google Play Store. But wait—how do you generate a production-ready APK? Worry not! In this guide, I'll walk you through the entire process step by step.</p>
<h2 id="heading-step-1-install-expo-cli-if-not-installed">Step 1: Install Expo CLI (If Not Installed)</h2>
<p>First, ensure you have <strong>Expo CLI</strong> installed. If not, run:</p>
<pre><code class="lang-bash">npm install -g expo-cli
</code></pre>
<p>Also, make sure you’re logged in to your Expo account:</p>
<pre><code class="lang-bash">expo login
</code></pre>
<h2 id="heading-step-2-configure-your-app">Step 2: Configure Your App</h2>
<p>Before generating the APK, check your <code>app.json</code> or <code>app.config.js</code> file. Update the necessary details like the app name, package name, and version.</p>
<p>Example <code>app.json</code>:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"expo"</span>: {
    <span class="hljs-attr">"name"</span>: <span class="hljs-string">"MyAwesomeApp"</span>,
    <span class="hljs-attr">"slug"</span>: <span class="hljs-string">"myawesomeapp"</span>,
    <span class="hljs-attr">"version"</span>: <span class="hljs-string">"1.0.0"</span>,
    <span class="hljs-attr">"orientation"</span>: <span class="hljs-string">"portrait"</span>,
    <span class="hljs-attr">"icon"</span>: <span class="hljs-string">"./assets/icon.png"</span>,
    <span class="hljs-attr">"android"</span>: {
      <span class="hljs-attr">"package"</span>: <span class="hljs-string">"com.yourcompany.myawesomeapp"</span>,
      <span class="hljs-attr">"versionCode"</span>: <span class="hljs-number">1</span>,
      <span class="hljs-attr">"permissions"</span>: []
    }
  }
}
</code></pre>
<p>Ensure that <code>android.package</code> is unique (matching your domain, like <code>com.yourcompany.myapp</code>).</p>
<h2 id="heading-step-3-build-the-apk-file">Step 3: Build the APK File</h2>
<p>Since Expo no longer supports <strong>“expo build:android”</strong>, you’ll need to use <strong>EAS Build</strong> instead. Run the following command:</p>
<pre><code class="lang-bash">npx expo install eas-cli
</code></pre>
<p>Then, initialize EAS:</p>
<pre><code class="lang-bash">eas build:configure
</code></pre>
<p>Now, to build an APK, use:</p>
<pre><code class="lang-bash">eas build -p android --profile preview
</code></pre>
<p>This will generate an APK for testing purposes. For a <strong>Play Store-ready</strong> build, use:</p>
<pre><code class="lang-bash">eas build -p android --profile production
</code></pre>
<p>Once the build is complete, you’ll get a <strong>download link</strong> for your APK/AAB file.</p>
<h2 id="heading-need-to-convert-aab-to-apk">Need to Convert .AAB to .APK?</h2>
<p>If you want to generate an APK from an AAB file for testing, check out <a target="_blank" href="./Convert-AAB-to-APK-on-Windows-and-macOS"><strong>this guide</strong></a>.</p>
<h2 id="heading-step-4-sign-your-apk-if-required">Step 4: Sign Your APK (If Required)</h2>
<p>Expo automatically handles signing, but if you want to manage keys manually, generate a keystore:</p>
<pre><code class="lang-bash">eas credentials
</code></pre>
<p>Follow the prompts to generate and download your keystore.</p>
<h2 id="heading-step-5-test-your-apk-on-a-physical-device">Step 5: Test Your APK on a Physical Device</h2>
<p>Download the APK file and install it on your phone:</p>
<pre><code class="lang-bash">adb install myapp.apk
</code></pre>
<p>Alternatively, share the download link generated by Expo.</p>
<h2 id="heading-step-6-submit-to-google-play-store">Step 6: Submit to Google Play Store</h2>
<h3 id="heading-1-create-a-google-play-developer-account">1. Create a Google Play Developer Account</h3>
<p>If you haven’t already, register at <a target="_blank" href="https://play.google.com/console">Google Play Console</a> (one-time fee of $25).</p>
<h3 id="heading-2-create-a-new-app">2. Create a New App</h3>
<ul>
<li><p>Click <strong>Create app</strong></p>
</li>
<li><p>Set your app name, language, and category</p>
</li>
<li><p>Choose <strong>App</strong> (not Game) and <strong>Free/Paid</strong> option</p>
</li>
</ul>
<h3 id="heading-3-upload-your-aab-file">3. Upload Your AAB File</h3>
<p>Since Google now <strong>requires AAB instead of APK</strong>, make sure you generated the <strong>AAB file</strong> (<code>--profile production</code>). Upload it under <strong>Production &gt; Create new release</strong>.</p>
<h3 id="heading-4-complete-store-listing">4. Complete Store Listing</h3>
<ul>
<li><p><strong>App Name &amp; Description</strong></p>
</li>
<li><p><strong>Screenshots</strong> (Minimum 2, for phones and tablets)</p>
</li>
<li><p><strong>Feature Graphic</strong> (1024x500 px)</p>
</li>
<li><p><strong>Privacy Policy URL</strong></p>
</li>
</ul>
<h3 id="heading-5-submit-for-review">5. Submit for Review</h3>
<p>Once everything is set, click <strong>Submit for Review</strong>. Google will review your app (typically within 2–7 days).</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Congratulations! 🎉 You've successfully created a <strong>production-ready APK</strong> (or AAB) and submitted your app to the <strong>Google Play Store</strong>. Now, grab some chai ☕ and wait for your app to go live!</p>
<p>If you found this guide helpful, share it with your fellow developers. 🚀 Happy coding!</p>
]]></content:encoded></item><item><title><![CDATA[How to Secure Your Website with SSL (The Fun Way!)]]></title><description><![CDATA[🛡️ Why You Need SSL (And Why Google Hates You Without It)
Ever visited a website and saw "Not Secure" in the address bar? That’s basically Google screaming, "RUN! THIS WEBSITE IS A SCAM!"
SSL (Secure Sockets Layer) encrypts the data between your web...]]></description><link>https://blog.abhishekanandok.com/how-to-secure-your-website-with-ssl-the-fun-way</link><guid isPermaLink="true">https://blog.abhishekanandok.com/how-to-secure-your-website-with-ssl-the-fun-way</guid><category><![CDATA[SSL]]></category><category><![CDATA[Web Security]]></category><category><![CDATA[nginx]]></category><category><![CDATA[certbot]]></category><category><![CDATA[Let's Encrypt]]></category><dc:creator><![CDATA[Abhishek Anand]]></dc:creator><pubDate>Thu, 13 Feb 2025 05:31:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739425470978/2dc3ecdd-21ce-41d9-87e4-755cb7e0f066.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<hr />
<h1 id="heading-why-you-need-ssl-and-why-google-hates-you-without-it">🛡️ Why You Need SSL (And Why Google Hates You Without It)</h1>
<p>Ever visited a website and saw <strong>"Not Secure"</strong> in the address bar? That’s basically Google screaming, <strong>"RUN! THIS WEBSITE IS A SCAM!"</strong></p>
<p>SSL (Secure Sockets Layer) encrypts the data between your website and visitors, making sure hackers can't steal login details, credit card info, or even your embarrassing search history.</p>
<p>So today, we’re <strong>going full Tony Stark</strong> and putting a <strong>protective shield</strong> (SSL) on your website. Let’s get started! 🚀</p>
<hr />
<h1 id="heading-step-1-install-certbot-your-ssl-fairy-godmother">🔧 Step 1: Install Certbot (Your SSL Fairy Godmother)</h1>
<p>Certbot is the <strong>magic tool</strong> that handles SSL setup. Run this command like a boss:</p>
<pre><code class="lang-bash">sudo apt-get install certbot python3-certbot-nginx
</code></pre>
<h3 id="heading-possible-error-command-not-found">🛑 Possible Error: "Command not found"</h3>
<p>This means <strong>your Linux system is missing the required repositories</strong>.<br />Run this first:</p>
<pre><code class="lang-bash">sudo apt update &amp;&amp; sudo apt install software-properties-common
</code></pre>
<p>Then, try installing Certbot again.</p>
<p>✅ Once installed, let’s move to the next step.</p>
<hr />
<h1 id="heading-step-2-get-your-ssl-certificate-make-google-happy">🌍 Step 2: Get Your SSL Certificate (Make Google Happy)</h1>
<p>Time to <strong>convince Google that we are a trustworthy citizen</strong>.</p>
<h3 id="heading-to-secure-your-website-abhishekanandokcomhttpabhishekanandokcom-and-wwwabhishekanandokcomhttpwwwabhishekanandokcom-run">🔹 To secure your website (<a target="_blank" href="http://abhishekanandok.com"><code>abhishekanandok.com</code></a> and <a target="_blank" href="http://www.abhishekanandok.com"><code>www.abhishekanandok.com</code></a>), run:</h3>
<pre><code class="lang-bash">sudo certbot --nginx -d abhishekanandok.com -d www.abhishekanandok.com
</code></pre>
<h3 id="heading-what-happens-next">What Happens Next?</h3>
<p>Certbot will now <strong>act like a strict visa officer</strong> and ask you:</p>
<ol>
<li><p><strong>Your Email</strong> (For SSL renewal notifications)</p>
<ul>
<li>Enter your best email unless you enjoy surprises when your SSL expires.</li>
</ul>
</li>
<li><p><strong>Agree to Terms?</strong> (<code>Y</code> for Yes, unless you want to live dangerously)</p>
</li>
<li><p><strong>Would you like to share your email?</strong> (<code>N</code> because we all get enough spam already)</p>
</li>
</ol>
<hr />
<h1 id="heading-step-3-secure-your-api-too-because-its-lonely">🤖 Step 3: Secure Your API Too (Because It’s Lonely)</h1>
<p>If you have an API (<a target="_blank" href="http://api.abhishekanandok.com"><code>api.abhishekanandok.com</code></a>), it also needs SSL to avoid <strong>angry red warnings</strong> from browsers.<br />Run this:</p>
<pre><code class="lang-bash">sudo certbot --nginx -d api.abhishekanandok.com -d www.api.abhishekanandok.com
</code></pre>
<hr />
<h1 id="heading-step-4-make-ssl-renew-automatically-so-you-can-relax">🔄 Step 4: Make SSL Renew Automatically (So You Can Relax)</h1>
<p>Let’s Encrypt SSL expires <strong>every 90 days</strong> (because they like to keep us on our toes). Instead of <strong>manually renewing it like an unpaid intern</strong>, automate it with:</p>
<pre><code class="lang-bash">sudo certbot renew --dry-run
</code></pre>
<p>If you see <strong>"Congratulations! Dry run successful!"</strong>, your SSL will renew itself <strong>like magic.</strong> ✨</p>
<h3 id="heading-possible-error-too-many-requests">🛑 Possible Error: "Too many requests"</h3>
<p>Let’s Encrypt has <strong>rate limits</strong> (because of people who abuse the system).<br />Wait for <strong>a few hours</strong> and try again.</p>
<hr />
<h1 id="heading-congratulations-youre-now-ssl-certified">🎉 Congratulations! You’re Now SSL Certified!</h1>
<p>Your website is now rocking a <strong>padlock icon</strong> and looking super professional. No more <strong>"Not Secure"</strong> warnings, and Google will <strong>finally stop judging you.</strong></p>
<p>✅ What’s Next?</p>
<ul>
<li><p>Test your SSL here: <a target="_blank" href="https://www.ssllabs.com/ssltest/">SSL Checker</a></p>
</li>
<li><p>Enjoy the trust and love of your visitors</p>
</li>
<li><p>Share this guide with friends who still live in the <strong>"HTTP dark ages"</strong></p>
</li>
</ul>
<p>Happy Securing! 🔒✨🚀</p>
]]></content:encoded></item></channel></rss>