android工程 关联工程 报错,如何调试android ijkplayer

前言

ijkplayer是B站开源的基于FFmpeg的轻量级Android/iOS视频播放器,强烈建议在定制的播放器的时候以ijkplayer为基础进行二次开发。

对于二次开发时代码的调试时一件重中之重的事情;在iOS平台,ijkplayer可以直接在Xcode进行c/c++源码的debug调试工作,而Android平台的demo工程依赖的是ijkplayer编译完毕的so文件,而不是直接关联到ijkplayer的Android.mk编译脚本文件,所以要对c/c++这些native源码的调试的话就需要多折腾一些工作。

可能遇到的问题

如果我们要在Android Studio里面对ijkplayer的native进行调试,很开心的是官方提供了这么一个流程:

清楚明了对吧,but,几乎所有人都会遇到这一个问题,当你执行这句命令的时候:

恭喜你,一般你都会发现如下错误:

what?这个脚本竟然是有问题的!

当然这是因为这个脚本是用git一些修改patch进行代码还原,但是但是,由于这个脚本已经太久没有更新了,而ijkplayer的一些代码结构又有调整导致脚本无法从patch文件附带的这些信息把代码正确还原回去。

解决思路

我们通过查看patch-debugging-with-lldb.sh,可以发现我们只需要按照以下几个patch文件做对应源码修改就可以达到调试的目的:

例如随便打开里面一个文件例如0002-gradle-upgrade-build-tool-to-2.2.0-beta2.patch的内容如下:

留意这些+和-这些所在的行的内容,熟悉git的同学应该就知道,这里应该是要删除掉

然后把这一行添加上去

其他文件也是以此类推,当然ijkplayer的源码不断的迭代,可能有些修改已经对不上了,并且有些修改也并不需必须的,所以这里我们就不完整对patch里面的每一行修改都进行修改,而是分析出这些patch的主要更改点在什么地方。

解决重点

通过分析这几个patch文件,我们可以明确得出主要的修改如下:

ijkplayer-xxxabi工程只保留armv7a

修改文件:ijkplayer/setting.gradle

修改内容:将其他的非armv7a的cpu架构的库删掉或者注释

升级工程的gradle版本

修改文件:ijkplayer/build.gradle

修改内容:将gradle版本升级到2.2以上

ijkplayer-armv7a工程关联Android.mk编译脚本

修改文件:ijkplayer/ijkplayer-armv7a/build.gradle

修改内容:不要指定jni的lib库文件夹位置

修改内容:添加native代码主编译脚本Android.mk的文件路径

修改内容:设置编译脚本的参数

修改内容:开启工程的debug模式

修改ffmpeg的编译脚本

修改文件:ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk

修改内容:将ffmpeg的链接方式由动态库方式改为静态库方式

修改ijkplayer的编译脚本

修改文件:ijkplayer/ijkmedia/ijkplayer/Android.mk

修改内容:添加两个本地库-lm -lz

修改内容:将ffmpeg由动态链接方式改为静态链接方式

修改ijksdl编译脚本

修改文件:ijkplayer/ijkmedia/ijksdl/Android.mk

修改内容:将ffmpeg由动态链接方式改为静态链接方式

屏蔽掉java层对于ffmpeg动态库的加载

修改文件:ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java

修改内容:由于ffmpeg采用了静态库导入,所以这里并不需要加载ffmpeg的动态库。

example工程同步修改

修改文件:ijkplayer/ijkplayer-example/build.gradle

修改内容:将cpu的类型指定为armv7a,并且开启debug模式

修改内容:删除掉非armeabi-v7a工程的依赖

ndk库的关联

修改文件:ijkplayer/local.properties

修改内容:ijkplayer由于需要依赖ndk进行编译,所以我们要指定本机的ndk目录地址,并且确保这个ndk版本必须在r12到r14之间的版本,千万不要用到sdk里面的那个ndk。

关闭编译优化方便调试

修改文件:ijkplayer/ijkplayer-armv7a/src/main/jni/Application.mk

修改内容:c代码在编译的时候可能过度优化导致调试的时候看不到变量的值,我们可以将-O3的优化级别改为-O0

可能会遇到的错误

如果发现这个报错

在ijkplayer/ijkplayer-example/build.gradle中添加

如果发现这个报错

在ijkplayer/gradle.properties中添加

结语

这篇文章简单介绍了怎么在Android Studio中对ijkplayer工程进行源码调试的必要修改步骤,这也是对于分析源码或者二次开发都有非常有用的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值