AndroidをUbuntuにインストールするよ!

ThinkPadvmwareUbuntuを入れてAndroidをインストールするよ!

ここを見ながらやってるよ。

AndroidをVMware Fusion Ubuntu 9.04上で…

Android on x86(Eee PC)ベースポーティング手順書

repo syncまではすんなりいきました。

makeが大変だよ。

が、makeのところでこんなんなっちゃった。

$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make installer_img
 ************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: java version "1.6.0_12".
The correct version is: 1.5.

Please follow the machine setup instructions at
    http://source.android.com/download
 ************************************************************
build/core/main.mk:105: *** stop.  Stop. 

Javaのバージョンが合ってない?java5をデフォルトにすればいいのかな。ここもそんなこと言ってるし。

$ sudo apt-get install sun-java5-jdk flex 
$ sudo update-java-alternatives -s java-1.5.0-sun 

java-1.5.0いれてupdate-java-alternativesしたら動いたよ。

再度make。

$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make installer_img
============================================
PLATFORM_VERSION_CODENAME=Donut
PLATFORM_VERSION=Donut
TARGET_PRODUCT=eee_701
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=Donut
============================================
build/core/main.mk:458: *** No TARGET_CPU_ABI defined by board config: .  中止.

ありゃ、だめだ・・・。TARGET_CPU_ABIを指定してやってみたよ。とりあえずnoneで。

android@ubuntu-vm:~/x86_bin/mydroid$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true TARGET_CPU_ABI=none make -j2 installer_img
============================================
PLATFORM_VERSION_CODENAME=Donut
PLATFORM_VERSION=Donut
TARGET_PRODUCT=eee_701
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=Donut
============================================
build/target/board/Android.mk:35: *** Please rename "vendor/asus/eee_701/Android.mk" to "vendor/asus/eee_701/AndroidBoard.mk".  中止.

お、ちょっと進んだよ。

指示通りファイル名を変えてみた。

$mv vendor/asus/eee_701/Android.mk vendor/asus/eee_701/AndroidBoard.mk

再度実行。

android@ubuntu-vm:~/x86_bin/mydroid$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true TARGET_CPU_ABI=none make -j2 installer_img
〜省略〜
Notice file: external/skia/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libsgl.so.txt
Notice file: external/freetype/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libft2.a.txt
Notice file: external/libpng/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libpng.a.txt
Notice file: external/giflib/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libgif.a.txt
Notice file: external/jpeg/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libjpeg.a.txt
Notice file: frameworks/base/media/libmedia/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libmedia.so.txt
make: *** `out/target/product/eee_701/obj/EXECUTABLES/applypatch_intermediates/LINKED/applypatch' に必要なターゲット `out/target/product/eee_701/obj/STATIC_LIBRARIES/libmtdutils_intermediates/libmtdutils.a' を make するルールがありません.  中止.
make: *** 未完了のジョブを待っています....

なんだこれは・・・。MLで解決策発見。

3. applypatch depends on libmtdutils.a, which doesn't exsit on x86. so maybe
can disable it.
project build/
diff --git a/tools/applypatch/Android.mk b/tools/applypatch/Android.mk
index fe317ff..8f494b6 100644
--- a/tools/applypatch/Android.mk
+++ b/tools/applypatch/Android.mk
@@ -14,6 +14,7 @@

ifneq ($(TARGET_SIMULATOR),true)

+ifeq ($(TARGET_ARCH),arm)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

@@ -48,4 +49,5 @@ LOCAL_STATIC_LIBRARIES += libz

include $(BUILD_HOST_EXECUTABLE)

+endif # TARGET_ARCH == arm
endif # !TARGET_SIMULATOR

言われるがままにソースコードを修正しちゃうよ。

$vim build/tools/applypatch/Android.mk b/tools/applypatch/Android.mk
〜省略〜
 ifneq ($(TARGET_SIMULATOR),true)
 ifeq ($(TARGET_ARCH),arm) <追記>
 〜省略〜
 endif   # TARGET_ARCH == arm<追記>
 endif  # !TARGET_SIMULATOR 
 〜省略〜

いった!と思ったら、googlemapのルールがないとか言われて止まった。

android@ubuntu-vm:~/x86_bin/mydroid$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true TARGET_CPU_ABI=none make -j2 installer_img
 〜省略〜
