<?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: SimpleDownloader</title>
    <description>The latest articles on DEV Community by SimpleDownloader (simpledownloader).</description>
    <link>https://dev.to/simpledownloader</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%2Forganization%2Fprofile_image%2F14370%2F28398289-c26a-4b59-ada9-64ad2a44ad02.jpg</url>
      <title>DEV Community: SimpleDownloader</title>
      <link>https://dev.to/simpledownloader</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/simpledownloader"/>
    <language>en</language>
    <item>
      <title>SimpleDownloader v1.0.0</title>
      <dc:creator>Jeetarc</dc:creator>
      <pubDate>Tue, 08 Sep 2026 12:43:41 +0000</pubDate>
      <link>https://dev.to/simpledownloader/simpledownloader-v100-47km</link>
      <guid>https://dev.to/simpledownloader/simpledownloader-v100-47km</guid>
      <description>&lt;h2&gt;
  
  
  v1.0.0
&lt;/h2&gt;

&lt;p&gt;Stable release of SimpleDownloader with a cleaner API, improved task management, and many more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Added
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multi-download management&lt;/li&gt;
&lt;li&gt;Instance-based downloader API with &lt;code&gt;SimpleDownloader.getInstance(context)&lt;/code&gt; and &lt;code&gt;SimpleDownloader.builder(context)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DownloadRequest&lt;/code&gt; API for defining individual downloads separately from downloader configuration.&lt;/li&gt;
&lt;li&gt;Downloader ownership through &lt;code&gt;ownerId&lt;/code&gt;, if not set, it use library default: &lt;code&gt;"default_owner"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Added support for batch downloads and clearer separation between global downloader settings and per download options.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fixes &amp;amp; Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Safer task management when multiple downloader instances are used.&lt;/li&gt;
&lt;li&gt;Improved separation of task state, queues, and concurrency between downloader instances.&lt;/li&gt;
&lt;li&gt;Improved database handling and task ownership.&lt;/li&gt;
&lt;li&gt;General stability and lifecycle improvements for the stable release.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Migration for beta users
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Update the dependency:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.github.jeetarc:SimpleDownloader:1.0.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Replace the old download API:
&lt;/h4&gt;

&lt;p&gt;Beta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;DownloadTask&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setOutput&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folderUri&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FileName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AUTO&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setFileUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startDownload&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DownloadRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DownloadRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folderUri&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FileName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AUTO&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileUrl&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DownloadTask&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startDownload&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;SimpleDownloader.builder(context)&lt;/code&gt; and &lt;code&gt;DownloadRequest.builder()&lt;/code&gt; for more controls. &lt;a href="https://github.com/jeetarc/SimpleDownloader/blob/main/README.md" rel="noopener noreferrer"&gt;Read APIs&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Update listeners:
&lt;/h4&gt;

&lt;p&gt;Move from the beta listener API to the stable APIs:&lt;/p&gt;

&lt;p&gt;Beta: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DownloadListener&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DownloadTask.Listener&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SimpleDownloader.Listener&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Read README for more:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://github.com/jeetarc/SimpleDownloader/blob/main/README.md" rel="noopener noreferrer"&gt;https://github.com/jeetarc/SimpleDownloader/blob/main/README.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SimpleDownloader on GitHub:&lt;br&gt;
&lt;a href="https://github.com/jeetarc/SimpleDownloader" rel="noopener noreferrer"&gt;https://github.com/jeetarc/SimpleDownloader&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>downloader</category>
      <category>opensource</category>
      <category>simpledownloader</category>
    </item>
    <item>
      <title>SimpleDownloader - a modern Android file downloader library designed to simplify complex download management</title>
      <dc:creator>Jeetarc</dc:creator>
      <pubDate>Tue, 18 Aug 2026 04:48:49 +0000</pubDate>
      <link>https://dev.to/simpledownloader/simpledownloader-an-android-downloader-manager-library-designed-to-simplify-complex-file-3hpl</link>
      <guid>https://dev.to/simpledownloader/simpledownloader-an-android-downloader-manager-library-designed-to-simplify-complex-file-3hpl</guid>
      <description>&lt;p&gt;Downloading files on Android is a headache. You have to deal with file systems, scoped storage, MediaStore, foreground, notifications, lifecycle handling, retries, etc along with optimizations.&lt;/p&gt;

