Ubuntu 11.10下でandroidのソースをコンパイルします。4.0.3

14765 ワード

前の記事では、読者のために『Ubuntu Linux下androidソースのダウンロード方法』「Ubuntu 11.10下にandroidを配置するEclipse開発環境」及び設定中に発生した問題と解決方法を紹介しましたが、ここでは引き続きUbuntu 11.10下のandroidソース4.0.3のコンパイル方法を紹介します。
1、コンパイル環境を初期化する
ソフトウェアの需要:Python 2.5-2.7、可能http://www.python.org/download/ダウンロード(Ubuntu 11.10持参)。JDK 6:Gigngerbreedまたは更新バージョンをコンパイルします。JDK 5:Froyoまたはもっと前のバージョンをコンパイルします。http://java.sun.com/javase/downloads/ダウンロードできるし、Ubuntuソフトウェアセンターを通じてダウンロードすると便利です。GMT.7または更新されたバージョンは、http://git-scm.com/downloadダウンロードできます。または直接端末の下でsudo ap-get install gitをダウンロードすればいいです。
JDKをインストールしてUbuntuの下でJDKをインストールするのは比較的に簡単で、ソフトウェアセンターで直接探してインストールすることができます。以下の方法でインストールすることもできます。JAVA 6をインストールします。
1 $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
2 $ sudo apt-get update
3 $ sudo apt-get install sun-java6-jdk

設置JAVA 5:
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"

$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"

$ sudo apt-get update

$ sudo apt-get install sun-java5-jdk

コンパイルに必要なパッケージをインストールします。
1 $ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
2
3 $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown libxml2-utils xsltproc
 
USBアクセス権限の設定
GNU/Linuxシステム(特にUbuntuシステムの下)では、デフォルトの設定では、普通のユーザーはUSBデバイスに直接アクセスできず、システムのいくつかの構成が必要です。スーパーユーザで新しいプロファイル/etc/udev/rules.d/51-android.rulesを作成し、以下の内容を新構成ファイルにコピーします。
 1 # adb protocol on passion (Nexus One)
2 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
3 # fastboot protocol on passion (Nexus One)
4 SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
5 # adb protocol on crespo/crespo4g (Nexus S)
6 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
7 # fastboot protocol on crespo/crespo4g (Nexus S)
8 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
9 # adb protocol on stingray/wingray (Xoom)
10 SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
11 # fastboot protocol on stingray/wingray (Xoom)
12 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
13 # adb protocol on maguro/toro (Galaxy Nexus)
14 SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
15 # fastboot protocol on maguro/toro (Galaxy Nexus)
16 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
17 # adb protocol on panda (PandaBoard)
18 SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
19 # fastboot protocol on panda (PandaBoard)
20 SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
         
“<username>”
ユーザー名に変更します。
2、設定cache ccacheは、生成された情報をキャッシュしてコンパイルし、コンパイルされた特定の部分でキャッシュされた情報、例えばヘッダファイルを使って、cppを使ってこれらの情報を解析するのに必要な時間を節約するコンパイラキャッシュです。リスト2のファイルをコンパイルすれば、他のヘッダに対する参照が含まれていると仮定して、cctheはそのファイルのcpp-parsedバージョンをincludeステートメントの代わりに使用します。cctacheは最終的なテキストをファイルにコピーするだけで、すぐにコンパイルされるようにします。本当に読み、理解し、その内容を説明するのではありません。
このステップはオプションです。私はコンパイルの時にcctacheを配置していません。最後のコンパイルの時間は少なくとも6時間以上かかりました。cctacheを配置した後のコンパイルの速度はまだ試したことがありませんが、ここではやはり読者にコンパイルの時間を節約するように配置してください。設定方法は以下の通りです。ユーザディレクトリの下のbashrcを開いて、次の文をファイルの後ろに追加して終了を保存します。
export USE_CCACHE=1

デフォルトではcache(キャッシュ)は~/.cacheディレクトリに保存されます。ホームディレクトリがNFSまたは他の非ローカルファイルシステムにある場合は、次の文も追加されます。bashrcに保存して終了します。
export CCACHE_DIR=<path-to-your-cache-directory>

