编译vlc

编译vlc源

官方文档:https://wiki.videolan.org/AndroidCompile/

我们按照官方文档首先需要下载相应的软件:

sudo apt-get install automake ant autopoint cmake build-essential libtool-bin  patch pkg-config protobuf-compiler ragel subversion unzip git openjdk-8-jre openjdk-8-jdk flex python wget

请不要直接复制官网的软件下载,会出现无法下载的问题,因为\和空格无法删除

然后我们需要jdk1.8,首先我们可以先看下Java的版本:java -version

openjdk version "11.0.6" 2020-01-14

OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)

OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode)

有一些有自带的jdk,如上,这时候就需要重新下载1.8,为什么?

如果不下载1.8并且配置的话会报下面的这个错误

compile:

    [javac] /root/myworkdir/vlc-android/vlc/contrib/contrib-android-aarch64-linux-android/bluray/src/libbluray/bdj/build.xml:26: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

    [javac] Compiling 33 source files to /root/myworkdir/vlc-android/vlc/contrib/contrib-android-aarch64-linux-android/bluray/src/libbluray/bdj/build

    [javac] warning: [options] bootstrap class path not set in conjunction with -source 5

    [javac] error: Source option 5 is no longer supported. Use 6 or later.

    [javac] error: Target option 1.5 is no longer supported. Use 1.6 or later.

BUILD FAILED

/root/myworkdir/vlc-android/vlc/contrib/contrib-android-aarch64-linux-android/bluray/src/libbluray/bdj/build.xml:26: Compile failed; see the compiler error output for details.

Total time: 1 second

Makefile:2618: recipe for target 'all-local' failed

make[1]: *** [all-local] Error 1

make[1]: Leaving directory '/root/myworkdir/vlc-android/vlc/contrib/contrib-android-aarch64-linux-android/bluray'

../../contrib/src/bluray/rules.mak:56: recipe for target '.bluray' failed

make: *** [.bluray] Error 2

这个错误就是需要一个1.8的jdk,这时候我们把Linux版本的jdk1.8下载好之后(这里不贴链接),需要配置Java环境

sudo vim /etc/profile

在最后一行加上

export JAVA_HOME=/root/myworkdir/jdk1.8.0_11//这里写上自己的jdk路径

export JAVA_BIN=$JAVA_HOME/bin

export JAVA_LIB=$JAVA_HOME/lib

export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar

export PATH=$JAVA_BIN:$PATH

开始编译

./buildsystem/compile.sh -a arm64-v8(这个地方填写的是cpu版本)

如果你不知道cpu版本怎么写,可以

./buildsystem/compile.sh --help

进行查看

Use -a to set the ARCH:

  ARM:    (armeabi-v7a|arm)

  ARM64:  (arm64-v8a|arm64)

  X86:    x86, x86_64

Use --release to build in release mode

Use --signrelease to build in release mode and sign apk, see vlc-android/build.gradle

Use -s to set your keystore file and -p for the password

Use -c to get a ChromeOS build

Use -l to build only LibVLC

Use -b to bypass libvlc source checks (vlc custom sources)

现在就正式开始编译

这时候我们会遇到第一个问题

You must define ANDROID_NDK, ANDROID_SDK before starting.

They must point to your NDK and SDK directories.

所以我们需要配置Android sdk和ndk的环境变量

export ADNROID_SDK=/path

export ANDROID_NDK=/path

export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools

直接执行命令可以配置一个临时的环境变量

但是可能会造成失败的情况所以我们需要更改我们的~/.bashrc文件来为当前用户配置环境变量

sudo vim ~/.bashrc

也可以修改/etc/profile文件让我们的系统新增环境变量

sudo vim /etc/profile

这个 时候我们就把当前的环境变量配置完成,现在可以执行编译

buildsystem/compile.sh -a <ABI>

请注意,我们新手学习Linux编译的时候会直接复制造成不必要的错误,一定要注意,在vlc-Android里的这个compile.sh是一个可执行文件,所以之前的那其实是一个路径,第二是参数,第三是参数的值请一定注意,上一篇文章已经说过-a参数的值怎么去写这里不多赘述,然后执行编译

我们运行脚本之后会发现一个问题,那就是会出现

Download Gradle

我们知道这是在下载Android的gradle,但是就是这个访问速度着实让人难受所以我们需要去修改compile.sh脚本

sudo vim compile.sh

我们可以看到这一段

