Top > Memo >

Android開発環境を整える on Gentoo

Friday, August 12, 2011 13:53 UTC

インストール

GentooではAndroid SDKのebuildが用意されているのでemergeするだけ。

/etc/portage/package.keywordに以下を追加

dev-util/android-sdk-update-manager ~amd64

して

# emerge -av dev-util/android-sdk-update-manager
...
 * The Android SDK now uses its own manager for the development	environment.
 * Run 'android' to download the full SDK, including some of the platform tools.
 * You must be in the android group to manage the development environment.
 * Just run 'gpasswd -a <USER> android', then have <USER> re-login.
 * See http://developer.android.com/sdk/adding-components.html for more
 * information.
 * If you have problems downloading the SDK, see http://code.google.com/p/android/issues/detail?id=4406
 * You need to run env-update and source /etc/profile in any open shells
 * if you get an SWT error.

利用するユーザをandroidグループに追加しろって事なので

# gpasswd -a <USER> android

して完了。

Eclipse + ADT Plugin

多分実際に何か開発していく際にはEclipseは使わないと思うが、とりあえず環境は整えておく。
基本的にStep 3. Installing the ADT Plugin for Eclipseの通りにインストールしただけ。

ただ、依存するプラグインのインストールが行われるようにソフトウェアサイトとして

も追加する必要があった。

さらに、XMLファイルを開こうとすると

Could not open the editor: Unable to load graphics library [Cairo is required] (java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.internal.cairo.Cairo)

といったエラーになったので、

を参考にdev-java/swtをUSEフラグ"cairo"を指定してインストール。
しかし、自分の環境では直らず。
現状必須ではないので放置。

追記
バージョンが重要だった。最新ではswt-3.6.1がインストールされてしまうため、
バージョン3.5.2を指定してemergeし直す必要があった。
# emerge -av =dev-java/swt-3.5.2
これで解決。

エミュレーター

利用するユーザでログインすると、パスも設定されていて

$ android

で、Android SDK and AVD Managerが起動できる。

Available packagesにて必要な環境をダウンロードし、
Virtual devicesでAVDを作成すればエミュレーターで遊べる。
参考:Installing the SDK

自分の環境ではiptablesの影響なのか、そのままではネットワークが利用できなかったので、
自マシン上で運用しているProxyを設定した

  • Wireless & networks
    • Mobile networks
      • Access Point Names
        • Telkila
          • Proxy: 10.0.2.2
          • Port: 3128

Emulator Networkingによるとエミュレーターを動作させているホストマシンのループバックアドレスがエミュレーターからは10.0.2.2として見えるので、そこで運用しているProxyポートを設定。
他にリダイレクトなどの方法があるみたいだけど、今の所必要ないので試してない。

エミュレーターでマーケット

エミュレーターでマーケットを利用できるようにしている人もいるみたいだけど、自分では今の所成功してない。

ここの最新コメントにもあるように、system.imgを修正した後、再起動するとMarketが消えてしまう。
というかそもそもsystem.imgが更新されていない様だ。
rwでのremountやchmodを正常に行って、書き込みも行えているのだが、実際のsystem.imgは更新されない。

これってそうできないように修正されたんじゃないかという気もする…
system.imgは常にtmpfsの様にメモリ上にロードされているとか…

しょうが無いので、cache.imgとしてマウントして無理やりsystem.imgを更新したりといくつか試してみたが、うまく起動しなかった。
yaffs2とかいうマイナーなファイルシステムじゃなかったら、多分簡単に書き換えられるんだけど…

Android 2.3からはext4になるって記事をどこかで読んだ気もするが、今の所SDKではそうなっていない。
とにかく現状お手上げ状態。

スマートフォンの接続

もう実機があるのだから、エミュレーターは程々にして、実際にスマートフォンを接続してみる。

Linuxでは、USB接続するためにudevルールを追加する必要がある。
参考: http://developer.android.com/guide/developing/device.html

/etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666", GROUP="usb"

ここで、"0fce"は自分のスマフォのメーカーであるSony EricssonのUSB Vendor ID、GROUP制限はandroidグループでも良かったけど、usbグループにした。

できたら

chmod a+r /etc/udev/rules.d/51-android.rules

しとく。

スマートフォン側の設定は

  • アプリケーション
    • 提供元不明のアプリ: ON
    • 開発
      • USBデバッグ:ON

でOKなはずなのだが、Xperia acroの場合は、

  • Sony Ericsson
    • 接続
      • PC Companionのインストール:OFF

にしておいた方が良さそうだ。
何度か接続に失敗して、これをOFFにしてみたらうまく行った。

dmesgはこんな感じ。エラーもいっぱい出ているんだが、とりあえずは良し。

# dmesg
...
[50286.021045] ehci_hcd 0000:00:13.2: port 2 high speed
[50286.021051] ehci_hcd 0000:00:13.2: GetStatus port:2 status 001005 0  ACK POWER sig=se0 PE CONNECT
[50286.072042] usb 2-2: new high speed USB device number 19 using ehci_hcd
[50286.123064] ehci_hcd 0000:00:13.2: port 2 high speed
[50286.123069] ehci_hcd 0000:00:13.2: GetStatus port:2 status 001005 0  ACK POWER sig=se0 PE CONNECT
[50286.187071] usb 2-2: default language 0x0409
[50286.187439] usb 2-2: udev 19, busnum 2, minor = 146
[50286.187441] usb 2-2: New USB device found, idVendor=0fce, idProduct=515c
[50286.187444] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[50286.187446] usb 2-2: Product: SEMC HSUSB Device
[50286.187448] usb 2-2: Manufacturer: SEMC
[50286.187449] usb 2-2: SerialNumber: xxxxxxxxxxxxxxxxxx
[50286.187521] usb 2-2: usb_probe_device
[50286.187525] usb 2-2: configuration #1 chosen from 1 choice
[50286.187693] usb 2-2: adding 2-2:1.0 (config #1, interface 0)
[50286.187764] usb 2-2: adding 2-2:1.1 (config #1, interface 1)
[50286.187802] drivers/usb/core/inode.c: creating file '019'
[50286.187837] hub 2-0:1.0: state 7 ports 6 chg 0000 evt 0004

adbで確認すると

# adb devices
List of devices attached
<SerialNumber> device

っといった具合に表示される。

Hello,World

EclipseでHello,Worldプロジェクトを作成し、
実行したらあっけなくスマートフォンにインストール・実行できた。

Cairoの問題は…Eclipseでの開発が必須になったら考えよう…