系統:ubuntu12.04
代碼:git://git.videolan.org/vlc-ports/android.git
代碼版本:375646994d0602
年初的時候搞了三個月的vlc android。昨天看到vlc android的beta版本發佈了,決定編譯一個看看效果。把本身這次的編譯過程記錄下來,供朋友們參考。下文中的文件路徑,要替換成正確的路徑。
1. 搭建ubuntu android開發環境
要找一個本身喜歡的目錄安裝jdk、SDK、NDK、ANT
1.1 安裝jdk
參考我轉發的《Ubuntu11.10下安裝 jdk-6u30-linux-i586.bin》
1.2 安裝SDK
下載SDK:http://developer.android.com/sdk/index.html
把SDK解壓到一個目錄下:
- $ sudo tar -xvf android-sdk_r20-linux.tgz
1.3 安裝NDK
下載NDK:
http://developer.android.com/tools/sdk/ndk/index.html
把NDK解壓到一個目錄下:
- $ sudo bzip2 -d android-ndk-r5b-linux-x86.tar.bz2
- $ sudo tar -xvf android-ndk-r5b-linux-x86.tar
1.4 安裝ANT
下載ANT:
http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.8.4-bin.tar.gz
解壓:
- $ sudo tar -xvf apache-ant-1.8.4-bin.tar.gz
設置ant環境變量:
在文件末尾添加:
- export ANT_HOME=/home/workenv/apache-ant-1.8.4
- PATH=$PATH:/home/workenv/apache-ant-1.8.4
設置生效:
檢查一下是否安裝成功:
應該顯示:
- Apache Ant(TM) version 1.8.4 compiled on May 22 2012
1.5 安裝eclipse:
- $ sudo cp eclipse-jee-indigo-SR1-linux-gtk.tar.gz ../workenv/
- $ cd ../workenv/
- $ sudo gzip -d eclipse-jee-indigo-SR1-linux-gtk.tar.gz
- $ sudo tar -xvf eclipse-jee-indigo-SR1-linux-gtk.tar
- $ sudo chmod 777 -R eclipse/
- $ rm eclipse-jee-indigo-SR1-linux-gtk.tar
1.6 安裝ADT插件
啓動Eclipse選擇「Help」>「InstallNewSoftware...」
選擇Add Name:ADT Location:http://dl-ssl.google.com/Android/eclipse/
選擇:AndroidDDMS和AndroidDevelopmentTools
1.7 更新Android SDK API
Windows > Preferences > Android > SDK Location
填入SDK的路徑。
Windows > Android SDK Manger
選擇 2.2 和 4.1
Install
2. 安裝vlc依賴的其餘庫:
- $ sudo apt-get build-dep vlc
3. 編譯
3.1 設置環境變量
- $ export ANDROID_SDK=/home/workenv/android-sdk-linux
- $ export ANDROID_NDK=/home/workenv/android-ndk-r8
- $ export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools若是是 ARMv7和以上並支持NEON的設備:
- $ export ANDROID_ABI=armeabi-v7a
若是是 ARMv7和以上可是不支持NEON的設備:
- $ export ANDROID_ABI=armeabi-v7a
- $ export NO_NEON=1
如何查看cpu類型和是否支持NEON?打開手機或者pad下的這個文件/proc/cpuinfo,會看到相似以下的內容:
- Processor : ARMv7 Processor rev 2 (v7l)
- BogoMIPS : 998.36
- Features : swp half thumb fastmult vfp edsp neon vfpv3
- CPU implementer : 0x41
- CPU architecture : 7
- CPU variant : 0x3
- CPU part : 0xc08
- CPU revision : 2
-
- Hardware : P1Lite Samsung Board
- Revision : 0004
- Serial : 0000000000000000
這裏就能到ARMv7並支持neon,Features裏有neon,就表示支持neon,不然不支持。
3.2 獲取代碼
- $ git clone git://git.videolan.org/vlc-ports/android.git
- $ cd android
3.3 編譯
compile.sh的執行過程,就是整個的編譯過程,大體過程以下:
a. 下載vlc代碼:compile.sh的42行 git clone git://git.videolan.org/vlc.git vlc。
b. 並check out vlc代碼到e75d2024這個版本:compile.sh的44行 git checkout -B android ${TESTED_HASH}
c. 編譯全部須要的第三方庫,先下載再編譯,這個過程須要很長時間,還可能下載不成功,若是沒法下載某些庫,就手動下載下來,並放到這個目錄下便可:android/vlc/contrib/tarballs。
d. vlc的Configuring。
e. vlc的編譯。
f. 編譯android部分代碼並連接vlc so庫。
4 解決編譯過程當中遇到的問題
4.1 錯誤 C compiler cannot create executables
- configure: error: C compiler cannot create executables
- See `config.log' for more details.
找到config.log並打開:
- $ vim ./vlc/contrib/android/a52dec/config.log
發現這樣一行提示錯誤:
- /home/workenv/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: crtbegin_dynamic.o: No such file: No such file or directory
crtbegin_dynamic.o找不到,去NDK目錄下找crtbegin_dynamic.o:
- $ find -name crtbegin_dynamic.o
找到不少:
- ./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o
- ./platforms/android-14/arch-mips/usr/lib/crtbegin_dynamic.o
- ./platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o
- ./platforms/android-3/arch-arm/usr/lib/crtbegin_dynamic.o
- ./platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o
- ./platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o
- ./platforms/android-9/arch-x86/usr/lib/crtbegin_dynamic.o
- ./platforms/android-9/arch-mips/usr/lib/crtbegin_dynamic.o
- ./platforms/android-9/arch-arm/usr/lib/crtbegin_dynamic.o
- ./platforms/android-4/arch-arm/usr/lib/crtbegin_dynamic.o
查看一下權限
- $ ll ./platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o
發現普通用戶沒有讀權限,應該就是這個緣由了。改變ndk裏文件權限:
- $ sudo chmod 755 -R android-ndk-r8
再編譯:
沒有提示這個錯誤了。
4.2 ant錯誤
- /bin/sh: 1: ant: Permission denied
提示沒有安裝ant,已經安裝了,從新設置一下環境就OK了:
4.3
- BUILD FAILED
- /home/workenv/android-sdk-linux/tools/ant/build.xml:518: Unable to resolve project target 'android-15'
- $ vim vlc-android/project.properties
把15改爲16,由於剛纔我安裝sdk api的時候只安裝了8和16。
- $ vim vlc-android/AndroidManifest.xml
把android:targetSdkVersion="15"改爲android:targetSdkVersion="16" 終於:BUILD SUCCESSFUL 後記: 因爲以前編譯過不少次,因此此次編譯還算順利。若是有朋友遇到vlc裏的某些代碼編譯出錯的問題,那麼極可能是權限、git checkout、git am打補丁的問題。後續我會總結一些vlc android的代碼架構方面的東西,也會長期學習、關注vlc,但願與你們一塊兒交流。