if [ ! -d "gradle/wrapper" ]; then

    diagnostic "Downloading gradle"

    GRADLE_VERSION=5.6.4

    GRADLE_URL=https://download.videolan.org/pub/contrib/gradle/gradle-${GRADLE_VERSION}-bin.zip

    wget ${GRADLE_URL} 2>/dev/null || curl -O ${GRADLE_URL} || fail "gradle: download failed"

    unzip -o gradle-${GRADLE_VERSION}-bin.zip || fail "gradle: unzip failed"

    ./gradle-${GRADLE_VERSION}/bin/gradle wrapper || fail "gradle: wrapper failed"

    ./gradlew -version || fail "gradle: wrapper failed"

    chmod a+x gradlew

    rm -rf gradle-${GRADLE_VERSION}-bin.zip

fi

很明显这里是说如果没找到gradle/wrapper这个目录,那就下载gradle

所以我们可以修改这段脚本,删掉下载的代码,把我们下载好的gradle解压,请注意这个脚本用的是5.6.4可以修改成你自己下载好的,我用的就是5.6.4,gradle:https://services.gradle.org/distributions/

if [ ! -d "gradle/wrapper" ]; then

#    diagnostic "Downloading gradle"

    GRADLE_VERSION=5.6.4

#  GRADLE_URL=https://download.videolan.org/pub/contrib/gradle/gradle-${GRADLE_VERSION}-bin.zip

#  wget ${GRADLE_URL} 2>/dev/null || curl -O ${GRADLE_URL} || fail "gradle: download failed"

    unzip -o gradle-${GRADLE_VERSION}-bin.zip || fail "gradle: unzip failed"

    ./gradle-${GRADLE_VERSION}/bin/gradle wrapper || fail "gradle: wrapper failed"

    ./gradlew -version || fail "gradle: wrapper failed"

    chmod a+x gradlew

    rm -rf gradle-${GRADLE_VERSION}-bin.zip

fi

然后我们又会遇到一个问题,那就是又需要下载vlc,同样也是访问速度的问题,我们需要修改这个脚本的这一段

TESTED_HASH=7f204ee

VLC_REPOSITORY=https://git.videolan.org/git/vlc/vlc-3.0.git

if [ ! -d "vlc" ]; then

    diagnostic "VLC sources: not found, cloning"

    git clone "${VLC_REPOSITORY}" vlc || fail "VLC sources: git clone failed"

    cd vlc

    diagnostic "VLC sources: resetting to the TESTED_HASH commit (${TESTED_HASH})"

    git reset --hard ${TESTED_HASH} || fail "VLC sources: TESTED_HASH ${TESTED_HASH} not found"

    diagnostic "VLC sources: applying custom patches"

    # Keep Message-Id inside commits description to track them afterwards

    git am --message-id ../libvlc/patches/vlc3/*.patch || fail "VLC sources: cannot apply custom patches"

    cd ..

else

    diagnostic "VLC source: found sources, leaving untouched"

fi

if [ "$BYPASS_VLC_SRC_CHECKS" = 1 ]; then

    diagnostic "VLC sources: Bypassing checks (required by option)"

else

    diagnostic "VLC sources: Checking TESTED_HASH and patches presence"

    diagnostic "NOTE: checks can be bypass by adding '-b' option to this script."

    cd vlc

    git cat-file -e ${TESTED_HASH} 2> /dev/null || \

        fail "Error: Your vlc checkout does not contain the latest tested commit: ${TESTED_HASH}"

    for patch_file in ../libvlc/patches/vlc3/*.patch; do

        check_patch_is_applied "$patch_file"

    done

    cd ..

fi

删掉下载的代码,把自己下载好的vlc解压到vlc-Android里,请注意这里的目录名称必须为vlc

然后我们可以继续开始编译vlc

后面我们还会遇到一个问题,那就是gradle的问题,我当时报的错是什么什么byte exist,然后再次执行编译的时候又会说什么compile fail 然后我找了一些资料还是没找到,但是看到一个说是修改为Android studio的jdk,所以我感觉是高版本的gradle或者说是vlc会出现的问题,所以我把jdk的路径改成了Android studio的这时候就通过了,对于下载速度慢的问题我是采取的用服务器的方式,我建议还是用服务器,因为有可能配置方面可能考虑不周全,如果一个一个去处理很麻烦,一定要注意是有外网的服务器

./libvlc/build/outputs/aar/libvlc-armv7-3.3.0-eap03.aar,这里是结果

链接:https://pan.baidu.com/s/1NvFDPvCTm9WPDym3UT1vxA

提取码:rm7c

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 8,001评论 0 3
  • 前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那...
    passiontim阅读 8,627评论 1 46
  • Linux 和 Android 下 VLC 都已经初具雏形了,优化和bug方面最近没什么思路,所以准备先试着交叉编...
    团不慌阅读 11,002评论 5 2
  • 在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译...
    涅槃1992阅读 192,261评论 104 450
  • 这个不寻常的春节,是从一段美好的日子开始的。放假的时候一切都挺顺利。家里一切安好,单位上工作圆满结束,孩子们成...
    心语花香阅读 3,328评论 1 3

友情链接更多精彩内容