bug 修复,readme编写

pull/330/head
AriaLyy 8 years ago
parent 30605c6c01
commit 0bc96efaaf
  1. 52
      Aria/build.gradle
  2. 14
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java
  3. 2
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadUtil.java
  4. 8
      Aria/src/main/java/com/arialyy/aria/core/download/SingleThreadTask.java
  5. 10
      Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java
  6. 1
      Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java
  7. 24
      AriaAnnotations/build.gradle
  8. 4
      AriaAnnotations/src/main/java/com/arialyy/annotations/Download.java
  9. 4
      AriaAnnotations/src/main/java/com/arialyy/annotations/Upload.java
  10. 24
      AriaCompiler/build.gradle
  11. 63
      README.md
  12. 10
      app/build.gradle
  13. 262
      app/src/main/assets/aria_config.xml
  14. 15
      app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java
  15. 2
      build.gradle

@ -29,32 +29,32 @@ dependencies {
//apply from: 'jcenter.gradle' //apply from: 'jcenter.gradle'
// Jar // Jar
task androidJar(type: Jar) { //task androidJar(type: Jar) {
dependsOn assemble // dependsOn assemble
group 'Build' // group 'Build'
description 'blah blah' // description 'blah blah'
from zipTree( // from zipTree(
'build/intermediates/bundles/release/classes.jar') // 'build/intermediates/bundles/release/classes.jar')
from zipTree( // from zipTree(
'../AriaCompiler/build/libs/AriaCompiler.jar') // '../AriaCompiler/build/libs/AriaCompiler.jar')
from zipTree( // from zipTree(
'../AriaAnnotation/build/libs/AriaAnnotation.jar') // '../AriaAnnotation/build/libs/AriaAnnotation.jar')
//
} //}
//
//
// javadoc tasks //// javadoc tasks
android.libraryVariants.all { variant -> //android.libraryVariants.all { variant ->
task("javadoc${variant.name.capitalize()}", type: Javadoc) { // task("javadoc${variant.name.capitalize()}", type: Javadoc) {
description "Generates Javadoc for $variant.name." // description "Generates Javadoc for $variant.name."
group 'Docs' // group 'Docs'
source = variant.javaCompile.source // source = variant.javaCompile.source
source "../AriaAnnotation/src/main/java" // source "../AriaAnnotation/src/main/java"
//
exclude '**/BuildConfig.java' // exclude '**/BuildConfig.java'
exclude '**/R.java' // exclude '**/R.java'
} // }
} //}
publish { publish {

@ -28,6 +28,7 @@ import com.arialyy.aria.core.scheduler.DownloadSchedulers;
import com.arialyy.aria.core.scheduler.ISchedulers; import com.arialyy.aria.core.scheduler.ISchedulers;
import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CheckUtil;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
import java.io.File;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
/** /**
@ -50,6 +51,19 @@ public class DownloadTask extends AbsTask<DownloadTaskEntity, DownloadEntity> {
mUtil = new DownloadUtil(mContext, taskEntity, mListener); mUtil = new DownloadUtil(mContext, taskEntity, mListener);
} }
/**
* 获取文件保存路径
*
* @return 如果路径不存在返回null
*/
public String getDownloadPath() {
File file = new File(mEntity.getDownloadPath());
if (!file.exists()) {
return null;
}
return mEntity.getDownloadPath();
}
/** /**
* 获取当前下载任务的下载地址 * 获取当前下载任务的下载地址
* *

@ -332,7 +332,7 @@ class DownloadUtil implements IDownloadUtil, Runnable {
rl++; rl++;
} }
if (i == (THREAD_NUM - 1)) { if (i == (THREAD_NUM - 1)) {
//如果整个文件的大小不为线程个数的整数倍,则最后一个线程的结束位置即为文件的总长度 //最后一个线程的结束位置即为文件的总长度
endL = fileLength; endL = fileLength;
} }
addSingleTask(i, startL, endL, fileLength); addSingleTask(i, startL, endL, fileLength);

@ -65,8 +65,8 @@ final class SingleThreadTask implements Runnable {
if (-0.9999 < maxSpeed && maxSpeed < 0.00001) { if (-0.9999 < maxSpeed && maxSpeed < 0.00001) {
mSleepTime = 0; mSleepTime = 0;
} else { } else {
BigDecimal db = new BigDecimal((mBufSize / 1024) / maxSpeed * 1000); BigDecimal db = new BigDecimal(((mBufSize / 1024) / maxSpeed) * 1000);
db.setScale(2, BigDecimal.ROUND_UP); db.setScale(0, BigDecimal.ROUND_HALF_UP);
mSleepTime = db.longValue(); mSleepTime = db.longValue();
//mSleepTime = (long) ((mBufSize / 1024) * CONSTANCE.THREAD_NUM / maxSpeed * 1000); //mSleepTime = (long) ((mBufSize / 1024) * CONSTANCE.THREAD_NUM / maxSpeed * 1000);
//mSleepTime = (long) ((mBufSize / 1024) / maxSpeed * 1000); //mSleepTime = (long) ((mBufSize / 1024) / maxSpeed * 1000);
@ -91,7 +91,8 @@ final class SingleThreadTask implements Runnable {
+ "】"); + "】");
//在头里面请求下载开始位置和结束位置 //在头里面请求下载开始位置和结束位置
conn.setRequestProperty("Range", conn.setRequestProperty("Range",
"bytes=" + mConfigEntity.START_LOCATION + "-" + mConfigEntity.END_LOCATION); "bytes=" + mConfigEntity.START_LOCATION + "-" + (mConfigEntity.END_LOCATION - 1));
//"bytes=" + mConfigEntity.START_LOCATION + "-" + (mConfigEntity.END_LOCATION));
} else { } else {
Log.w(TAG, "该下载不支持断点"); Log.w(TAG, "该下载不支持断点");
} }
@ -116,7 +117,6 @@ final class SingleThreadTask implements Runnable {
break; break;
} }
Thread.sleep(mSleepTime); Thread.sleep(mSleepTime);
//把下载数据数据写入文件
file.write(buffer, 0, len); file.write(buffer, 0, len);
progress(len); progress(len);
} }

@ -38,6 +38,16 @@ public abstract class AbsTarget<ENTITY extends AbsEntity, TASK_ENTITY extends Ab
protected TASK_ENTITY taskEntity; protected TASK_ENTITY taskEntity;
protected String targetName; protected String targetName;
/**
* 设置扩展字段用来保存你的其它数据如果你的数据比较多你可以把你的数据转换为JSON字符串然后再存到Aria中
*
* @param str 扩展数据
*/
public AbsTarget setExtendField(String str) {
entity.setStr(str);
return this;
}
/** /**
* 获取任务状态 * 获取任务状态
* *

@ -75,6 +75,7 @@ public class CommonUtil {
} }
String calculatedDigest = getFileMD5(updateFile); String calculatedDigest = getFileMD5(updateFile);
Log.d(TAG, "fileMd5Code:" + calculatedDigest);
if (calculatedDigest == null) { if (calculatedDigest == null) {
Log.e(TAG, "calculatedDigest null"); Log.e(TAG, "calculatedDigest null");
return false; return false;

@ -1,5 +1,5 @@
apply plugin: 'java' apply plugin: 'java'
//apply plugin: 'bintray-release' apply plugin: 'bintray-release'
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
options.encoding = "UTF-8" options.encoding = "UTF-8"
@ -12,14 +12,14 @@ dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) compile fileTree(dir: 'libs', include: ['*.jar'])
} }
//publish { publish {
// artifactId = 'aria-annotations' artifactId = 'aria-annotations'
// userOrg = rootProject.userOrg userOrg = rootProject.userOrg
// groupId = rootProject.groupId groupId = rootProject.groupId
//// uploadName = rootProject.uploadName // uploadName = rootProject.uploadName
// uploadName = 'AriaAnnotations' uploadName = 'AriaAnnotations'
// publishVersion = rootProject.publishVersion publishVersion = rootProject.publishVersion
// description = rootProject.description description = rootProject.description
// website = rootProject.website website = rootProject.website
// licences = rootProject.licences licences = rootProject.licences
//} }

@ -51,7 +51,9 @@ import java.lang.annotation.Target;
*/ */
@Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskResume { @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskResume {
} }
/**
* 如果你在方法中添加{@code @Download.onTaskStart}注解在任务开始下载时Aria会调用该方法
*/
@Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskStart { @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskStart {
} }

@ -50,7 +50,9 @@ import java.lang.annotation.Target;
*/ */
//@Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskResume { //@Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskResume {
//} //}
/**
* 如果你在方法中添加{@code @Upload.onTaskStart}注解在任务开始下载时Aria会调用该方法
*/
@Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskStart { @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskStart {
} }

@ -1,5 +1,5 @@
apply plugin: 'java' apply plugin: 'java'
//apply plugin: 'bintray-release' apply plugin: 'bintray-release'
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
options.encoding = "UTF-8" options.encoding = "UTF-8"
@ -15,14 +15,14 @@ dependencies {
compile project(':AriaAnnotations') compile project(':AriaAnnotations')
} }
//publish { publish {
// artifactId = 'aria-compiler' artifactId = 'aria-compiler'
// userOrg = rootProject.userOrg userOrg = rootProject.userOrg
// groupId = rootProject.groupId groupId = rootProject.groupId
//// uploadName = rootProject.uploadName // uploadName = rootProject.uploadName
// uploadName = 'AriaCompiler' uploadName = 'AriaCompiler'
// publishVersion = rootProject.publishVersion publishVersion = rootProject.publishVersion
// description = rootProject.description description = rootProject.description
// website = rootProject.website website = rootProject.website
// licences = rootProject.licences licences = rootProject.licences
//} }

@ -79,41 +79,47 @@ compile 'com.arialyy.aria:Aria:3.1.5'
### 下载状态获取 ### 下载状态获取
如果你希望读取下载进度或下载信息,那么你需要创建事件类,并在onResume(Activity、Fragment)或构造函数(Dialog、PopupWindow),将该事件类注册到Aria管理器。 如果你希望读取下载进度或下载信息,那么你需要创建事件类,并在onResume(Activity、Fragment)或构造函数(Dialog、PopupWindow),将该事件类注册到Aria管理器。
* 创建事件类
* 将对象注册到Aria
` Aria.download(this).register();`或`Aria.upload(this).register();`
```java
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aria.download(this).register();
}
```
* 使用'@Download'或'@Upload'注解你的函数
**注意:**
- 注解回掉采用Apt的方式实现,所以,你不需要担心这会影响你机器的性能
- 被注解的方法**不能被private修饰**
- 被注解的方法**只能有一个参数,并且参数类型必须是`DownloadTask`或`UploadTask`**
- 方法名可以为任意字符
```java ```java
final static class MySchedulerListener extends Aria.DownloadSchedulerListener{ @Download.onPre protected void onPre(DownloadTask task) {}
@Override public void onTaskPre(DownloadTask task) {
@Download.onTaskStart void taskStart(DownloadTask task) {
//通过下载地址可以判断任务是否是你指定的任务 //通过下载地址可以判断任务是否是你指定的任务
if (task.getKey().equals(DOWNLOAD_URL)) { if (task.getKey().equals(DOWNLOAD_URL)) {
mUpdateHandler.obtainMessage(DOWNLOAD_PRE, task.getDownloadEntity().getFileSize())
.sendToTarget();
} }
} }
@Override public void onTaskStop(DownloadTask task) { @Download.onTaskRunning protected void running(DownloadTask task) {}
super.onTaskStop(task);
}
@Override public void onTaskCancel(DownloadTask task) { @Download.onTaskResume void taskResume(DownloadTask task) {}
super.onTaskCancel(task);
}
@Override public void onTaskRunning(DownloadTask task) { @Download.onTaskStop void taskStop(DownloadTask task) {}
super.onTaskRunning(task);
}
... @Download.onTaskCancel void taskCancel(DownloadTask task) {}
}
```
* 将事件注册到Aria @Download.onTaskFail void taskFail(DownloadTask task) {}
@Download.onTaskComplete void taskComplete(DownloadTask task) {}
@Download.onNoSupportBreakPoint public void onNoSupportBreakPoint(DownloadTask task) {}
```java
@Override protected void onResume() {
super.onResume();
Aria.whit(this).addSchedulerListener(new MySchedulerListener());
}
``` ```
### 使用广播接收器接收Aria的任务下载状态 ### 使用广播接收器接收Aria的任务下载状态
@ -134,7 +140,7 @@ compile 'com.arialyy.aria:Aria:3.1.5'
<!--设置下载线程,线程下载数改变后,新的下载任务才会生效--> <!--设置下载线程,线程下载数改变后,新的下载任务才会生效-->
<threadNum value="4"/> <threadNum value="4"/>
<!--是否打开下载广播,默认为false--> <!--是否打开下载广播,默认为false,不建议使用广播,你可以使用Download注解来实现事件回调-->
<openBroadcast value="false"/> <openBroadcast value="false"/>
<!--设置下载队列最大任务数, 默认为2--> <!--设置下载队列最大任务数, 默认为2-->
@ -144,7 +150,7 @@ compile 'com.arialyy.aria:Aria:3.1.5'
<reTryNum value="10"/> <reTryNum value="10"/>
<!--设置重试间隔,单位为毫秒,默认2000毫秒--> <!--设置重试间隔,单位为毫秒,默认2000毫秒-->
<reTryInterval value="2000"/> <reTryInterval value="5000"/>
<!--设置url连接超时时间,单位为毫秒,默认5000毫秒--> <!--设置url连接超时时间,单位为毫秒,默认5000毫秒-->
<connectTimeOut value="5000"/> <connectTimeOut value="5000"/>
@ -159,12 +165,15 @@ compile 'com.arialyy.aria:Aria:3.1.5'
<ca name="" path=""/> <ca name="" path=""/>
<!--是否需要转换速度单位,转换完成后为:1b/s、1kb/s、1mb/s、1gb/s、1tb/s,如果不需要将返回byte长度--> <!--是否需要转换速度单位,转换完成后为:1b/s、1kb/s、1mb/s、1gb/s、1tb/s,如果不需要将返回byte长度-->
<convertSpeed value="false"/> <convertSpeed value="true"/>
<!--设置最大下载速度,单位:kb, 为0表示不限速-->
<maxSpeed value="0"/>
</download> </download>
<upload> <upload>
<!--是否打开上传广播,默认为false--> <!--是否打开上传广播,默认为false,不建议使用广播,你可以使用Upload注解来实现事件回调-->
<openBroadcast value="false"/> <openBroadcast value="false"/>
<!--设置上传队列最大任务数, 默认为2--> <!--设置上传队列最大任务数, 默认为2-->

@ -42,11 +42,7 @@ dependencies {
compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.arialyy.frame:MVVM2:2.2.0' compile 'com.arialyy.frame:MVVM2:2.2.0'
compile project(':Aria') compile project(':Aria')
// compile 'com.arialyy.aria_pre:aria-annotations:0.0.2' // compile 'com.arialyy.aria:aria-core:0.0.5'
// compile 'com.arialyy.aria_pre:aria-compiler:0.0.2' // annotationProcessor 'com.arialyy.aria:aria-compiler:0.0.5'
// compile 'com.arialyy.aria:Aria:3.0.0'
// compile 'com.arialyy.downloadutil:aria-annotations:2.1.3'
// compile 'com.arialyy.downloadutil:aria-core:2.1.3'
// annotationProcessor 'com.arialyy.downloadutil:aria-compiler:2.1.3'
// compile 'com.arialyy.downloadutil:aria-annotations:2.1.3'
} }

@ -1,3 +1,136 @@
# Aria
![图标](https://github.com/AriaLyy/DownloadUtil/blob/v_2.0/app/src/main/res/mipmap-hdpi/ic_launcher.png)</br>
Aria项目源于15年工作中遇到的一个文件下载管理的需求,当时被下载折磨的痛不欲生,从那时起便萌生了编写一个简单易用,稳当高效的下载框架,aria经历了1.0到3.0的开发,算是越来越接近当初所制定的目标了。
Aria有以下特点:
+ 简单、方便
- 可以在Activity、Service、Fragment、Dialog、popupWindow、Notification等组件中使用
- 支持任务自动调度,使用者不需要关心任务状态切换的逻辑
- [通过Aria的事件,能很容易获取当前下载任务的下载状态](#下载状态获取)
- [一句代码加可以获取当前的下载速度](#常用接口)
- [一句代码就可以动态设置最大下载数](#代码中设置参数)
- [通过修改配置文件很容易就能修改下载线程数](#配置文件设置参数)
+ 支持https地址下载
- 在配置文件中很容易就可以设置CA证书的信息
+ 支持300、301、302重定向下载链接下载
+ 支持上传操作
Aria怎样使用?
* [下载](#使用)
* [上传](#上传)
如果你觉得Aria对你有帮助,您的star和issues将是对我最大支持.`^_^`
## 下载
[![Download](https://api.bintray.com/packages/arialyy/maven/Aria/images/download.svg)](https://bintray.com/arialyy/maven/Aria/_latestVersion)</br>
```java
compile 'com.arialyy.aria:Aria:3.1.5'
```
## 示例
![多任务下载](https://github.com/AriaLyy/DownloadUtil/blob/master/img/download_img.gif)
![上传](https://github.com/AriaLyy/DownloadUtil/blob/master/img/sing_upload.gif)
## 性能
![性能展示](https://github.com/AriaLyy/DownloadUtil/blob/master/img/performance.png)
***
## 使用
由于Aria涉及到文件和网络的操作,因此需要你在manifest文件中添加以下权限
```xml
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
## 使用Aria进行下载
* 添加任务(不进行下载),当其他下载任务完成时,将自动下载等待中的任务
```java
Aria.download(this)
.load(DOWNLOAD_URL)
.setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk") //文件保存路径
.add();
```
* 下载
```java
Aria.download(this)
.load(DOWNLOAD_URL) //读取下载地址
.setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk") //设置文件保存的完整路径
.start(); //启动下载
```
* 暂停
```java
Aria.download(this).load(DOWNLOAD_URL).pause();
```
* 恢复下载
```java
Aria.download(this).load(DOWNLOAD_URL).resume();
```
* 取消下载
```java
Aria.download(this).load(DOWNLOAD_URL).cancel();
```
### 下载状态获取
如果你希望读取下载进度或下载信息,那么你需要创建事件类,并在onResume(Activity、Fragment)或构造函数(Dialog、PopupWindow),将该事件类注册到Aria管理器。
* 将对象注册到Aria
` Aria.download(this).register();`或`Aria.upload(this).register();`
```java
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aria.download(this).register();
}
```
* 使用'@Download'或'@Upload'注解你的函数
**注意:**
- 注解回掉采用Apt的方式实现,所以,你不需要担心这会影响你机器的性能
- 被注解的方法**不能被private修饰**
- 被注解的方法**只能有一个参数,并且参数类型必须是`DownloadTask`或`UploadTask`**
- 方法名可以为任意字符
```java
@Download.onPre protected void onPre(DownloadTask task) {}
@Download.onTaskStart void taskStart(DownloadTask task) {
//通过下载地址可以判断任务是否是你指定的任务
if (task.getKey().equals(DOWNLOAD_URL)) {
}
}
@Download.onTaskRunning protected void running(DownloadTask task) {}
@Download.onTaskResume void taskResume(DownloadTask task) {}
@Download.onTaskStop void taskStop(DownloadTask task) {}
@Download.onTaskCancel void taskCancel(DownloadTask task) {}
@Download.onTaskFail void taskFail(DownloadTask task) {}
@Download.onTaskComplete void taskComplete(DownloadTask task) {}
@Download.onNoSupportBreakPoint public void onNoSupportBreakPoint(DownloadTask task) {}
```
### 使用广播接收器接收Aria的任务下载状态
有的时候,你可能希望在广播中接收Aria的下载事件,那么你需要
* 在[配置文件](#配置文件设置参数)中把` <openBroadcast value="false"/>`中的value改为true
* [点击该链接查看注册Aria广播的方式](https://github.com/AriaLyy/Aria/blob/master/BroadCast.md)
### Aria参数配置
#### 配置文件设置参数
创建`aria_config.xml`文件,将其放在`assets`目录下,添加以下内容
```xml
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<aria> <aria>
@ -57,3 +190,132 @@
</upload> </upload>
</aria> </aria>
```
#### 代码中设置参数
除了文件方式外修改Aria参数外,同样的,你也可以在代码中动态修改Aria参数</br>
通过`Aria.get(this).getDownloadConfig()`或`Aria.get(this).getUploadConfig()`直接获取配置文件,然后修改参数</br>
如以下所示:
```java
// 修改最大下载数,调用完成后,立即生效
// 如当前下载任务数是4,修改完成后,当前任务数会被Aria自动调度任务数
Aria.get(this).getDownloadConfig().setMaxTaskNum(3);
```
### 常用接口
* 停止所有任务
```java
Aria.download(this).stopAllTask();
```
* 删除所有任务
```java
Aria.download(this).removeAllTask();
```
* 获取当前任务的下载速度
速度参数有点特殊,需要[下载事件支持](#下载状态获取)
``` java
@Override public void onTaskRunning(DownloadTask task) {
//如果你打开了速度单位转换配置,将可以通过以下方法获取带单位的下载速度,如:1 m/s
String convertSpeed = task.getConvertSpeed();
//如果你有自己的单位格式,可以通过以下方法获取原始byte长度
long speed = task.getSpeed();
}
```
* 获取下载的文件大小、当前进度百分比
同样的,你也可以在DownloadTask对象中获取下载的文件大小
```
@Override public void onTaskRunning(DownloadTask task) {
 //获取文件大小
long fileSize = task.getFileSize();
//获取单位转换后的文件大小
String fileSize1 = task.getConvertFileSize();
//当前进度百分比
int percent = task.getPercent();
}
```
* 设置高优先级任务
如果你希望优先下载某一个任务,你可以
``` java
Aria.download(this).load(DOWNLOAD_URL).setDownloadPath(PATH).setHighestPriority();
```
**tips:为了防止内存泄露的情况,事件类需要使用staic进行修饰**
## 上传
* 添加任务(只添加,不上传)
```java
Aria.upload(this)
.load(filePath) //文件路径
.setUploadUrl(uploadUrl) //上传路径
.setAttachment(fileKey) //服务器读取文件的key
.add();
```
* 上传
```java
Aria.upload(this)
.load(filePath) //文件路径
.setUploadUrl(uploadUrl) //上传路径
.setAttachment(fileKey) //服务器读取文件的key
.start();
```
* 取消上传
```java
Aria.upload(this).load(filePath).cancel();
```
## 混淆配置
```
-dontwarn com.arialyy.aria.**
-keep class com.arialyy.aria.**{*;}
```
## 其他
有任何问题,可以在[issues](https://github.com/AriaLyy/Aria/issues)给我留言反馈。
***
## 后续版本开发规划
* ~~下载任务可以设置优先级~~
* ~~实现上传队列调度功能~~
## 开发日志
+ v_3.1.5 优化代码结构,增加优先下载任务功能。
+ v_3.1.4 修复快速切换,暂停、恢复功能时,概率性出现的重新下载问题,添加onPre()回调,onPre()用于请求地址之前执行界面UI更新操作。
+ v_3.1.0 添加Aria配置文件,优化代码
+ v_3.0.3 修复暂停后删除任务,闪退问题,添加删除记录的api
+ v_3.0.2 支持30x重定向链接下载
+ v_3.0.0 添加上传任务支持,修复一些已发现的bug
+ v_2.4.4 修复不支持断点的下载链接拿不到文件大小的问题
+ v_2.4.3 修复404链接卡顿的问题
+ v_2.4.2 修复失败重试无效的bug
+ v_2.4.1 修复下载慢的问题,修复application、service 不能使用的问题
+ v_2.4.0 支持https链接下载
+ v_2.3.8 修复数据错乱的bug、添加fragment支持
+ v_2.3.6 添加dialog、popupWindow支持
+ v_2.3.3 添加断点支持、修改下载逻辑,让使用更加简单、修复一个内存泄露的bug
+ v_2.3.1 重命名为Aria,下载流程简化
+ v_2.1.1 增加,选择最大下载任务数接口
License
-------
Copyright 2016 AriaLyy(https://github.com/AriaLyy/Aria)
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
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

@ -40,12 +40,14 @@ import com.arialyy.aria.core.download.DownloadEntity;
import com.arialyy.aria.core.download.DownloadTask; import com.arialyy.aria.core.download.DownloadTask;
import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
import com.arialyy.frame.util.FileUtil;
import com.arialyy.frame.util.show.L; import com.arialyy.frame.util.show.L;
import com.arialyy.frame.util.show.T; import com.arialyy.frame.util.show.T;
import com.arialyy.simple.R; import com.arialyy.simple.R;
import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.base.BaseActivity;
import com.arialyy.simple.databinding.ActivitySingleBinding; import com.arialyy.simple.databinding.ActivitySingleBinding;
import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
import java.io.File;
public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> { public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
public static final int DOWNLOAD_PRE = 0x01; public static final int DOWNLOAD_PRE = 0x01;
@ -60,8 +62,11 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
private static final String DOWNLOAD_URL = private static final String DOWNLOAD_URL =
//"http://kotlinlang.org/docs/kotlin-docs.pdf"; //"http://kotlinlang.org/docs/kotlin-docs.pdf";
//"https://atom-installer.github.com/v1.13.0/AtomSetup.exe?s=1484074138&ext=.exe"; //"https://atom-installer.github.com/v1.13.0/AtomSetup.exe?s=1484074138&ext=.exe";
"http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; //"http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk";
//"http://static.gaoshouyou.com/d/36/69/2d3699acfa69e9632262442c46516ad8.apk"; //"http://tinghuaapp.oss-cn-shanghai.aliyuncs.com/20170612201739607815";
//"http://oqcpqqvuf.bkt.clouddn.com/可用.xlsx";
"http://static.gaoshouyou.com/d/36/69/2d3699acfa69e9632262442c46516ad8.apk";
//"http://down8.androidgame-store.com/201706122321/97967927DD4E53D9905ECAA7874C8128/new/game1/19/45319/com.neuralprisma-2.5.2.174-2000174_1494784835.apk?f=web_1";
//不支持断点的链接 //不支持断点的链接
//"http://ox.konsung.net:5555/ksdc-web/download/downloadFile/?fileName=ksdc_1.0.2.apk&rRange=0-"; //"http://ox.konsung.net:5555/ksdc-web/download/downloadFile/?fileName=ksdc_1.0.2.apk&rRange=0-";
//"http://172.18.104.50:8080/download/_302turn"; //"http://172.18.104.50:8080/download/_302turn";
@ -226,6 +231,12 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
@Download.onTaskComplete void taskComplete(DownloadTask task) { @Download.onTaskComplete void taskComplete(DownloadTask task) {
if (task.getKey().equals(DOWNLOAD_URL)) { if (task.getKey().equals(DOWNLOAD_URL)) {
//if (CommonUtil.checkMD5("7c1ecf71835d681289bb6c32ff627566", new File(task.getDownloadPath()))){
//if (CommonUtil.checkMD5("f0c78b33ddc81bb58a712c582b2cd5b0", new File(task.getDownloadPath()))){
if (CommonUtil.checkMD5("2d3699acfa69e9632262442c46516ad8", new File(task.getDownloadPath()))){
T.showShort(this, "true");
L.d(TAG, "true");
}
mUpdateHandler.sendEmptyMessage(DOWNLOAD_COMPLETE); mUpdateHandler.sendEmptyMessage(DOWNLOAD_COMPLETE);
} }
} }

@ -37,7 +37,7 @@ ext {
userOrg = 'arialyy' userOrg = 'arialyy'
groupId = 'com.arialyy.aria' groupId = 'com.arialyy.aria'
// uploadName = 'AriaPre' // uploadName = 'AriaPre'
publishVersion = '0.0.3' publishVersion = '0.0.6'
repoName='maven' repoName='maven'
desc = 'android 下载框架' desc = 'android 下载框架'
website = 'https://github.com/AriaLyy/Aria' website = 'https://github.com/AriaLyy/Aria'

Loading…
Cancel
Save