編譯vlc源
官方文檔:https://wiki.videolan.org/AndroidCompile/
我們按照官方文檔首先需要下載相應(yīng)的軟件:
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
請不要直接復(fù)制官網(wǎng)的軟件下載土辩,會出現(xiàn)無法下載的問題鳖敷,因為\和空格無法刪除
然后我們需要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環(huán)境
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
進(jìn)行查看
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)
現(xiàn)在就正式開始編譯
這時候我們會遇到第一個問題
You must define ANDROID_NDK, ANDROID_SDK before starting.
They must point to your NDK and SDK directories.
所以我們需要配置Android sdk和ndk的環(huán)境變量
export ADNROID_SDK=/path
export ANDROID_NDK=/path
export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools
直接執(zhí)行命令可以配置一個臨時的環(huán)境變量
但是可能會造成失敗的情況所以我們需要更改我們的~/.bashrc文件來為當(dāng)前用戶配置環(huán)境變量
sudo vim ~/.bashrc
也可以修改/etc/profile文件讓我們的系統(tǒng)新增環(huán)境變量
sudo vim /etc/profile
這個 時候我們就把當(dāng)前的環(huán)境變量配置完成氮发,現(xiàn)在可以執(zhí)行編譯
buildsystem/compile.sh -a <ABI>
請注意渴肉,我們新手學(xué)習(xí)Linux編譯的時候會直接復(fù)制造成不必要的錯誤,一定要注意爽冕,在vlc-Android里的這個compile.sh是一個可執(zhí)行文件仇祭,所以之前的那其實是一個路徑,第二是參數(shù)颈畸,第三是參數(shù)的值請一定注意乌奇,上一篇文章已經(jīng)說過-a參數(shù)的值怎么去寫這里不多贅述,然后執(zhí)行編譯
我們運行腳本之后會發(fā)現(xiàn)一個問題眯娱,那就是會出現(xiàn)
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
然后我們可以繼續(xù)開始編譯vlc
后面我們還會遇到一個問題昌粤,那就是gradle的問題,我當(dāng)時報的錯是什么什么byte exist啄刹,然后再次執(zhí)行編譯的時候又會說什么compile fail 然后我找了一些資料還是沒找到涮坐,但是看到一個說是修改為Android studio的jdk,所以我感覺是高版本的gradle或者說是vlc會出現(xiàn)的問題誓军,所以我把jdk的路徑改成了Android studio的這時候就通過了袱讹,對于下載速度慢的問題我是采取的用服務(wù)器的方式,我建議還是用服務(wù)器昵时,因為有可能配置方面可能考慮不周全捷雕,如果一個一個去處理很麻煩椒丧,一定要注意是有外網(wǎng)的服務(wù)器
./libvlc/build/outputs/aar/libvlc-armv7-3.3.0-eap03.aar,這里是結(jié)果
鏈接:https://pan.baidu.com/s/1NvFDPvCTm9WPDym3UT1vxA
提取碼:rm7c