侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论

ijkPlayer SDK 源码导入到Android Studio中各种问题解决 第二篇

Z同学
2022-02-21 / 0 评论 / 1 点赞 / 252 阅读 / 2,548 字
温馨提示:
本文最后更新于 2022-02-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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错误

image-20220221113130199

这个问题,同样是由于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.

image-20220221113836757

这个问题很清晰,就是告诉我们。找不到com.google.android.exoplayer:exoplayer:r1.5.11. 这个库。

dl.google.comrepo.maven.apache 这两个仓库都下载不到exoplayer

按照上面的错误提示,我们打开ijkplayer-exo模块的build.gradle 文件。

image-20220221114103614

可以看到,该项目依赖了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效果如下:

image-20220221114933208

image-20220221114945569

但是,点击某个视频进行播放的时候,还是会崩溃。

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"

image-20220221115713277

项目都能正常编译了,为什么会提示找不到libijkffmpeg.so文件呢?

我们通过Android Studio 提供的查看apk包的功能看看我们编译后的apk中是否包含so文件

image-20220221115844166

在打开的文本包中,的确找不到libs文件夹。

image-20220221115918070

问题很明显了,我们编译的项目,并没有打包so文件。

解决方法

1.把项目中的so库依赖从本地依赖改为远程依赖

image-20220221120059915

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管理面板,下载更新就可以了。

image-20220221141926613

点击OK之后的更新下载界面如下:

image-20220221141827064

整个下载速度,和你的网络环境有比较大的关系,请注意你的网络环境是否稳定。

而整个我们要下载的ndk 20.0.5594570的大小为793.9MB

image-20220221142246505

安装成功后,就可以打包编译了。

最后的效果如下:

image-20220221150449375

ijkplayer-example 项目给跑起来了。

但是so库还是采用远程依赖的,还没有尝试本地编译。

1

评论区