ubuntu編譯android4.0.3原始碼
阿新 • • 發佈:2019-01-01
1.ubuntu安裝
a.下載64位桌面版映象檔案ubuntu-12.10-desktop-amd64
b.下載EasyBCD
新增新條目——>NeoGrub——>安裝——>配置
新增
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-xx.xx-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz
把ubuntu-xx.xx-desktop-amd64.is 換成自己的版本就可以了!
儲存設定
把ubuntu-xx.xx-desktop-amd64.iso檔案也拷貝到C盤裡解壓Ubuntu-xx.xx-desktop-amd64.iso中casper資料夾下面的vmlinuz和initrd.lz到C盤
c.重啟安裝
Ctrl+Alt+T 輸入 sudo umount -l /isodevice
安裝注意選擇分割槽,選Ext4檔案系統,掛載點為/,安裝啟動引導器的裝置選/dev/sda ATA
安裝完成後重啟
2.ubuntu環境搭建
a.安裝jdk
下載jdk1.6.0_43.bin檔案置於/usr/lib/jvm/java中
然後,在shell中執行:
程式碼:
sudo chmod u+x /usr/lib/jvm/java/jdk1.6.0_43.bin
修改bin檔案許可權,使其可執行
然後,執行
程式碼:
sudo /usr/lib/jvm/java/jdk1.6.0_12.bin
安裝完畢
b.jdk環境配置
sudo gedit /etc/environment
新增
JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_43
CLASSPATH=.:/usr/lib/jvm/java/jdk1.6.0_43/lib:/usr/lib/jvm/java/jdk1.6.0_43/jre/lib
PATH新增
:/usr/lib/jvm/java/jdk1.6.0_43/bin
執行
. /etc/environment
java -version 測試是否配置成功
c.android sdk
sudo gedit /etc/environment
PATH新增
:~/sdk/tools:~/sdk/platform-tools
執行
. /etc/environment
3.原始碼下載
編譯環境
參考http://source.android.com/source/initializing.html
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
原始碼下載
參考http://source.android.com/source/downloading.html
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
主線上最新版本
$ repo init -u https://android.googlesource.com/platform/manifest
分支,用-b引數制定branch名字
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1
填寫使用者名稱和email
$ repo sync
4.原始碼編譯
參考:http://source.android.com/source/building.html
http://wenku.baidu.com/view/626d4a2258fb770bf78a552f.html
a. 修改原始碼許可權
執行 cd WORKING_DIRECTORY
sudo chmod -R 777 *
b. 開始編譯
cd WORKING_DIRECTORY
make clean
make update-api
make -j4
注意:make update-api 只是首次編譯時需要執行,後面重新編譯時只需先make clean 再make -j4 。
編譯時間大概為40分鐘左右,編譯時間跟機器配置有關。
make -jx x代表開啟多少個執行緒來下載原始碼,有效利用CPU資源,但有可能會出現記憶體問題
如:
make: *** [out/host/linux-x86/obj/EXECUTABLES/clang_intermediates/clang] Error 1
這時候還是直接使用make方法
如編譯過程出錯,將會編譯中斷,並給出錯誤提示,可根據提示去百度搜索相關解決辦法
c. 編譯完成
編譯完成時,會在原始碼目錄生成out資料夾如:
out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
out/target/product/generic/system.img
out/target/product/generic/ramdisk.img
out/target/product/generic/userdata.img
5.原始碼編譯FQA
a.編譯出的apk缺少資原始檔
修改 build\target\product\generic.mk
新增 CUSTOM_LOCALES:= hdpi mdpi ldpi xhdpi xlarge
b.編譯出的檔案未被混淆
android在編譯時預設關閉了混淆選項,在build/core目錄有個proguard.flags檔案,其實在proguard的過程中,編譯器會呼叫包括本地目錄下和系統定義了的多個proguard.flags檔案,而在這個檔案中混淆的選項被禁止了, 故而編譯出來的apk仍未混淆。因此將如下句子註釋掉便可實現真正的混淆編譯:
# Don't obfuscate. We only need dead code striping.
-dontobfuscate(將該句加個#號註釋掉)
編譯Android4.0.3的常見錯誤:
參考:http://blog.csdn.net/yiyaaixuexi/article/details/8330645
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
gcc和g++版本太高了,把預設的4.6版本換為了4.4
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
如是64bit系統,則還需裝如下包
sudo apt-get install g++-4.4-multilib
6.環境相關FQA
a.adb的no permissions問題
可參考:http://developer.android.com/tools/device.html
sudo gedit /etc/udev/rules.d/51-android.rules
新增SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
更改許可權chmod a+r /etc/udev/rules.d/51-android.rules
重啟udev sudo /etc/init.d/udev restart
重新插撥usb
b.eclispe no java virtual machine was found錯誤
編輯eclipse.ini
在-vmargs 引數的前面新增
-vm
/usr/lib/jvm/java/jdk1.6.0_43/bin
c.安裝eclipse svn
安裝javaHL
sudo apt-get install libsvn-java
編輯eclipse.ini
在-vmargs下增加:
-Djava.library.path=/usr/lib/jni
Subclipse報Failed to load JavaHL Library錯誤:
將原來配置的
-Djava.library.path=/usr/lib/jni
改為
-Djava.library.path=/usr/lib/x86_64-linux-gnu/jni
7. 編譯原始碼模組
a.source build/envsetup.sh
b.使用mmm命令來編譯指定的模組,例如QuickSearchBox應用程式:
mmm packages/apps/QuickSearchBox/
c.apk檔案生成到 out/target/product/generic/system/app
8.其它ubuntu相關
a.新增Eclipse快捷方式
sudo gedit /usr/share/applications/eclipse.desktop
鍵入以下內容:將Exec和Icon中的路徑換為你的Eclipse的路徑,注意Ubuntu中是區分大小寫的。
[Desktop Entry]
Name=eclipse
Name[zh_CN]=eclipse
Comment=eclipse Client
Exec=/home/datao/eclipse/eclipse
Icon=/home/datao/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Application;
Encoding=UTF-8
StartupNotify=true
b.安裝svn軟體rabbitvcs
sudo add-apt-repository ppa:rabbitvcs/ppa 新增源
sudo apt-get update 更新倉庫
sudo apt-get install rabbitvcs-core rabbitvcs-nautilus3 rabbitvcs-cli 安裝相關軟體
安裝 RabbitVCS Gedit 擴充套件
sudo apt-get install rabbitvcs-gedit
最後輸入以下命令重啟 Nautilus 就可以使用 RabbitVCS 了。
nautilus -q
c.安裝samba訪問區域網伺服器
sudo apt-get install samba
a.下載64位桌面版映象檔案ubuntu-12.10-desktop-amd64
b.下載EasyBCD
新增新條目——>NeoGrub——>安裝——>配置
新增
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-xx.xx-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz
把ubuntu-xx.xx-desktop-amd64.is 換成自己的版本就可以了!
儲存設定
把ubuntu-xx.xx-desktop-amd64.iso檔案也拷貝到C盤裡解壓Ubuntu-xx.xx-desktop-amd64.iso中casper資料夾下面的vmlinuz和initrd.lz到C盤
c.重啟安裝
Ctrl+Alt+T 輸入 sudo umount -l /isodevice
安裝注意選擇分割槽,選Ext4檔案系統,掛載點為/,安裝啟動引導器的裝置選/dev/sda ATA
安裝完成後重啟
2.ubuntu環境搭建
a.安裝jdk
下載jdk1.6.0_43.bin檔案置於/usr/lib/jvm/java中
然後,在shell中執行:
程式碼:
sudo chmod u+x /usr/lib/jvm/java/jdk1.6.0_43.bin
修改bin檔案許可權,使其可執行
然後,執行
程式碼:
sudo /usr/lib/jvm/java/jdk1.6.0_12.bin
安裝完畢
b.jdk環境配置
sudo gedit /etc/environment
新增
JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_43
CLASSPATH=.:/usr/lib/jvm/java/jdk1.6.0_43/lib:/usr/lib/jvm/java/jdk1.6.0_43/jre/lib
PATH新增
:/usr/lib/jvm/java/jdk1.6.0_43/bin
執行
. /etc/environment
java -version 測試是否配置成功
c.android sdk
sudo gedit /etc/environment
PATH新增
:~/sdk/tools:~/sdk/platform-tools
執行
. /etc/environment
3.原始碼下載
編譯環境
參考http://source.android.com/source/initializing.html
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
原始碼下載
參考http://source.android.com/source/downloading.html
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
主線上最新版本
$ repo init -u https://android.googlesource.com/platform/manifest
分支,用-b引數制定branch名字
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1
填寫使用者名稱和email
$ repo sync
4.原始碼編譯
參考:http://source.android.com/source/building.html
http://wenku.baidu.com/view/626d4a2258fb770bf78a552f.html
a. 修改原始碼許可權
執行 cd WORKING_DIRECTORY
sudo chmod -R 777 *
b. 開始編譯
cd WORKING_DIRECTORY
make clean
make update-api
make -j4
注意:make update-api 只是首次編譯時需要執行,後面重新編譯時只需先make clean 再make -j4 。
編譯時間大概為40分鐘左右,編譯時間跟機器配置有關。
make -jx x代表開啟多少個執行緒來下載原始碼,有效利用CPU資源,但有可能會出現記憶體問題
如:
make: *** [out/host/linux-x86/obj/EXECUTABLES/clang_intermediates/clang] Error 1
這時候還是直接使用make方法
如編譯過程出錯,將會編譯中斷,並給出錯誤提示,可根據提示去百度搜索相關解決辦法
c. 編譯完成
編譯完成時,會在原始碼目錄生成out資料夾如:
out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
out/target/product/generic/system.img
out/target/product/generic/ramdisk.img
out/target/product/generic/userdata.img
5.原始碼編譯FQA
a.編譯出的apk缺少資原始檔
修改 build\target\product\generic.mk
新增 CUSTOM_LOCALES:= hdpi mdpi ldpi xhdpi xlarge
b.編譯出的檔案未被混淆
android在編譯時預設關閉了混淆選項,在build/core目錄有個proguard.flags檔案,其實在proguard的過程中,編譯器會呼叫包括本地目錄下和系統定義了的多個proguard.flags檔案,而在這個檔案中混淆的選項被禁止了, 故而編譯出來的apk仍未混淆。因此將如下句子註釋掉便可實現真正的混淆編譯:
# Don't obfuscate. We only need dead code striping.
-dontobfuscate(將該句加個#號註釋掉)
編譯Android4.0.3的常見錯誤:
參考:http://blog.csdn.net/yiyaaixuexi/article/details/8330645
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
gcc和g++版本太高了,把預設的4.6版本換為了4.4
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
如是64bit系統,則還需裝如下包
sudo apt-get install g++-4.4-multilib
6.環境相關FQA
a.adb的no permissions問題
可參考:http://developer.android.com/tools/device.html
sudo gedit /etc/udev/rules.d/51-android.rules
新增SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
更改許可權chmod a+r /etc/udev/rules.d/51-android.rules
重啟udev sudo /etc/init.d/udev restart
重新插撥usb
b.eclispe no java virtual machine was found錯誤
編輯eclipse.ini
在-vmargs 引數的前面新增
-vm
/usr/lib/jvm/java/jdk1.6.0_43/bin
c.安裝eclipse svn
安裝javaHL
sudo apt-get install libsvn-java
編輯eclipse.ini
在-vmargs下增加:
-Djava.library.path=/usr/lib/jni
Subclipse報Failed to load JavaHL Library錯誤:
將原來配置的
-Djava.library.path=/usr/lib/jni
改為
-Djava.library.path=/usr/lib/x86_64-linux-gnu/jni
7. 編譯原始碼模組
a.source build/envsetup.sh
b.使用mmm命令來編譯指定的模組,例如QuickSearchBox應用程式:
mmm packages/apps/QuickSearchBox/
c.apk檔案生成到 out/target/product/generic/system/app
8.其它ubuntu相關
a.新增Eclipse快捷方式
sudo gedit /usr/share/applications/eclipse.desktop
鍵入以下內容:將Exec和Icon中的路徑換為你的Eclipse的路徑,注意Ubuntu中是區分大小寫的。
[Desktop Entry]
Name=eclipse
Name[zh_CN]=eclipse
Comment=eclipse Client
Exec=/home/datao/eclipse/eclipse
Icon=/home/datao/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Application;
Encoding=UTF-8
StartupNotify=true
b.安裝svn軟體rabbitvcs
sudo add-apt-repository ppa:rabbitvcs/ppa 新增源
sudo apt-get update 更新倉庫
sudo apt-get install rabbitvcs-core rabbitvcs-nautilus3 rabbitvcs-cli 安裝相關軟體
安裝 RabbitVCS Gedit 擴充套件
sudo apt-get install rabbitvcs-gedit
最後輸入以下命令重啟 Nautilus 就可以使用 RabbitVCS 了。
nautilus -q
c.安裝samba訪問區域網伺服器
sudo apt-get install samba