<path-to-your-cache-directory>   cache     。
推奨されたcacheディレクトリのサイズは50-100 GBで、コマンドラインでは以下のコマンドが実行されます。
prebuilt/linux-x86/ccache/ccache -M 50G

この設定はCCACHE_に保存されます。DIRでは、このコマンドは効果が長く、システムの再起動により無効になりません。
3、gccとg+の比較的低いバージョンを切り替える。
Ubuntu 11.10のgccとg+バージョンは4.6で、このバージョンでandroidをコンパイルする時、いくつかのエラーが発生します。
host Prebuilt: monkeyrunner (out/host/linux-x86/obj/EXECUTABLES/monkeyrunner_intermediates/monkeyrunner)

host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp

<   >:0:0:   : “_FORTIFY_SOURCE”    [-Werror]

<built-in>:0:0:   :          

cc1plus:            

ネットでbuild/core/compbo/HOST_を修正するという文章があります。linux-x 86.mkファイルは、
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

変更
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

この方法は問題を解決することができますが、新たな問題を引き出すことができます。継続的な修正が必要です。しかし、4.4バージョンのgccとg++を使うと、これらのエラーは発生しません。
gcc-vコマンドにより、gccライブラリは/usr/lib/gcc/i 686-linux-gnuディレクトリの下にあり、このディレクトリの下には現在システムがサポートしている各種バージョンgccライブラリがあります。gcc 4.4をインストールする前に、このディレクトリの下に4.4のディレクトリがありません。gcc 4.4をインストールすると、このディレクトリの下に4.4のディレクトリが多く出ます。また、4.4のディレクトリの下には各種のライブラリファイルがあります。
uuntu 32 bitシステムでgcc 4.4をインストールする一番いい方法は次の二つのコマンドだけで、他のコマンドは必要ないです。そうでないと、コンパイルする時にエラーが発生する可能性があります。
$sudo apt-get install gcc-4.4

$sudo apt-get install g++-4.4

詰め終わったら/usr/binディレクトリの下に入ります。
$ls -l gcc*

以下の結果が表示されます。
lrwxrxrwxrwx 1 root root 7 2011-10-29 09:11 gcc->gcc-42.6-rwxr-xr-x 1 root 224544 2011-10-06 05:47 gcc-444-rwxr-xr-x 1 root root 302104 2010-09-17:43 gcc-4.6
gccがgcc-4.6にリンクされていることが分かりました。gcc-4.4にリンクする必要があります。方法は以下の通りです。
$sudo mv gcc gcc.bak

$sudo ln -s gcc-4.4 gcc

同じように、g++に対しても同じ修正を行います。
$ls -l g++*

lrwxrwxrwxrwx 1 root root 7 2011-08-14 15:17 g+->g+4-4.6-rwxr-xr-x 1 root 228640 2010-11-06:45 g++4-4-rwxr-x 1 root root 306200
g++リンクをg+++4.に変更する必要があります。
$sudo mv g++ g++.bak

$sudo ln -s g++-4.4 g++

gccとg+バージョン番号:gcc-v g+-vともにgcc version 4.4.4.6を表示し、gcc 4.4のインストール成功を説明します。
4、次はアンディのソースコードをコンパイルします。
ソースディレクトリに入ると、私のディレクトリは/home/tasiller/android/sourceです。envsetup.shスクリプトでインストール環境を初期化します。利用可能なコードは以下のとおりです。
$source build/envsetup.sh

または
$. build/envsetup.sh

注意.後ろにスペースがあります。
その後、コンパイルするターゲットを選択します。
$lunch full-eng

あとはmake命令でソースコードをコンパイルします。
$make -j4

ここで-j 4は4つのスレッドでコンパイルされていることを示し、4はスレッド数を表しています。読者は自分のマシンの状況に応じて設定できます。例えばマシンは単一CPUデュアルコアプロセッサであり、-j 2または-j 4に設定できます。つまりCPUカーネルの総数またはカーネルの総数の2倍です。
あとは長い待ち時間です。
コンパイルが完了したら、ソースディレクトリのout/target/product/generamdisk.img、system.imgとuserdata.imgがコンパイルされているのを見ることができます。