<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>F-Droid on Allibragi</title><link>https://allibragi.codeberg.page/tags/f-droid/</link><description>Recent content in F-Droid on Allibragi</description><generator>Hugo -- 0.161.1</generator><language>en-us</language><copyright>Allibragi</copyright><lastBuildDate>Fri, 26 Jun 2026 13:13:39 +0100</lastBuildDate><atom:link href="https://allibragi.codeberg.page/tags/f-droid/index.xml" rel="self" type="application/rss+xml"/><item><title>What I Watch #1 - F-Droid</title><link>https://allibragi.codeberg.page/dev-blog/wiw-1/</link><pubDate>Fri, 26 Jun 2026 13:13:39 +0100</pubDate><author>Allibragi</author><guid>https://allibragi.codeberg.page/dev-blog/wiw-1/</guid><description>Publishing a Flutter app</description><content type="text/html" mode="escaped"><![CDATA[<p>Following Google’s decision to <a href="https://keepandroidopen.org" target="_blank" rel="noopener">lock Android out of the open-source</a>, I&rsquo;ve decided not only to make an Android app but also to publish it on <a href="https://f-droid.org" target="_blank" rel="noopener">F-Droid</a>.
It will be all for nothing? As I write this post, there are 96 days to go until that fateful moment, so only time will tell.</p>
<p>So, first thing first: my app is called <a href="https://f-droid.org/it/packages/io.codeberg.allibragi.whatiwatch/" target="_blank" rel="noopener">What I Watch</a> (<a href="https://codeberg.org/allibragi/whatiwatch" target="_blank" rel="noopener">repo here</a>) and helps you keep track of the series you&rsquo;re currently watching. Not only TV series because it uses the <a href="https://www.tvmaze.com/" target="_blank" rel="noopener">TvMaze</a> API, that is a sort of community driven things for what I&rsquo;ve understood, there are also anime and other stuff but it would have ben too long to put in as short description for the store page.</p>
<p>Enough with the preamble, let’s get to the point. To publish your app on FDroid you need to:</p>
<ul>
<li>have an open source app</li>
<li>fork the <code>fdroiddata</code> repo from <a href="https://gitlab.com" target="_blank" rel="noopener">GitLab</a></li>
<li>add a <code>yml</code> file with the istruction to build your app</li>
<li>make a merge request to add you app to the FDroid repo</li>
</ul>
<p>Now that I’ve managed it, it’s not a difficult task. But I’m not a super-talented developer like you readers, so I struggled to figure out what to do. So thank you, Linsui, for babay-sit me through the whole process (I couldn’t find any social media links or anything else on your profile, so I can’t mention you directly, but I really do thank you so much).</p>
<h2 id="first-steps">First steps<a href="#first-steps" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>As said, the first thin you need is the URL to the git repo of your app. The repo could be anywhere on the internet but it must be open source and reachable from the FDroid servers.</p>
<p>Then create an account on GitLab and fork the <a href="https://gitlab.com/fdroid/fdroiddata" target="_blank" rel="noopener">fdroiddata</a> repository. Now you can clone the repo on your PC, you&rsquo;ll have something like this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://gitlab.com/YOUR_USERNAME/fdroiddata.git
</span></span></code></pre></div><p>Now in the <code>metadata</code> folder create a <code>yml</code> file named as your Andorid app unique name. It will be something like <code>com.example.whatever.yml</code>. Inside this file we need to put the instuctions to the FDroid server on how to reach our repo and how to build the app.</p>
<h2 id="publish-a-flutter-app">Publish a Flutter app<a href="#publish-a-flutter-app" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>I&rsquo;m not quite sure how to go about this, so first I&rsquo;ll provide an example of the YML file based on my experience, and then I&rsquo;ll list, in the order they come to mind, the things I&rsquo;ve discovered along the way.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yml" data-lang="yml"><span class="line"><span class="cl"><span class="nt">Categories</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">List of categories</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">Your app belongs to</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">License: Your app license (es</span><span class="p">:</span><span class="w"> </span><span class="l">AGPL-3.0-or-later)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">AuthorName</span><span class="p">:</span><span class="w"> </span><span class="l">Your name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">SourceCode</span><span class="p">:</span><span class="w"> </span><span class="l">https://your-git-repo-url</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">IssueTracker</span><span class="p">:</span><span class="w"> </span><span class="l">https://your-issue-traker-url</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">AutoName</span><span class="p">:</span><span class="w"> </span><span class="l">your app name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">RepoType</span><span class="p">:</span><span class="w"> </span><span class="l">git</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">Repo</span><span class="p">:</span><span class="w"> </span><span class="l">https://your-git-repo-url</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">Builds</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">versionName</span><span class="p">:</span><span class="w"> </span><span class="m">0.1.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">versionCode</span><span class="p">:</span><span class="w"> </span><span class="m">11</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">commit</span><span class="p">:</span><span class="w"> </span><span class="l">your-commit-sha</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="l">build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">srclibs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">flutter@stable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">rm</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">linux</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">prebuild</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">flutterVersion=$(cat .flutter-version)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s1">&#39;[[ $flutterVersion ]]&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">git -C $$flutter$$ checkout -f $flutterVersion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">export PUB_CACHE=$(pwd)/.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter config --no-analytics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter pub get</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">scanignore</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">build</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">export PUB_CACHE=$(pwd)/.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter build apk --release --split-per-abi --target-platform=android-arm</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">versionName</span><span class="p">:</span><span class="w"> </span><span class="m">0.1.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">versionCode</span><span class="p">:</span><span class="w"> </span><span class="m">12</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">commit</span><span class="p">:</span><span class="w"> </span><span class="l">your-commit-sha</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="l">build/app/outputs/flutter-apk/app-arm64-v8a-release.apk</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">srclibs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">flutter@stable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">rm</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">linux</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">prebuild</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">flutterVersion=$(cat .flutter-version)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s1">&#39;[[ $flutterVersion ]]&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">git -C $$flutter$$ checkout -f $flutterVersion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">export PUB_CACHE=$(pwd)/.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter config --no-analytics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter pub get</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">scanignore</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">build</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">export PUB_CACHE=$(pwd)/.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter build apk --release --split-per-abi --target-platform=android-arm64</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">versionName</span><span class="p">:</span><span class="w"> </span><span class="m">0.1.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">versionCode</span><span class="p">:</span><span class="w"> </span><span class="m">13</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">commit</span><span class="p">:</span><span class="w"> </span><span class="l">your-commit-sha</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="l">build/app/outputs/flutter-apk/app-x86_64-release.apk</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">srclibs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">flutter@stable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">rm</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">linux</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">prebuild</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">flutterVersion=$(cat .flutter-version)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s1">&#39;[[ $flutterVersion ]]&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">git -C $$flutter$$ checkout -f $flutterVersion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">export PUB_CACHE=$(pwd)/.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter config --no-analytics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter pub get</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">scanignore</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">build</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">export PUB_CACHE=$(pwd)/.pub-cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">$$flutter$$/bin/flutter build apk --release --split-per-abi --target-platform=android-x64</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">AutoUpdateMode</span><span class="p">:</span><span class="w"> </span><span class="l">Version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">UpdateCheckMode</span><span class="p">:</span><span class="w"> </span><span class="l">Tags</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">VercodeOperation</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="s1">&#39;%c * 10 + 1&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="s1">&#39;%c * 10 + 2&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="s1">&#39;%c * 10 + 3&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">UpdateCheckData</span><span class="p">:</span><span class="w"> </span><span class="l">pubspec.yaml|version:\s.+\+(\d+)|.|version:\s(.+)\+</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">CurrentVersion</span><span class="p">:</span><span class="w"> </span><span class="m">0.1.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">CurrentVersionCode</span><span class="p">:</span><span class="w"> </span><span class="m">13</span><span class="w">
</span></span></span></code></pre></div><h3 id="abi-split--vercodeoperation">ABI Split &amp; VercodeOperation<a href="#abi-split--vercodeoperation" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>This is the thing that annoyed me the most, so it’s only natural that it’s the first thing that comes to mind.</p>
<p>Once the build process is complete, the FDroid pipeline expects to receive three APKs: arm, arm64, and x86_64. These three files must follow a naming convention for the version code that differs from Flutter’s default one. You must therefore modify the <code>version</code> in your <code>pubspec.yaml</code>, change the Gradle file to build the APKs with the correct naming convention and include the same logic in the YML file.</p>
<p>So in the <code>pubspec.yaml</code> you have to add the version for the FDroid&rsquo;s pipeline after the version you are using with a <code>+</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;0.1.1+1&#39;</span><span class="w">
</span></span></span></code></pre></div><p>In the <code>android/app/build.gradle.kts</code> you have to add this to map the APKs versions:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kn">import</span><span class="w"> </span><span class="nn">com.android.build.gradle.internal.api.ApkVariantOutputImpl</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="o">[</span><span class="p">...</span><span class="o">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">val</span><span class="w"> </span><span class="n">abiCodes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mapOf</span><span class="p">(</span><span class="s">&#34;armeabi-v7a&#34;</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">1</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;arm64-v8a&#34;</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">2</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;x86_64&#34;</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">3</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">android</span><span class="p">.</span><span class="na">applicationVariants</span><span class="p">.</span><span class="na">configureEach</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">val</span><span class="w"> </span><span class="n">variant</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">this</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">variant</span><span class="p">.</span><span class="na">outputs</span><span class="p">.</span><span class="na">forEach</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="o">-&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">val</span><span class="w"> </span><span class="n">abiVersionCode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">abiCodes</span><span class="o">[</span><span class="n">output</span><span class="p">.</span><span class="na">filters</span><span class="p">.</span><span class="na">find</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">it</span><span class="p">.</span><span class="na">filterType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s">&#34;ABI&#34;</span><span class="w"> </span><span class="p">}</span><span class="o">?</span><span class="p">.</span><span class="na">identifier</span><span class="o">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">abiVersionCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="p">(</span><span class="n">output</span><span class="w"> </span><span class="n">as</span><span class="w"> </span><span class="n">ApkVariantOutputImpl</span><span class="p">).</span><span class="na">versionCodeOverride</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">variant</span><span class="p">.</span><span class="na">versionCode</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">10</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">abiVersionCode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>And in the <code>yml</code>, as you can see above, three entry in the <code>Build</code> section and the <code>VercodeOperation</code> section to tell the FDroid server how to build and what to expect.</p>
<p>So, for version 0.1.1+1 of the app, we will have version codes 11, 12, and 13; for version 0.1.2+2, 21, 22, and 23; and so on.</p>
<h3 id="fastlane">Fastlane<a href="#fastlane" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>This is a folder we need to create in the root directory of your repository to generate descriptions, previews, icons, etc., for the store page. You can find more details <a href="https://fastlane.tools" target="_blank" rel="noopener">here</a>.</p>
<h3 id="flutter-version">.flutter-version<a href="#flutter-version" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>Fdroid doesn’t like to use the latest version of Flutter just because it&rsquo;s cool, so we need to create a <code>.flutter-version</code> file in the project root containing the version of Flutter to be used in the build, and then reference it in the yml file.
Take a look at this line in the YML file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yml" data-lang="yml"><span class="line"><span class="cl">- <span class="l">flutterVersion=$(cat .flutter-version)</span><span class="w">
</span></span></span></code></pre></div><h3 id="antifeatures">Antifeatures<a href="#antifeatures" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>F-Droid have a exaustive explantation of what an antifeature is <a href="https://f-droid.org/docs/Anti-Features/" target="_blank" rel="noopener">here</a>. Just see if something in your app matches and add it to a list at the topof your <code>.yml</code> file.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yml" data-lang="yml"><span class="line"><span class="cl"><span class="nt">AntiFeatures</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">NonFreeNet</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">en-US</span><span class="p">:</span><span class="w"> </span><span class="l">Data is sourced from 3rd party public API.</span><span class="w">
</span></span></span></code></pre></div><h3 id="commit-sha">Commit SHA<a href="#commit-sha" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>I don&rsquo;t remember why I&rsquo;ve written this down for the the post but in the <code>commit:</code> section of the <code>yml</code> you need to put the sha of the commit. It&rsquo;s like obvious, right?</p>
<h3 id="rm">rm:<a href="#rm" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h3>
<p>In the <code>yml</code> file, under the <code>Builds</code> section, there is a subsection labeled <code>rm:</code>. This section tells F-Droid to delete certain files after cloning the Git repository. It is used to free up space on the server by removing items that are not needed for the build process. In my case, I delete the <code>linux</code> folder because it is not required for the Android version of the app.</p>
<h2 id="merge-forrest-merge">Merge, Forrest! Merge!<a href="#merge-forrest-merge" class="anchor" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
      stroke-linecap="round" stroke-linejoin="round" class="feather">
      <path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path>
      <line x1="8" y1="12" x2="16" y2="12"></line>
   </svg></a></h2>
<p>Once your <code>yml</code> file is ready you can push the file in your forked repo, a build pipeline should start. If all is on the green side you can proceed to make a merge request. The naming of the request for a new app is &ldquo;New App: app name&rdquo;, in the merge form you also need to complete the template provided with the correct info.</p>
<p>Aaaand that&rsquo;s all for now. Ciao!</p>
]]></content></item></channel></rss>