Contenu connexe Similaire à 20100925 sola-android (20) 20100925 sola-android2. 自己紹介
● 名前
– sola
● 仕事
– 大学卒業後、 7 年間は携帯の開発
– 今年転職して、新しいことに挑戦中
● ブログと twitter
– ブログ
● http://blog.sola-dolphin-1.net/
– twitter
● http://twitter.com/sola_dolphin_1
3. 参加しているグループ
● 日本 Android の会
● 横浜 Android プラットフォーム部( PF への興味で参加)
http://www.yokohama.android-pf.org/
横浜支部の人でなくても参加可能
● 日本 Android の会 町田支部(近所なので参加)
4. Android 歴
● 2008 春頃
– 社内の人に言ってみたが、感心無し(携帯作ってるとこなのに ... )
● 2008 秋頃
– ソース公開をきっかけに、まじめにソースとか読み始めた
● 2008 冬頃~ 2009 春頃
– AndroidDevPhone1 、 Armadillo-500FX 、 BeagleBoard を入手
● 2009 ~
– ブログ書き始めた& twitter を始めた
– 仕事でも Android に関われるようになった
● 2010 春頃~
– 新しいことを求めて転職
– アプリ作りに手を出し始めた。 A3 に出すのが目標
6. ● Xperia (電話として使ってます)
● dynabook AZ
8. ● Armadillo-500FX ● BeagleBoard
● Armadillo-440 ● BeagleBoard-xM
● Armadillo-9 ● IGEPv2
● Armadillo-240 ● TOUCHBOOK
● mini2440 ● Dev Phone 1
● SmartQ5 ● Dev Phone 2
● Nexus One
※ 赤字はブログとかでネタにしたもの
14. 2 通りの方法
● Google が公開している Android の Linux Kernel に、
ターゲット固有のドライバ等を移植する
● ターゲットで既に動いている Linux Kernel に Android
のドライバ(変更点)を移植する
16. 移植手順
● ターゲット固有の部分は、 vanilla kernel と差分を取って抽出する
Linux Kernel の配布場所は、 http://www.kernel.org/
ターゲットのカーネルは、
linux-2.6.32 ベースの sola-kernel があると仮定
●
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz
$ tar zxvf linux-2.6.32.tar.gz
●
$ diff -crdN linux-2.6.32/ sola-kernel/ > sola-kernel.patch
●
● 差分を Android の Linux Kernel に適用する
●
$ git clone git://android.git.kernel.org/kernel/common.git
$ cd● common/
$ git checkout -b android-2.6.32-work origin/android-2.6.32
$ patch -p1 -E < ../sola-kernel.patch
18. 移植手順
● Android のドライバは、 vanilla kernel と差分を取って抽出す
Linux Kernel の配布場所は、 http://www.kernel.org/
Android の Linux Kernel の配布場所は、
git://android.git.kernel.org/kernel/common.git
●
$ git clone git://android.git.kernel.org/kernel/common.git
$ cd● common/
$ git checkout -b android-2.6.32-work origin/android-2.6.32
$ cd● ../
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz
$ tar zxvf linux-2.6.32.tar.gz
●
$ diff -crdN linux-2.6.32/ common/ > android-2.6.32.patch
●
● 差分を既に動いている Linux Kernel に適用する
$ cd● sola-kernel
$ patch -p1 -E < ../android-2.6.32.patch
●
20. Armadillo-500FX でやったこと
● Linux Kernel のバージョンを 2.6.27 に上げつつ、ドライバを
Android の Linux Kernel へ移植
●
$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-500-fx/source/kerne
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.gz
●
$ tar zxvf linux-2.6.26-at6.tar.gz
$ tar zxvf linux-2.6.26.tar.gz
●
$ diff -crdN linux-2.6.26/ linux-2.6.26-at6/ > at6.patch
●
● 差分を取って、 Android の Linux Kernel に適用する
●
$ git clone git://android.git.kernel.org/kernel/common.git
$ cd common
$ patch -p1 -E < ../at6.patch
※master ブランチは android-2.6.27 なので、
使用する Linux Kernel のバージョンは 2.6.27 となります
21. Armadillo-500FX でやったこと
● ハマるところ
– Armadillo-500FX の Linux Kernel は 2.6.26 なので、
これと一致するバージョンの Android の Linux Kernel
がない(今回の例では、 2.6.27 を使用)
– そのため、前のスライドでのパッチ適用は失敗する箇所が
多く、手動で適用する必要のある箇所が多くなる
– Linux Kernel のバージョンが異なることで、構造体や関数
の型が変更になり、コンパイルエラーとか ...
– コンパイルエラーが出なくても、動かすと kernel panic に
なったりするなど ...
22. Armadillo-500FX でやったこと
● 解決策
– 頑張るしかないです ...
– 私はひたすらソースコードと睨めっこでした。
– 経験上、動かない原因はほぼ arch/arm/*** であること
が多い
– JTAG-ICE があると原因を追いかけ易いが、個人では手が
出せない ...
– 調べても原因不明な場合は、 Android-Embedded-
Japan へメールを投げてみる
– 英語が分かる人は android-porting も良いと思います
24. Android Emulator ( Goldfish )
● Emulator の Linux Kernel が 2.6.29 までしかないので、 2.6.31
へバージョンを上げました
http://blog.sola-dolphin-1.net/archives/1858666.html
http://blog.sola-dolphin-1.net/archives/1862864.html
● Linux Kernel 2.6.31 に、 Goldfish 向けの変更と Android 用の
ドライバを一気に移植
● Goldfish は規模が小く、 Armadillo-500FX よりは楽
● ただし、一気に移植すると問題発生時に Goldfish 向けの変更が悪
いのか、 Android 向けの変更が悪いのか切り分ける必要が出てき
ます
25. Emulator の便利なところ
● Emulator を使うと、実機無しで移植の試しが出来る
● デバッグも出来ます
この記事が分かり易くて良いと思います
Android エミュレータで Linux カーネルをデバッグ !!
http://monoist.atmarkit.co.jp/fembedded/articles/filesys/06/filesys_06a.h
● センサー等のデバイスを繋ぐことは出来ないけど、 Linux Kernel の
中身を追うことが出来る。
26. 役に立つドキュメント
● Android Platform Developer's Guide
http://source.android.com/porting/index.html
(こういうの、去年欲しかった ... )
30. 手順 1 と 2
● busybox のクロスコンパイル
●
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-lin
$ tar jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt/
●
$ wget http://busybox.net/downloads/busybox-1.17.2.tar.bz2
$ tar jxvf busybox-1.17.2.tar.bz2
●
$ cd busybox-1.17.2
$ export ARCH=arm
●
$ export CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-
$ make menuconfig
●
$ make CFLAGS=--static LDFLAGS=--static
●
● busybox のインストール
$ adb push busybox /data/
31. 手順 3
● busybox を使用して必要なデータを取り出す
$ adb shell
/ # export PATH=$PATH:/data
/ # busybox tar zcvf /cache/system.tar.gz system
/ # busybox tar zcvf /cache/sbin.tar.gz sbin
/ # busybox cp init /cache/
/ # busybox cp init.rc /cache/
/ # busybox cp default.prop /cache/
/ # exit
# exit
$ mkdir emulator-image
$ adb pull /cache/ ./emulator-image/
32. 手順 4
● 設定ファイルの変更
– init.rc のみ
変更点は以下 mount のところのみ
mount rootfs rootfs / ro remount
mount yaffs2 mtd@system /system
mount yaffs2 mtd@system /system ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
mount yaffs2 mtd@cache /cache nosuid nodev
33. 手順 5
● 実機にのせるファイルを用意する
data 空フォルダ作成
dev 空フォルダ作成
proc 空フォルダ作成
sys 空フォルダ作成
default.prop 吸い出したファイル
init 吸い出したファイル
init.rc 吸い出したファイル
sbin 吸い出したファイル
system 吸い出したファイル
35. Android のユーザランドを作成する
● ターゲット毎に必要な変更箇所を簡単に紹介します
– BeagleBoard
– BeagleBoard-xM
– IGEPv2
– Armadillo-500FX
– Armadillo-440
36. まずは Android のビルド
● ソースを取得して make を実行
●
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2_r1.1
$ repo sync
●
$ make -j8
●
● make 完了後、実機にのせるファイルをまとめる
$ mkdir android-fs
$ cp -a out/target/product/generic/root/* android-fs/
$ cp -a out/target/product/generic/system/* android-fs/system/
42. まとめ
● 複数例紹介したけど、必要な変更点はほとんど同じ
● 他のターゲット向けにも、基本的には同じところを変更して
あげれば動くと思います
● Android をのせてみるのは、本当に簡単
● 初めての場合、難しいのは Linux Kernel の部分ですの
で、既に Linux が動作している実機を用意した方が良いと
思います。
● カメラとか GPS とかセンサーとか無線 LAN を動かしたい
時はそれなりに手間です。
(いずれどこかに整理したいと思っています)
44. 変更するところ
● 以下の環境変数を設定してみる( Froyo での例)
– TARGET_ARCH_VARIANT
– WITH_JIT
● SD カードを認識させる
– vold.fstab の設定( eclair までは vold.conf )
● 複数のターゲット向けに環境を設定する
– BeagleBoard や Armadillo 向けに、別々に環境を用意す
るのはもったいないので、切り替えられるようにする
45. 環境変数の設定
● 設定例
●
TARGET_ARCH_VARIANT := armv7-a-neon
WITH_JIT := true
●
● TARGET_ARCH_VARIANT に設定可能な値は、
build/core/combo/arch/arm/ に存在するものであれば可能
● WITH_JIT は、 JIT コンパイラを有効にするかの設定で、
true にすると有効になる
● ビルド例
make TARGET_ARCH_VARIANT=armv7-a-neon WITH_JIT=true
46. SD カードを認識させる
● vold.fstab の設定( Froyo )
●
# Mounts the first usable partition of the specified device
dev_mount sdcard /mnt/sdcard auto /devices/platform/mmci-omap-hs.0/mmc_host/mmc0
●
● vold.conf の設定( Eclair まで)
●
## This is the direct uevent device path to the SD slot on the device
media_path /devices/platform/mmci-omap-hs.0/mmc_host/mmc0
●
● 設定すべき値を知る方法
●
# ls -l /sys/devices/platform/mmci-omap-hs.0/mmc_host/mmc0
-rw-r--r-- root root 4096 2000-01-01 00:00 uevent
●
lrwxrwxrwx root root 2000-01-01 00:04 subsystem -> ../../../../../clas
lrwxrwxrwx root root 2000-01-01 00:04 device -> ../../../mmci-omap-hs.
drwxr-xr-x root root 2000-01-01 00:00 power
-r--r--r-- root root 4096 2000-01-01 00:04 slot_name
drwxr-xr-x root root 2000-01-01 00:00 mmc0:aaaa
47. ターゲット向けの設定ファイルを作る
● device/ に設定ファイルを格納する
– devices/sola/beagleboard/***
– devices/sola/armadillo500fx/***
※eclair までは devices ではなく、 vendor でした
● 格納するファイルの例( BeagleBoard の場合)
– AndroidBoard.mk
– AndroidProducts.mk
– BoardConfig.mk
– beagleboard.mk
– vendorsetup.sh
48. AndroidBoard.mk
● 記述例
●
LOCAL_PATH := $(call my-dir)
●
# board specific init.rc
#
PRODUCT_COPY_FILES +=
●
$(LOCAL_PATH)/init.rc:root/init.rc
●
# vold
#
●
PRODUCT_COPY_FILES +=
$(LOCAL_PATH)/vold.fstab:system/etc/vold.fstab
●
オリジナルの init.rc は system/core/rootdir にあります
50. BoardConfig.mk
● 記述例
# config.mk
#
# Product-specific compile-time definitions.
#
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_CPU_ABI := armeabi
BOARD_USES_GENERIC_AUDIO := true
USE_CAMERA_STUB := true
TARGET_ARCH_VARIANT := armv7-a-neon
WITH_JIT := true
51. beagleboard.mk
● 記述例
# Superclass
$(call inherit-product, build/target/product/generic.mk)
PRODUCT_PACKAGES +=
LiveWallpapersPicker
LiveWallpapers
MagicSmokeWallpapers
VisualizationWallpapers
# Overrides
PRODUCT_NAME := beagleboard
PRODUCT_DEVICE := beagleboard
PRODUCT_MODEL := beagleboard
PRODUCT_BRAND := beagleboard
PRODUCT_MANUFACTURER := beagleboard
PRODUCT_LOCALES := ldpi hdpi mdpi ja_JP en_US
53. ビルド方法
● トップディレクトリで以下を実行する
$ source build/envsetup.sh
$ lunch beagleboard-eng
● ビルドした結果は generic ではなく、 beagleboard フォ
ルダの下に格納されます
out/target/product/beagleboard
● 他のターゲット(例えば armadillo440 )の場
合、 beagleboard のところを読み替えてください
57. 解決方法 1
● BatteryService で状態をごまかす
詳細は、ブリリアントサービスさんのブログを参照。
バッテリードライバを見にいかず、
BatteryService でバッテリー FULL を返しています。
http://d.hatena.ne.jp/bs-android/20090603/1244043649
58. 解決方法 2
● バッテリードライバを組み込む
考え方は、方法 1 と同じ。方法 2 では、ドライバで常にバッテ
リー FULL を返すようにする。
数十行で書けます。
実際に使うには、(株)パイロンさんの公開しているドライバ
を使用するのが良いかと思います。
http://pylone.jp/blog/virtual_battery
この方法の良いところは、 Android に手を入れる必要が無い
こと。
61. 原因
● センサーのライブラリ( system/lib/hw/sensors.xxx.so )
元々は Android Dev Phone1 で donut を動かそうとした時、
起動しなくて調べました。
センサーのライブラリを外すと起動したため、センサーが原因
だと判断。
しかし、当時は Android Dev Phone1 向けのセンサーのソー
スコードが公開されていなかったため、 cupcake 向けに自分
で実装したソフトで確認。
結果、センサーのライブラリに原因があると判明。
62. 解決方法
● センサーライブラリの修正例
#include <cutils/native_handle.h> /* donut */
/* <donut> static int control_open_data_source( struct sensors_control_device_t *dev ) */
static native_handle_t* control_open_data_source( struct sensors_control_device_t *dev ) /* <donut> */
{
native_handle_t* handle; /* <donut> */
handle = native_handle_create( 1, 0 ); /* <donut> */
sensor_fd = open_sensors_phy( dev );
handle->data[ 0 ] = sensor_fd; /* <donut> */
/* return sensor_fd; *//* <donut> */
return handle; /* <donut> */
}
/* <donut> int sensors_open( struct sensors_data_device_t *dev, int fd ) */
int sensors_open( struct sensors_data_device_t *dev, native_handle_t* handle ) /* <donut> */
{
int i;
sPendingSensors = 0;
/* event_fd = dup( fd ); *//* <donut> */
event_fd = dup( handle->data[ 0 ] ); /* <donut> */
native_handle_close( handle ); /* <donut> */
native_handle_delete( handle ); /* <donut> */
for( i = 0 ; i < MAX_NUM_SENSORS ; i++ )
sensors[ i ].vector.status = SENSOR_STATUS_ACCURACY_HIGH;
return 0;
}
64. Android のロゴ点滅で無限ループ(2)
● eclair ( Android2.1 )以降の目撃例
●
I/SystemServer( 123): Battery Service
W/dalvikvm( 123): No implementation found for native Lcom/android/server/BatteryService;.native_
W/dalvikvm( 123): threadid=15: thread exiting with uncaught exception (group=0x4001b160)
●
E/AndroidRuntime( 123): Uncaught handler: thread android.server.ServerThread exiting due to unca
E/AndroidRuntime( 123): *** EXCEPTION IN SYSTEM PROCESS. System will crash.
E/AndroidRuntime( 123): java.lang.UnsatisfiedLinkError: native_update
●
E/AndroidRuntime( 123): at com.android.server.BatteryService.native_update(Native Method)
E/AndroidRuntime( 123):
●
at com.android.server.BatteryService.update(BatteryService.java:2
E/AndroidRuntime( 123): at com.android.server.BatteryService.<iniinit: untracked pid 117
t>(BatteryService.java:138)
E/AndroidRuntime( 123):
● at com.android.server.ServerThread.run(SystemServer.java:140)
E/AndroidRuntime( 123): Crash logging skipped, no checkin service
I/Process ( 123): Sending signal. PID: 123 SIG: 9
●
D/BootAnimation( 133): SurfaceFlinger died, exiting...
I/ServiceManager( 25): service 'package' died
(省略)●
I/ServiceManager( 25): service 'content' died
E/installd( 32): eof
E/installd(
● 32): failed to read size
I/installd( 32): closing connection
I/Zygote ( 118): Exit zygote because system server (123) has terminated
65. 解決方法 1
● Power supply class support を有効にする
バッテリーのドライバは用意しなくてよい。
kernel config で、 CONFIG_POWER_SUPPLY を y にする。
66. 解決方法 2
● BatteryService で状態をごまかす
cupcake の頃とは BatteryService.java の作りが違うので、
別の対応を行う。やることは同じ。バッテリー FULL を返す。
frameworks/base/services/java/com/android/server/BatteryService.java
197c197
< private native void native_update();
---
> // private native void native_update();
200c200,204
< native_update();
---
> mAcOnline = true;
> mBatteryPresent = true;
> mBatteryLevel = 100;
> mBatteryStatus = BatteryManager.BATTERY_STATUS_FULL;
> // native_update();
67. 解決方法 3
● バッテリードライバを組み込む
Android 起動直後に終了するで書いた通り。ドライバで常に
バッテリー FULL を返すようにする。
数十行で書けます。
実際に使うには、(株)パイロンさんの公開しているドライバ
を使用するのが良いかと思います。
http://pylone.jp/blog/virtual_battery
この方法の良いところは、 Android に手を入れる必要が無い
こと。
69. Android のロゴ点滅で無限ループ(3)
● froyo ( Android2.2 )での目撃例
●
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
●
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService(
● 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService(
● 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
●
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService(
● 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService(
● 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
●
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
W/MountService( 53): Waiting too long for mReady!
70. 解決方法 1
● Mount サービス無効化
SD カード使えなくなるのでおすすめしませんが、一応
frameworks/base/services/java/com/android/server/Mou
ntService.java
// if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
mReady = true;
mUmsEnabling = true;
return;
// }
// mConnector = new NativeDaemonConnector(this, "vold", 10, "VoldConnector");
// mReady = false;
// Thread thread = new Thread(mConnector, NativeDaemonConnector.class.getName());
// thread.start();
71. 解決方法 2
● NativeDaemonConnector.java の修正
android-porting で同じ現象に関する投稿があり、既に解決済
みだった。
froyo weird timeouts?
http://groups.google.co.jp/group/android-porting/browse_thr
@@ -97,11 +97,12 @@ final class NativeDaemonConnector implements Runnable {
LocalSocketAddress.Namespace.RESERVED);
socket.connect(address);
- mCallbacks.onDaemonConnected();
InputStream inputStream = socket.getInputStream();
mOutputStream = socket.getOutputStream();
+ mCallbacks.onDaemonConnected();
+
byte[] buffer = new byte[BUFFER_SIZE];
int start = 0;
73. Android のロゴまで進まない
● init で kernel panic が発生して停止
●
kjournald starting. Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
●
EXT3 FS on mmcblk0p3, internal journal
EXT3-fs: mounted filesystem with writeback data mode.
●
VFS: Mounted root (ext3 filesystem) on device 179:3.
Freeing init memory: 132K
Warning: unable to open an initial console.
Kernel panic - not syncing: Attempted to kill init!
74. 原因と解決方法
● 原因は TLS
Android で TLS を使うようになっていたため、発生した。
ARCH_ARM_HAVE_TLS_REGISTER が true
しかし Linux Kernel では CONFIG_HAS_TLS_REG が無効。
そのため、現象が発生した。
Linux Kernel 側で有効であれば、問題無し。
または、 Android 側で使わないようにする。
78. 発生した現象
● Linux では認識してるのに、 Android で触れない
Linux 起動直後( Android 起動前)に確認した結果
加速度センサー
●
[root@armadillo500 (ttymxc0) /]# ls -l /dev/ttyUSB*
crw-rw-rw-
● 1 root root 188, 0 Jan 9 20:34 /dev/ttyUSB0
Web カメラ
●
[root@armadillo500 (ttymxc0) ~]# ls -l /dev/video0
crw-rw----
● 1 root root 81, 0 Jan 9 20:56 /dev/video0
Android 起動後に確認した結果
加速度センサー
# ls -l /dev/ttyUSB*
crw------- root root 188, 0 2000-01-09 11:39 ttyUSB0
Web カメラ
# ls -l /dev/video0
crw------- root root 81, 0 2000-01-09 11:52 video0
79. 解決方法
● Android の init を変更する
デバイスファイルのパーミッション設定に関しては、
system/core/init/devices.c に記載します。
static struct perms_ devperms[] = {
{ "/dev/null", 0666, AID_ROOT, AID_ROOT, 0 },
{ "/dev/zero", 0666, AID_ROOT, AID_ROOT, 0 },
{ "/dev/full", 0666, AID_ROOT, AID_ROOT, 0 },
(省略)
{ "/dev/ttyUSB0", 0666, AID_ROOT, AID_ROOT, 0 },
{ "/dev/video0", 0660, AID_ROOT, AID_CAMERA, 1 },
{ NULL, 0, 0, 0, 0 },
};
82. 対処方法 1
● init.rc で dns の設定を書いてあげる
on boot のブロックに、
setprop net.dns1 8.8.8.8 を書く
init.rc の抜粋
on boot
...
setprop net.dns1 8.8.8.8
...
84. 対処方法 2
● ethernet support を移植
Android-x86 に実装されているので、必要な処理を持っ
てきて動かしてみた
変更箇所についてはブログを参照
ethernet support
http://blog.sola-dolphin-1.net/archives/2974043.htm
87. ライブ壁紙を動かすのに必要なもの
● アプリケーションをインストールしても動作しない
● 必要なライブラリがインストールされていないのが原因
Android Zaurus の日記
NetWalker で Nexus One の Live Wallpaper
http://d.hatena.ne.jp/androidzaurus/20100121/1264065376
ビルドは実行されており、以下にライブラリが出来ている。
out/target/product/<target>/obj/lib/librs_jni.so
out/target/product/<target>/obj/lib/libRS.so
※<target> は環境によって異なる
これらを、ターゲット環境の /system/lib/ へコピーする
88. 何故インストールされない?
● Android.mk に
LOCAL_MODULE_TAGS := optional
があると、インストールされない
今回の場合、以下の 2 ファイル
frameworks/base/libs/rs/Android.mk
frameworks/base/graphics/jni/Android.mk
89. (おそらく)正解な解決方法
● 以下のように設定してビルドを行う
device/sola/beagleboard/beagleboard.mk に、
PRODUCT_PACKAGES +=
libRS
librs_jni
を追記してビルドする。
91. ビルドエラーの原因
● gcc と g++ が 4.4 になったせい
色々とチェックが厳しいらしい
● 解決策としては、 gcc-4.3 と g++-4.3 をインストール。
ビルド時にこれらを使うようにする
gcc-4.3 と g++-4.3 のインストール
$ sudo apt-get install gcc-4.3 g++-4.3
gcc-4.3 と g++-4.3 を使用してビルドする
$ CC=gcc-4.3 CXX=g++-4.3 make
93. ビルドエラーの原因
● master 、 froyo などのブランチは頻繁に修正が入りま
す。運が悪いと、ビルド出来ない状態なことがあります。
( cupcake の頃はとても酷かったです ... )
● 使用するなら、 android-2.2_r1.1 や android-2.1_r2
のように、タグが付いているものの方が良いと思います。
ビルドエラーは出ない(はずです)
● 最近( 9/23 に取得)の master ではこんなのが ...
Checking build tools versions...
build/core/main.mk:72: ************************************************************
build/core/main.mk:73: You are attempting to build on a 32-bit system.
build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.
build/core/main.mk:75: ************************************************************
build/core/main.mk:76: *** stop. 中止 .
95. 起動画面を変更する
● 動画にする方法
– png 形式の画像を用意して、アニメーションを作れます
以下の順にデータを探しに行くようになっています。
/data/local/bootanimation.zip
/system/media/bootanimation.zip
zip 形式でアニメーションデータをまとめます
$ ls
desc.txt part0 part1
$ zip -r -0 bootanimation ./*
dest.txt の中身
320 180 30
p 1 0 part0
p 0 0 part1
part0/part1 の中身は、 png 形式の画像データ
96. ソース読みを楽にするために
● GNU GLOBAL
– 普段よく使用しているソフト
http://www.tamacom.com/global-j.html
サンプル( VMware の仮想環境)
http://sola-dolphin-1.net/data/android/image/gnuglob
ユーザ名やパスワードは android
Firefox のブックマークに参照先のリンクがあります
● OpenGrok
– OESF のサーバで Android-2.2_r1.1 が公開されてます
http://tools.oesf.biz/android-2.2_r1.1/
97. A81-E
● BeagleBoard と同じ、 OMAP3 搭載
● カスタム ROM を動かせるので、専用端末化するのに向い
てる。
● 独自イメージの起動方法
知りたい or やりたい?
98. 今後やろうとしてること
● 個人&(横浜) PF 部等で情報を出していく
まだ情報が少ない?らしいので
● 冬のコミケに申し込み中
● そろそろ Android 以外のネタを