Minio提供对象存储服务。它的应用场景被设定在了非结构化的数据的存储之上了。众所周知,非结构化对象诸如图像/音频/视频/log文件/系统备份/镜像文件…等等保存起来管理总是不那么方便,size变化很大,类型很多,再有云端的结合会使得情况更加复杂,minio就是解决此种场景的一个解决方案。Minio号称其能很好的适应非结构化的数据,支持AWS的S3,非结构化的文件从数KB到5TB都能很好的支持。
在Minio的API中,为java等语言提供了API,但是想要移动端直接将文件等存在Minio上,是比较困难的一件事。 如果你直接集成Minio为java提供的SDK,那么不会那么轻易集成到安卓项目中,本人用了两天时间将经验融合到项目中。
Demo下载地址:https://github.com/15229016179/MinioForAndroid
Minio API地址:https://docs.minio.io/
如果你是写go的,那么你应该对Minio不陌生,一个强大的对象存储服务。
安卓直接使用Minio为java提供的API,需要引入jar包。看API的时候兴高采烈,感觉so easy!可结果却是:
日了狗了!!!
刚导入jar包就是各种报错!各种jar包冲突。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcVHbXVmb1cVY1QmMjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jNzIDNzITM1EjNycDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
然后就是长达两天的折磨!终于搞定。
先是为了搞定冲突,尝试删减jar包:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
}
//minio针对java做的api,导入后会报一系列包冲突
compile('io.minio:minio:3.0.5', {
exclude group: 'com.google.code.findbugs', module: 'jsr305'
exclude group: 'com.google.code.findbugs', module: 'annotations'
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
exclude group: 'com.squareup.okio', module: 'okio'
exclude group: 'net.jcip', module: 'jcip-annotations'
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
exclude group: 'xpp3', module: 'xpp3'
})
无果。
虽然解决掉了jar包冲突的问题,在6.0的手机上运行ok,但是在4.2的手机上搞不起来,原因是minio的jar包中使用了JDK1.7的类库。好难受!
然后只能把jar包反编译,看看它究竟搞了什么鬼。
没办法,只能把jar包中Minio的包反编译出来,改掉源码中使用JDK1.7类库的函数,然后引入需要用到的第三方jar:
//自己根据minio sdk中的lib引用,将必须用到的lib引用到项目中,并做一些删减,解决包引用冲突
compile 'com.squareup.okhttp3:okhttp:3.6.0'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.0.pr3'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.0.pr3'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.0.pr3'
compile group: 'com.google.code.findbugs', name: 'annotations', version: '2.0.1'
// compile group: 'commons-logging', name: 'commons-logging', version: '1.1.1'
compile group: 'joda-time', name: 'joda-time', version: '2.7'
compile group: 'com.google.guava', name: 'guava', version: '18.0'
// compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.5'
// compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.0.1'
compile('com.google.http-client:google-http-client:1.20.0', {
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
compile(group: 'com.google.http-client', name: 'google-http-client-xml', version: '1.20.0', {
exclude group: 'xpp3', module: 'xpp3'
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
最终搞定了,太开心了!
请转至github下载源码查看:https://github.com/15229016179/MinioForAndroid
博主技术有限,望大牛路过多多指教!