&lt;p&gt;Introducing &lt;strong&gt;SimpleDownloader&lt;/strong&gt; - a simple to use library for everything from basic file downloads to advanced download management system.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple downloader profiles in a single app&lt;/li&gt;
&lt;li&gt;Queues, priorities, and concurrency control&lt;/li&gt;
&lt;li&gt;Pause, resume, cancel, retry, remove, requeue, and force download&lt;/li&gt;
&lt;li&gt;Network loss handling + Wi-Fi-only mode&lt;/li&gt;
&lt;li&gt;Database persistence and automatic restore&lt;/li&gt;
&lt;li&gt;Filesystem paths, SAF/Document Tree, and MediaStore&lt;/li&gt;
&lt;li&gt;Automatic filename and MIME type handling&lt;/li&gt;
&lt;li&gt;Progress, speed, ETA, status, and lifecycle callbacks&lt;/li&gt;
&lt;li&gt;Foreground + progress/complete/error notifications, with actions and thumbnails&lt;/li&gt;
&lt;li&gt;Custom OkHttpClient, headers, cookies, checksums, RetryPolicy, timeouts, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Minimum Android version API 21 (Android 5.0). The below examples are written in Java, the library can be used from both Java and Kotlin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Add JitPack to your repositories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="n"&gt;dependencyResolutionManagement&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;repositoriesMode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RepositoriesMode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FAIL_ON_PROJECT_REPOS&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;repositories&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;mavenCentral&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;maven&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="s2"&gt;"https://jitpack.io"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add the dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="k"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.github.jeetarc:SimpleDownloader:&amp;lt;latest-version&amp;gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit Releases page to know latest version:&lt;br&gt;
&lt;a href="https://github.com/jeetarc/SimpleDownloader/releases" rel="noopener noreferrer"&gt;https://github.com/jeetarc/SimpleDownloader/releases&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get the default instance&lt;/span&gt;
&lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Or create a customized instance&lt;/span&gt;
&lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SimpleDownloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Builder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setMaxConcurrent&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setRetryCount&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;enableHistory&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;enableForeground&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setAutoRestore&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Filesystem path&lt;/span&gt;
&lt;span class="nc"&gt;DownloadRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DownloadRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folderPath&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FileName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AUTO&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileUrl&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DownloadTask&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startDownload&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// MediaStore (Android 10+)&lt;/span&gt;
&lt;span class="nc"&gt;DownloadRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DownloadRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MediaStore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Downloads&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXTERNAL_CONTENT_URI&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FileName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AUTO&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileUrl&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DownloadTask&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startDownload&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// SAF / Document Tree&lt;/span&gt;
&lt;span class="nc"&gt;DownloadRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DownloadRequest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;treeUri&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FileName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AUTO&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileUrl&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DownloadTask&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;downloader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startDownload&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API also gives callbacks for pause, resume, progress, completion, errors, status changes, lifecycle events, etc. &lt;a href="https://github.com/jeetarc/SimpleDownloader/blob/main/README.md#callbacks-and-listeners" rel="noopener noreferrer"&gt;Callbacks and Listeners&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissions
&lt;/h3&gt;

&lt;p&gt;Only request what you use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST_NOTIFICATIONS&lt;/code&gt; for notifications (runtime permission on Android 13+)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FOREGROUND_SERVICE&lt;/code&gt; + &lt;code&gt;FOREGROUND_SERVICE_DATA_SYNC&lt;/code&gt; when using foreground mode&lt;/li&gt;
&lt;li&gt;Storage permissions only when writing to external filesystem paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No storage permission is needed for app-specific directories, MediaStore, or SAF. &lt;a href="https://github.com/jeetarc/SimpleDownloader/blob/main/README.md#Setup" rel="noopener noreferrer"&gt;Setup guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many more APIs, customization and control available, view README for more: &lt;a href="https://github.com/jeetarc/SimpleDownloader/blob/main/README.md" rel="noopener noreferrer"&gt;https://github.com/jeetarc/SimpleDownloader/blob/main/README.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/jeetarc/SimpleDownloader" rel="noopener noreferrer"&gt;https://github.com/jeetarc/SimpleDownloader&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reddit community: &lt;a href="https://www.reddit.com/r/SimpleDownloader" rel="noopener noreferrer"&gt;https://www.reddit.com/r/SimpleDownloader&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback, especially if you've dealing with Android's download/storage APIs before.&lt;/p&gt;

</description>
      <category>android</category>
      <category>downloader</category>
      <category>java</category>
      <category>kotlin</category>
    </item>
  </channel>
</rss>
