ijkPlayer SDK 源码导入到Android Studio中各种问题解决 第二篇
前言
在导入源码到Android Studio之中后,我们继续编译过程中还是会有很多问题。
我在前篇介绍了部分的问题解决:IjkPlayer SDK 源码导入到Android Studio中各种问题解决 第一篇 (zinyan.com)
今天继续接着往下记录我碰见的问题,以及修改方法吧。
1. A problem occurred configuring project ':ijkplayer-example'. All flavors must now belong to a named flavor dimension.
我们在代码没有提示错误的情况下尝试点击运行。出现Flavors
错误
这个问题,同样是由于ijkplayer
项目中的build.gradle
版本太低造成的。
因为Android
要求我们在Flavors
中添加一个维度名称。这个东西我们可以随意配置
解决方法
flavorDimensions("ijk") //添加这个就可以了。
productFlavors {
all32 { minSdkVersion 9 }
all64 { minSdkVersion 21 }
// armv5 {}
// armv7a {}
// arm64 { minSdkVersion 21 }
// x86 {}
}
flavorDimensions
括号里面的内容,你是可以随意进行定义的。
2. Could not find com.google.android.exoplayer:exoplayer:r1.5.11.
这个问题很清晰,就是告诉我们。找不到com.google.android.exoplayer:exoplayer:r1.5.11.
这个库。
从dl.google.com
和repo.maven.apache
这两个仓库都下载不到exoplayer
库
按照上面的错误提示,我们打开ijkplayer-exo
模块的build.gradle
文件。
可以看到,该项目依赖了exoplayer:r1.5.11
。
解决方法
出现上面的问题最大的可能是你的电脑当前访问google
等仓库不稳定。
因为那些库都是国外的服务器。你可以切换到阿里云的镜像仓库。
在Project
目录下的build.gradle
文件中添加下面的配置
allprojects {
repositories {
// jcenter()
maven {
url 'https://maven.aliyun.com/repository/public/'
}
maven{
url 'https://maven.aliyun.com/repository/google/'
}
google()
mavenCentral()
}
}
然后再重新build
一下项目,就可以了。
在将这些问题解决完毕后,我的电脑上就能直接打包ijkplayer-example项目了
编译后的app效果如下:
但是,点击某个视频进行播放的时候,还是会崩溃。
3. java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
我们编译成功后的apk 在点击视频进行运行的时候,会提示找不到本地库
Process: tv.danmaku.ijk.media.example, PID: 3671
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/tv.danmaku.ijk.media.example-8iJ8BjZdtOpJLweucNuudw==/base.apk"],nativeLibraryDirectories=[/data/app/tv.danmaku.ijk.media.example-8iJ8BjZdtOpJLweucNuudw==/lib/x86, /system/lib]]] couldn't find "libijkffmpeg.so"
项目都能正常编译了,为什么会提示找不到libijkffmpeg.so
文件呢?
我们通过Android Studio
提供的查看apk包的功能看看我们编译后的apk
中是否包含so
文件
在打开的文本包中,的确找不到libs
文件夹。
问题很明显了,我们编译的项目,并没有打包so
文件。
解决方法
1.把项目中的so库依赖从本地依赖改为远程依赖
2.我们自己编译so文件并导入。
4. No version of NDK matched the requested version 20.0.5594570.
* What went wrong:
Execution failed for task ':ijkplayer-example:stripAll64DebugDebugSymbols'.
> No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.4.7075529, 22.0.7026061, 22.1.7171670, 22.1.7171670
我们如果直接依赖,就会提示上面的错误信息了。
意思就是,NDK的任何版本都与请求的版本20.0.5594570
不匹配。而我本地提供的版本为:
21.4.7075529, 22.0.7026061, 22.1.7171670, 22.1.7171670
怎么办?
很简单,下载一个20.0.5594570
版本的ndk就可以了
解决方法
通过 Android Studio中的 SDK管理面板,下载更新就可以了。
点击OK之后的更新下载界面如下:
整个下载速度,和你的网络环境有比较大的关系,请注意你的网络环境是否稳定。
而整个我们要下载的ndk 20.0.5594570
的大小为793.9MB。
安装成功后,就可以打包编译了。
最后的效果如下:
将ijkplayer-example
项目给跑起来了。
但是so库还是采用远程依赖的,还没有尝试本地编译。
评论区