Ubuntu10.04上コンパイルAndroidソース(Build Android source in Ubuntu 10.04 Platform)
一、Introduction
今日はUbuntuプラットフォームでandroidソースコードをコンパイルする方法についてお話しします.私のはubuntu 10です.04バージョンでは、コンパイルプロセスの説明を行う前にmake、make snod、make kernelの役割、m、mm、mmmの役割、違いについてお話ししたいと思います.
-make:ソースコードをコンパイルし、対応するシステムミラーファイルを生成します.-make snod:systemを再生成します.imgシステムミラーファイル-make kernel:カーネルをコンパイル(オプション)envsetup.shファイル内容について
-m:Makes from the top of the tree(すべてのモジュールをコンパイル)mm:Builds all of the modules in the current directory(現在のディレクトリの下のすべてのモジュールをコンパイルします).-mmm:Builds all of the modules in the supplied directories(指定されたディレクトリの下のすべてのモジュールをコンパイルします).
二、Androidソース及びSDKのコンパイル
2.1、完全なコンパイル
makeを使用してミラーをコンパイルおよび生成する
~$: cd ~/android/src ~$: make
イメージのコンパイルに成功すると、ディレクトリ
~/android/src/out/target/product/generic
の下にimageファイルが生成されます.ramdisk.img system.img userdata.img android -info.txt
シミュレータを起動することで、コンパイルが正しいかどうかを検証することができます.システムにいるほうがいいことに注意してください.imgが存在するディレクトリの下で以下の動作を行います
~$ emulator -kernel ~/android2.2/prebuilt/android-arm/kernel/kernel-qemu -ramdisk ramdisk.img -debug all -data userdata-qemu.img -system system.img -sysdir . -show-kernel -skin 800x480
正しく起動できれば、完全なコンパイルに成功したことを示します.
完全なコンパイルが完了すると、make sdkコマンドを使用してSDKのコンパイルを行うことができます.手順は次のとおりです.
~$ cd ~/android/src ~$ make sdk
注意:build SDKが必要な場合は、バージョンによって必要な環境が異なります.android 2をコンパイルします.2以前のバージョンでは、sun-java 6-jdkではなくsun-java 5-jdkをインストールする必要があります.そうしないと、次のエラーが発生します.
build/core/product_config.mk:207: WARNING: adding test OTA key ============================================ TARGET_PRODUCT=generic TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID= ============================================ Combining NOTICE files: out/target/product/generic/obj/NOTICE.txt Finding NOTICE files: out/host/linux-x86/obj/NOTICE_FILES/hash-timestamp Combining NOTICE files: out/host/linux-x86/obj/NOTICE.txt Package: out/target/product/generic/generic-img-eng.anjoy.zip SDK buildinfo: out/target/product/generic/sdk/sdk-build.prop Docs droiddoc:out/target/common/docs/dx javadoc:エラー-docletクラスDroidDocでメソッドstartが異常javaを放出する.lang.reflect.InvocationTargetException com.sun.tools.javac.code.Symbol$CompletionFailure:sunが見つかりませんでした.util.resources.OpenListResourceBundleのクラスファイル
だから、もしjdkバージョンが違うなら、公式サイトにダウンロードしたり、オンラインでインストールしたりしましょう.ここではあまり言いません.
sdkコンパイルに成功すると、~/android/src/out/host/linux-x 86/sdk/sdkのファイルディレクトリと圧縮パッケージが生成されます.
android-sdk_eng.anjoy_linux-x86 android-sdk_eng.anjoy_linux-x86.zip
~/android/src/out/target/product/generic(genericはデフォルトの製品名)ですべてのイメージファイルをパッケージ化します.
generic-img-eng.anjoy.zip
生成されたSDKディレクトリ構造は次のとおりです.
/home/anjoy/android/src/out/host/linux-x86/sdk/android-sdk_eng.anjoy_linux-x 86:合計32 drwxrwx---6 anjoy anjoy 4096 2011-06-27 17:48.drwxr-x--- 3 anjoy anjoy 4096 2011-06-27 17:48 .. drwxrwx--- 2 anjoy anjoy 4096 2011-06-27 17:48 add-ons drwxrwx--- 14 anjoy anjoy 4096 2011-06-27 17:48 docs -rw-rw---- 1 anjoy anjoy 172 2011-06-27 17:50 documentation.html drwxrwx--- 3 anjoy anjoy 4096 2011-06-27 17:48 platforms -rw-rw---- 1 anjoy anjoy 225 2011-06-27 17:50 RELEASE_NOTES.txt drwxrwx--- 3 anjoy anjoy 4096 2011-06-27 17:50 tools
生成したSDKを使いやすいようにするには.bashrcで追加:
export PATH=$PATH:/home/anjoy/android/src/out/host/linux-x86/sdk/android-sdk_eng.anjoy_linux-x86/tools
2.2、モジュール化コンパイル
注意:モジュール化コンパイルする前にenvsetupを必ず実行します.shスクリプトをsourceしたり、envsetupを直接したりします.shファイルが存在するパスは、個人のbashrcファイルに構成されています.そうすれば、毎回sourceアクションをしないでください.
envsetup.shはenvsetupを実行するとbash関数の定義をいくつか提供した.sh後helpコマンドを使用して表示できます.
~$ help Invoke ". build/envsetup.sh"from your shell to add the following functions to your environment: - croot: Changes directory to the top of the tree. - m : Makes from the top of the tree. - mm : Builds all of the modules in the current directory. - mmm : Builds all of the modules in the supplied directories. - cgrep: Greps on all local C/C++ files. - jgrep: Greps on all local Java files. - resgrep: Greps on all local res/*.xml files. - godir: Go to the directory containing a file. ... ..
モジュールのコンパイルに役立つのはtapas,m,mm,mmmのいくつかのコマンドです.
このうちmmmの後ろにモジュールのルートディレクトリが付いているのは、すべてのディレクトリの下にサブモジュールがあるわけではありません.Androidが含まれています.mkファイルディレクトリこそモジュールのルートディレクトリであり、モジュール名はAndroid.mkのLOCAL_MODULEまたはLOCAL_PACKAGE_NAME変数で得られます.モジュールを個別にコンパイルするには、mmmの後ろにモジュールパスを指定する必要があります.たとえば、アプリケーションのLauncher 2をコンパイルする必要があります.
mmm packages/apps/Launcher2/
またはsrcディレクトリの下でmake module nameを直接実行します.
cd ~/android/src make Launcher2
2.3、増分コンパイルの手順
a、もし私たちがモジュールの下のコードを修正したら、私たちはこのモジュールを新しくコンパイルするだけで、工事全体のコンパイルを必要としません.
b、修正されたコードがあるモジュールをコンパイルする.例えば:
cd ~/android/src mmm packages/apps/Launcher2
c、~/android/srcで実行:
cd ~/android/src make snod
d、このコマンドは、新しいシステムイメージsystemを生成する.img、このシステムイメージをsdkにコピーします.
cd ~/android/src cp out/target/product/generic/system.img/ out/host/linux-x86/sdk/android-sdk_eng.anjoy_linux-x86/tools/lib/images/
OK、これでAndroidソースコードのコンパイルとSDKの生成が完了しました
注意:Ubuntu 10の場合.04システム32ビットマシンにAndroid 2のコンパイルをインストール.3ソースコード、その手順と注意事項は以下の通りです.
1.Android 2に対してJDK 6をインストール.3システムは、JDK 5をインストールしないで、最新のJDK 6をインストールする必要があります.JDK 6がインストールされている場合、Androidは自動的に64ビットでコンパイルされ、システムが32ビットの場合、コンパイルエラーが発生し、後でこのエラーを修正する方法を説明します.sudo add-apt-repository "deb http://archive.canonical.com/lucid partner"sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntulucid partner"sudo apt-get update sudo apt-get install sun-java 6-jdk sudo update-java-alternatives-s java-6-sunインストールが完了したら、手動でJAVA_HOME、JRE_HOME、CLASS_PATHをJDK 6のインストールパスに設定する必要があります.
2.コンパイルandroid 2.3
~$ cd ~/android2.3 ~$ source build/envsetup.sh ~$ make
makeでエラーが表示されます.
************************************************************ You are attempting to build on a 32-bit system. Only 64-bit build environments are supported beyond froyo/2.2. ************************************************************
なぜならAndroid 2.3デフォルトは64ビットのシステムでコンパイルされ、build/core/mainを手動で変更する必要があります.mk、この判断部分を注釈します.
#ifneq (64,$(findstring 64,$(build_arch))) #$(warning ************************************************************) #$(warning You are attempting to build on a 32-bit system.) #$(warning Only 64-bit build environments are supported beyond froyo/2.2.) #$(warning ************************************************************) #$(error stop) #endif
再make、JDK 6バージョンがインストールされている場合は、エラーが発生します.
Docs droiddoc: out/target/common/docs/api-stubs Could not load ‘clearsilver-jni’ java.library.path = out/host/linux-x86/lib make: *** [out/target/common/docs/api-stubs-timestamp] Error 45 make: *** Waiting for unfinished jobs…. Could not load ‘clearsilver-jni’ java.library.path = out/host/linux-x86/lib make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45
これらのファイルを修正するだけで、32ビットコンパイル環境に戻ることができます.
# external/clearsilver/cgi/Android.mk # external/clearsilver/java-jni/Android.mk # external/clearsilver/util/Android.mk # external/clearsilver/cs/Android.mk
これらのファイル内容のコンパイルオプション-m 64を-m 32に変更すると、makeが再作成され、1時間もしないうちにmakeが完了します.
OK、大工告成