Skip to content
Multitask、MultiThread(MultiConnection)、Breakpoint-resume、High-concurrency、Simple to use、Single/NotSingle-process
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github docs: fix typo on issue template Sep 11, 2017
.idea ci: upgrade gradle to latset version Sep 14, 2018
art docs: add message-system and structure image Jan 1, 2018
demo demo: supplement a clear http text to security config xml file Feb 19, 2019
gradle ci: upgrade android build gradle plugin to 3.3.1 and gradle to gradle… Feb 20, 2019
.gitignore chore: upgrade android gradle plugin version and target version Apr 20, 2018
.travis.yml ci: upgrade android build tool to 28.0.3 declare on the travis ci yml Feb 27, 2019 ci: release v1.7.6 for fix some issues Feb 20, 2019 ci: release v1.7.6 for fix some issues Feb 20, 2019
LICENSE.txt add license txt & add changelog md Dec 22, 2015 ci: upgrade to 1.7.7-snapshot for continue deploy Feb 20, 2019
build.gradle ci: upgrade android build gradle plugin to 3.3.1 and gradle to gradle… Feb 20, 2019
checkstyle.xml chore: enable checkstyle on filedownloader Dec 12, 2017 ci: upgrade to 1.7.7-snapshot for continue deploy Feb 20, 2019
gradlew init Dec 16, 2015
gradlew.bat init Dec 16, 2015 chore: add install and launch script in command Sep 25, 2016
okcat.yml ci: add okcat yaml file for debug filedownload more gentle Feb 20, 2019
settings.gradle init Dec 16, 2015


Android multi-task file download engine.

Download Build Status



Now, FileDownloader2-OkDownload is released, okdownload will contain all advantage on the FileDownloader and beyond.

Because of FileDownloader unit-test coverage is very low, so all farther features and enhances will be achieved on the okdownload instead of FileDownloader, and FileDownloader will only focuses on bug fixes.



FileDownloader is installed by adding the following dependency to your build.gradle file:

dependencies {
    implementation 'com.liulishuo.filedownloader:library:1.7.6'

Snapshots of the development version are available in Sonatype's snapshots repository, you can include on your gradle project through:

repositories {
    maven { url "" }

Open customize component

From now on, FileDownloader support following components to be customized by yourself:

Name Interface Default Impl
Connection FileDownloadConnection FileDownloadUrlConnection
OutputStream FileDownloadOutputStream FileDownloadRandomAccessFile
Database FileDownloadDatabase RemitDatabase
ConnectionCountAdapter ConnectionCountAdapter DefaultConnectionCountAdapter
IdGenerator IdGenerator DefaultIdGenerator
ForegroundServiceConfig ForegroundServiceConfig ForegroundServiceConfig
  • If you want to use okhttp as your connection component, the simplest way is this repo.
  • If you don't want to use any database on FileDownloader(the database on FileDownloader is used for persist tasks' breakpoint info) just using

How to valid it?

Just create your own DownloadMgrInitialParams.InitCustomMaker and put those customized component to it, finally init the FileDownloader with it: FileDownloader#init


Adapt to Android 8.0

The restriction of background service has been tightened since Android 8.0, for more details, please refer to here. So, after Android 8.0, the download service will be a foreground service when start downloading during app is in background and you will see a notification with a title named "FileDownloader" start from FileDownloader 1.7.6. You can refer to here to custom the notification.

Adapt to Android 9.0

Starting with Android 9.0 (API level 28), cleartext support is disabled by default, you can have a look at here to know about more details. FileDownloader demo has handled this problem start with 1.7.6.

According to the migration notes, the FOREGROUND_SERVICE permission has been added to the library manifest since FileDownloader 1.7.6.

Welcome PR

If you can improve the unit test for this project would be great.


By default, the FileDownloadService runs on the separate process, if you want to run it on the main process, just configure on the, and you can use FileDownloadUtils.isDownloaderProcess(Context) to check whether the FileDownloadService can run on the current process.

For more readable, Moved to Wiki.


Copyright (c) 2015 LingoChamp Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
You can’t perform that action at this time.