前言
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进行调试,很开心的是官方提供了这么一个流程:
If you want to enable debugging ijkplayer(native modules) on Android Studio 2.2+: (experimental)
sh android/patch-debugging-with-lldb.sh armv7a
Install Android Studio 2.2(+)
Preference -> Android SDK -> SDK Tools
Select (LLDB, NDK, Android SDK Build-tools,Cmake) and install
Open an existing Android Studio project
Select android/ijkplayer
Sync Project with Gradle Files
Run -> Edit Configurations -> Debugger -> Symbol Directories
Add "ijkplayer-armv7a/.externalNativeBuild/ndkBuild/release/obj/local/armeabi-v7a" to Symbol Directories
Run -> Debug 'ijkplayer-example'
if you want to reverse patches:
sh patch-debugging-with-lldb.sh reverse armv7a
清楚明了对吧,but,几乎所有人都会遇到这一个问题,当你执行这句命令的时候:
sh android/patch-debugging-with-lldb.sh armv7a
恭喜你,一般你都会发现如下错误:
patch apply ==> armv7a
git apply ==> patches/0001-gitignore-ignore-.externalNativeBuild.patch
git apply ==> patches/0002-gradle-upgrade-build-tool-to-2.2.0-beta2.patch
error: patch failed: android/ijkplayer/ijkplayer-example/build.gradle:44
error: android/ijkplayer/ijkplayer-example/build.gradle: patch does not apply
git apply ==> patches/0003-armv7a-enable-debugging-with-LLDB.patch
error: patch failed: ijkmedia/ijkplayer/Android.mk:59
error: ijkmedia/ijkplayer/Android.mk: patch does not apply
error: patch failed: ijkmedia/ijksdl/Android.mk:70
error: ijkmedia/ijksdl/Android.mk: patch does not apply
git apply ==> patches/0004-armv7a-link-prebuilt-staic-libraries-of-ffmepg.patch
what?这个脚本竟然是有问题的!
当然这是因为这个脚本是用git一些修改patch进行代码还原,但是但是,由于这个脚本已经太久没有更新了,而ijkplayer的一些代码结构又有调整导致脚本无法从patch文件附带的这些信息把代码正确还原回去。
解决思路
我们通过查看patch-debugging-with-lldb.sh,可以发现我们只需要按照以下几个patch文件做对应源码修改就可以达到调试的目的:
andr