起因
最近项目上有做视频业务,方案是使用阿里云的短视频服务,其中也有使用到阿里云的上传SDK,过程中有遇一个上传SDK的内部崩溃,崩溃栈如下:
Back traces starts.
java.lang.NullPointerException: Attempt to invoke interface method 'void com.alibaba.sdk.android.vod.upload.auth.AliyunVodAuth$VodAuthCallBack.onError(java.lang.String, java.lang.String)' on a null object reference
at com.alibaba.sdk.android.vod.upload.auth.AliyunVodAuth$2$1.onFailure(AliyunVodAuth.java:183)
at com.aliyun.vod.qupaiokhttp.OkHttpTask.onPostExecute(OkHttpTask.java:279)
at com.aliyun.vod.qupaiokhttp.OkHttpTask$2.run(OkHttpTask.java:228)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:224)
at android.os.Looper.loop(Looper.java:318)
at android.app.ActivityThread.main(ActivityThread.java:8744)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Back traces ends.
经分析是有调到VODSVideoUploadClientImpl的cancel方法,然后就调AliyunVodAuth的cancel方法
public void cancel() {
OSSLog.logDebug(TAG, "[VODSVideoUploader]: " + "cancel");
status = AliyunVodUploadStatus.VODSVideoStatusIdle;
step = AliyunVodUploadStep.VODSVideoStepIdle;
if (uploader != null) {
uploader.cancel();
fileList.clear();
videoUploadCallback = null;
}
if (aliyunVodAuth != null) {
//这里。。。
aliyunVodAuth.cancel();
aliyunVodAuth = null;
}
}
再看下aliyunVodAuth的方法,
很明显,vodAuthCallBack会被置空,那就只能说明判空不到位了呀!
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/291365b6a3a94a13a53eb9daedc68a51.png
在看下183行onError方法中的代码吧!
额外简单评价下相关的代码逻辑
哦,有点发散了,收敛回来一下!
遇到这个崩溃问题我的第一思路是先看看上传SDK有没有升级版本(我当时使用的是1.6.6),不行的话,就只能不调用cancel方法来规避可能出现的崩溃了。
那么我们就回到了今天的主题了,如何查看 阿里云maven仓中某个库有哪些版本?
maven库
我们要知道maven仓库本质上就是个文件下载服务,可以让我们去下载项目依赖的库,所以理论上maven仓库是也会提代WEB管理界面或入口方便大家查验、手动下载、管理相关的库的,只是这个WEB管理界面会大同小异而于。即我们可以从maven库的WEB端查验与下载我们关注的库
我们来看个google maven 库的WEB端,https://maven.google.com/web/index.html
相对比较简单,搜索功能也是简单的关键字搜索
阿里云
接着看下阿里云的,直接打开https://maven.aliyun.com/nexus/content/repositories/releases,我们就得到最终的WEB端入口地址
allprojects {
repositories {
maven { url "https://maven.aliyun.com/nexus/content/repositories/releases" }
}
}
建议使用gav方式搜索,gav 即group \artifact\ version等参数搜索库
实践
来搜索一下上传SDK的版本
implementation 'com.aliyun.video.android:upload:1.6.6'
其实这样搜索出来,所有的版本号也挺难出来的,不过可以定位到是那个仓库,我们可以点开仓库节点树来看看!