<stdout>: In function 'yy_get_next_buffer':
<stdout>:3686: warning: comparison between signed and unsigned
Notice file: external/tcpdump/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/xbin/tcpdump.txt
Notice file: external/libpcap/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/lib/libpcap.a.txt
target thumb C++: timeinfo <= system/extras/timeinfo/timeinfo.cpp
Notice file: system/extras/timeinfo/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/xbin/timeinfo.txt
make: *** `out/target/product/eee_701/system/etc/permissions/com.google.android.maps.xml' に必要なターゲット `vendor/google/frameworks/maps/com.google.android.maps.xml' を make するルールがありません.  中止.
make: *** 未完了のジョブを待っています....

My wonderful livingさんのところで解決済み!

$ vi vendor/asus/eee_701/eee_701.mk
#$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_with_google.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)

まだ終わらない・・・

android@ubuntu-vm:~/x86_bin/mydroid$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true TARGET_CPU_ABI=none make -j2 installer_img
 〜省略〜
host SharedLib: libSR_Recognizer (out/host/linux-x86/obj/lib/libSR_Recognizer.so)
Install: out/host/linux-x86/bin/dx
target asm: libicudata-us <= out/target/product/eee_701/obj/SHARED_LIBRARIES/libicudata-us_intermediates/icu_data_us.S
target SharedLib: libc_debug (out/target/product/eee_701/obj/SHARED_LIBRARIES/libc_debug_intermediates/LINKED/libc_debug.so)
out/target/product/eee_701/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(getservent.o): In function `getservent_r':
bionic/libc/netbsd/net/getservent.c:102: undefined reference to `htons'
collect2: ld returned 1 exit status
make: *** [out/target/product/eee_701/obj/SHARED_LIBRARIES/libc_debug_intermediates/LINKED/libc_debug.so] エラー 1
make: *** 未完了のジョブを待っています....

パスが通ってなくてhtonsが動いてない?includeを追加しよう。

$vim bionic/libc/netbsd/net/getservent.c
#include <arpa/inet.h>

ま、まだなのか・・・

android@ubuntu-vm:~/x86_bin/mydroid$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true TARGET_CPU_ABI=none make -j2 installer_img
 〜省略〜
Copy:  -> 
dirname: missing operand
詳しくは `dirname --help' を実行して下さい.
mkdir: missing operand
詳しくは `mkdir --help' を実行して下さい.
cp: missing file operand
詳しくは `cp --help' を実行して下さい.
make: *** [out/target/product/eee_701/installer/ramdisk-installer.img] エラー 1

MLによるとシェルを直せばいいらしい。

external/e2fsprogs/Android.mk:
--- a/Android.mk
+++ b/Android.mk
@@ -1,3 +1,3 @@
ifneq ($(TARGET_SIMULATOR),true)
-# include $(call all-subdir-makefiles)
+ include $(call all-subdir-makefiles)
endif

$vim external/e2fsprogs/Android.mk
 -# include $(call all-subdir-makefiles)
 + include $(call all-subdir-makefiles)
android@ubuntu-vm:~/x86_bin/mydroid$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true TARGET_CPU_ABI=none make -j2 installer_img
 〜省略〜
--- Finished installer data image -[ out/target/product/eee_701/installer/installer_data.img ]-
Creating bootable installer image: out/target/product/eee_701/installer.img
Updated inst_boot length to be 4468KB
Updated inst_data length to be 452736KB
I/diskconfig(19587): Requesting operation on a regular file, not block device.
I/config_mbr(19587): Configuring pentry. status=0x80 type=0x83 start_lba=2048 len_lba=8936
I/config_mbr(19587): Configuring pentry. status=0x0 type=0x83 start_lba=10984 len_lba=905472
I/config_mbr(19587): Configuring pentry. status=0x0 type=0x0 start_lba=0 len_lba=0
I/config_mbr(19587): Configuring pentry. status=0x0 type=0x0 start_lba=0 len_lba=0
Copying images to specified partition offsets
I/diskutils(19587): Writing RAW image 'out/target/product/eee_701/installer/installer_tmp.img' to 'out/target/product/eee_701/installer.img' (offset=1048576)
I/diskutils(19587): Wrote 4575232 bytes to out/target/product/eee_701/installer.img @ 1048576
I/diskutils(19587): Writing RAW image 'out/target/product/eee_701/installer/installer_data.img' to 'out/target/product/eee_701/installer.img' (offset=5623808)
I/diskutils(19587): Wrote 463601664 bytes to out/target/product/eee_701/installer.img @ 5623808
File edit complete. Wrote 2 images.
Done with bootable installer image -[ out/target/product/eee_701/installer.img ]-

できたーー!!!

次はこれをUSBメモリに入れて、起動できるようにするよ!