<?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>DEV Community: princekauz</title>
    <description>The latest articles on DEV Community by princekauz (@princekauz).</description>
    <link>https://dev.to/princekauz</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4142444%2F503e484d-9c2b-4d40-ab0c-a8f80e6069de.png</url>
      <title>DEV Community: princekauz</title>
      <link>https://dev.to/princekauz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/princekauz"/>
    <language>en</language>
    <item>
      <title>How to Build a Flutter APK Without Android Studio (or Any Local SDK)</title>
      <dc:creator>princekauz</dc:creator>
      <pubDate>Fri, 25 Sep 2026 09:10:31 +0000</pubDate>
      <link>https://dev.to/princekauz/how-to-build-a-flutter-apk-without-android-studio-or-any-local-sdk-364p</link>
      <guid>https://dev.to/princekauz/how-to-build-a-flutter-apk-without-android-studio-or-any-local-sdk-364p</guid>
      <description>&lt;p&gt;Building a Flutter APK without Android Studio is the single most common wall new Flutter developers hit. Android Studio is a multi-gigabyte install that wants to own your machine, and GitHub's free CI minutes die on the first Gradle cache miss if you don't configure them perfectly. There is a shorter path, and after running it end-to-end dozens of times, here is the honest guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is even a problem
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Android Studio bundles the SDK, emulator images, platform tools and IntelliJ — 8–12 GB before your first &lt;code&gt;flutter run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;FlutterFlow's free tier doesn't let you export an APK at all (it's behind the $39/mo Basic plan)&lt;/li&gt;
&lt;li&gt;Old projects rot: Gradle 7-era code dies on modern AGP with cryptic &lt;code&gt;Your project requires a newer version of the Kotlin Gradle plugin&lt;/code&gt; errors&lt;/li&gt;
&lt;li&gt;GitHub Actions free tier can do it, but you'll burn an evening writing YAML and downloading SDKs on every cold run&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Option 1: Minimal local toolchain (no Android Studio)
&lt;/h2&gt;

&lt;p&gt;If you want to stay local but skip the IDE:&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="c"&gt;# 1. Install Flutter (this includes the Dart SDK)&lt;/span&gt;
git clone https://github.com/flutter/flutter.git &lt;span class="nt"&gt;-b&lt;/span&gt; stable &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&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;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="s2"&gt;/flutter/bin"&lt;/span&gt;

&lt;span class="c"&gt;# 2. Install ONLY the command-line Android tools&lt;/span&gt;
sdkmanager &lt;span class="s2"&gt;"platform-tools"&lt;/span&gt; &lt;span class="s2"&gt;"platforms;android-36"&lt;/span&gt; &lt;span class="s2"&gt;"build-tools;36.0.0"&lt;/span&gt;

&lt;span class="c"&gt;# 3. Accept licenses (the step everyone forgets)&lt;/span&gt;
&lt;span class="nb"&gt;yes&lt;/span&gt; | sdkmanager &lt;span class="nt"&gt;--licenses&lt;/span&gt;

&lt;span class="c"&gt;# 4. Build&lt;/span&gt;
flutter build apk &lt;span class="nt"&gt;--release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works. But you still downloaded ~2 GB of SDK, and the first build still takes 10+ minutes on a laptop. If your machine is a Chromebook, a locked-down corporate box, or a potato — read on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: Remote build services
&lt;/h2&gt;

&lt;p&gt;The idea is simple: your project goes up, a machine with the full toolchain builds it, an APK comes back.&lt;/p&gt;

&lt;p&gt;I run one of these (a free-tier service at &lt;a href="https://princekauz-flutter-apk-builder.hf.space/docs" rel="noopener noreferrer"&gt;flutter-apk-builder&lt;/a&gt;) — here's the whole flow as an API:&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="c"&gt;# import your project (any Flutter project zip)&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://princekauz-flutter-apk-builder.hf.space/api/projects/import &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"file=@my-app.zip"&lt;/span&gt;&lt;span class="c"&gt;# kick off a release build&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://princekauz-flutter-apk-builder.hf.space/api/project/my-app/build?mode=full"&lt;/span&gt;

&lt;span class="c"&gt;# poll, then download the signed APK&lt;/span&gt;
curl &lt;span class="nt"&gt;-o&lt;/span&gt; my-app-release.apk &lt;span class="s2"&gt;"https://princekauz-flutter-apk-builder.hf.space/api/download/my-app/full"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modes: &lt;code&gt;full&lt;/code&gt; (universal APK), &lt;code&gt;split&lt;/code&gt; (per-ABI APKs — smaller downloads), &lt;code&gt;appbundle&lt;/code&gt; (AAB for Play Store).&lt;/p&gt;

&lt;p&gt;The toolchain underneath is Gradle 9.x / AGP 9.x / Kotlin 2.x with a &lt;code&gt;compileSdk 36&lt;/code&gt; override registered before dependency evaluation — which, incidentally, is the fix for most "my project stopped building" errors from the last two years of Flutter/Gradle drift.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When a remote build makes sense:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're on a Chromebook / weak machine / phone-only setup&lt;/li&gt;
&lt;li&gt;You need one APK from a FlutterFlow or AI-builder project and don't want a $39/mo plan&lt;/li&gt;
&lt;li&gt;Your old project needs the version surgery described above (this is the "legacy rescue" case)&lt;/li&gt;
&lt;li&gt;You want builds inside an automation without maintaining CI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Option 3: Do it in CI (the middle path)
&lt;/h2&gt;

&lt;p&gt;If your project is already on GitHub, a minimal Actions workflow gets you there — but respect the gotchas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache &lt;code&gt;~/.gradle&lt;/code&gt; and the Flutter pub cache or cold builds take 15+ min&lt;/li&gt;
&lt;li&gt;Pin your Java/Gradle versions; don't trust defaults&lt;/li&gt;
&lt;li&gt;Play Store wants an AAB (&lt;code&gt;flutter build appbundle&lt;/code&gt;), not an APK&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's free at low volume and worth learning. But if you just need the APK today, options 1 and 2 are faster to a working artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signing: the part everyone forgets
&lt;/h2&gt;

&lt;p&gt;A release APK you'll distribute outside Play Store should be signed with your own keystore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;keytool &lt;span class="nt"&gt;-genkey&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-keystore&lt;/span&gt; ~/my-release-key.jks &lt;span class="nt"&gt;-keyalg&lt;/span&gt; RSA &lt;span class="nt"&gt;-keysize&lt;/span&gt; 2048 &lt;span class="nt"&gt;-validity&lt;/span&gt; 10000 &lt;span class="nt"&gt;-alias&lt;/span&gt; my-alias
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep that file. Losing it means you can never update that app (Play Store identity is keystore-bound). If you lost a keystore — that's a rescue job, not a rebuild.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Setup cost&lt;/th&gt;
&lt;th&gt;Time to APK&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Minimal local SDK&lt;/td&gt;
&lt;td&gt;~2 GB, 30 min&lt;/td&gt;
&lt;td&gt;10+ min first build&lt;/td&gt;
&lt;td&gt;Long-term Flutter work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remote build API&lt;/td&gt;
&lt;td&gt;zero&lt;/td&gt;
&lt;td&gt;~4–8 min&lt;/td&gt;
&lt;td&gt;One-off builds, weak machines, automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Actions&lt;/td&gt;
&lt;td&gt;YAML + cache tuning&lt;/td&gt;
&lt;td&gt;8–20 min/cold run&lt;/td&gt;
&lt;td&gt;Teams, repeatable pipelines&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Whatever you pick: &lt;code&gt;flutter build&lt;/code&gt; is a solved problem, and none of these paths should cost you an evening anymore.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We run a small remote build service on top of this toolchain — first build is free to verify quality, then $12 a build or $79 for a 10-pack, payable by card or crypto. Details at &lt;a href="https://kauz-labs.pages.dev" rel="noopener noreferrer"&gt;kauz-labs.pages.dev&lt;/a&gt; or email &lt;a href="mailto:contact.eventify.app@gmail.com"&gt;contact.eventify.app@gmail.com&lt;/a&gt;. Questions about a specific build error? Ask in the comments — I answer all of them.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
