android studio引入ijkplayer二次开发
Posted 原总破局
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android studio引入ijkplayer二次开发相关的知识,希望对你有一定的参考价值。
我们命令行打出的包是so库,无法直接debug,对于阅读代码已经修改不是很容易。
我们今天把代码引入android studio。
本文参考了如何将ijkplayer引入AS工程中进行二次开发_音视频开发进阶-CSDN博客
编译成功ijk后
我们打开ijk目录
选择我们需要的cpu架构
我们以ijkplayer-arm64为例
1、修改android/ijkplayer/ijkplayer-arm64/build.gradle
android
defaultConfig
//增加下面内容
externalNativeBuild
ndkBuild
arguments "NDK_APPLICATION:=src/main/jni/Application.mk"
abiFilters "arm64-v8a"
// 删除掉下面的内容
// sourceSets.main
// jniLibs.srcDirs 'src/main/libs'
// jni.srcDirs = [] // This prevents the auto generation of Android.mk
//
//增加下面内容
externalNativeBuild
ndkBuild
path "src/main/jni/Android.mk"
//增加debug模式
buildTypes
debug
debuggable true
jniDebuggable true
ndk
debuggable true
2、将ijkplayer-arm64作为module引入android studio,不要直接从硬盘目录里面copy因为里面有些文件是链接。可以在androidStudio当中copy。
3、我们知道ijk的底层调用ffmpeg,所以我们还要引入ffmpeg。
我们在ijkplayer的源码中,可以看到android/contrib/build有编译成功的ffmpeg各种架构的动态库
我们把android/contrib/build/ffmpeg-arm64/output复制到我们android工程的主目录下
4、我们打开引入模块的Android.mk
可以看到里面是
# Copyright (c) 2013 Bilibili
# copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
#
# This file is part of ijkPlayer.
#
# ijkPlayer is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# ijkPlayer is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with ijkPlayer; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
LOCAL_PATH := $(call my-dir)
MY_APP_JNI_ROOT := $(realpath $(LOCAL_PATH))
MY_APP_PRJ_ROOT := $(realpath $(MY_APP_JNI_ROOT)/..)
MY_APP_ANDROID_ROOT := $(realpath $(MY_APP_PRJ_ROOT)/../../../..)
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-armv7a/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),armeabi)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-armv5/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-arm64/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),x86)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-x86/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
ifeq ($(TARGET_ARCH_ABI),x86_64)
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath $(MY_APP_ANDROID_ROOT)/contrib/build/ffmpeg-x86_64/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
endif
include $(call all-subdir-makefiles)
设置ffmpeg的路径
这里如果相对路径搞不明白,完全可以写成绝对路径
我这里就是下面这样写的
MY_APP_FFMPEG_OUTPUT_PATH := $(realpath /Users/user/code/yuanxuzhen/ijkplayer-demo/android/contrib/build/ffmpeg-arm64/output)
MY_APP_FFMPEG_INCLUDE_PATH := $(realpath $(MY_APP_FFMPEG_OUTPUT_PATH)/include)
5、加入ndk的路径
local.properties
sdk.dir=/Users/user/Library/Android/sdk
ndk.dir=/Users/user/Library/Android/sdk/ndk/android-ndk-r12b
6 、在使用ijk的module引入ijkplayer-arm64
implementation project(path: ':ijkplayer-arm64')
通过上面的代码我们就可以正常使用了与调试了
以上是关于android studio引入ijkplayer二次开发的主要内容,如果未能解决你的问题,请参考以下文章
解决Android Studio processDebugResources问题
ijkplayer编译 Android 版本的 ijkplayer ⑥ ( 进入 ijkplayer-android/android 目录 | 执行 compile-ijk.sh 脚本完成编译 )
ijkplayer编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
ijkplayer编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )
ijkplayer编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )