2012年7月14日土曜日

android_coreのインストール&ビルド

rosjavaの入門をすっとばして、android_coreのインストールを見てみます。

原典:http://docs.rosjava.googlecode.com/hg/android_core/html/index.html

1)ソースコードの入手

まず以下の2つが必要なのでイントールしましょう。


すでにインストールしている人はAndroid SKDを最新にアップデートしておきましょう(必須です。)

あとはroswsでインストールします。


roscd
rosws merge http://android.rosjava.googlecode.com/hg/.rosinstall
rosws update
source setup.bash

2)ビルド

android_coreが必要とするgoogleパッケージをビルドして、その後、メッセージをアップデートするためrosjava_messagesをビルドします。

roscd
cd google
./gradlew install

roscd rosjava_benchmarks
../gradlew install


roscd rosjava_messages
../gradlew install

で、最後にandroid_coreをビルド。


roscd android_core
./gradlew debug


以上です。

3)サンプルの実行

androidのエミュレータを上げた状態で、

roscd android_tutorial_pubsub
ant installd

とします。するとデバイスにインストールされるので、
アプリ一覧から選択して起動。
Mater選択画面では"New Master"を選択しましょう。
アプリ内でMasterが立ち上がるみたいです。




以上です。


以下は参考情報なので気にしないでいいです。

原典のドキュメント通りにやると
私の環境では以下のようなエラーがでました。なのでgoogleパッケージのビルドを追加。

    [javac] Compiling 40 source files to /home/ogutti/ros/android_core/android_h
oneycomb_mr2/bin/classes
    [javac] /home/ogutti/ros/android_core/android_honeycomb_mr2/src/org/ros/andr
oid/view/visualization/layer/CompressedBitmapLayer.java:40: パッケージ compressed_visualization_transport_msgs は存在しません。

(参考:http://answers.ros.org/question/32319/installing-rosjava-android_core-is-missing/

さらに以下のようなエラーがでました。なのでrosjava_benchmarksのビルドを追加。
(これはいらないはずだが・・・)


    [javac] /home/ogutti/ros/android_core/android_benchmarks/src/org/ros/android/android_benchmarks/MainActivity.java:25: シンボルを見つけられません。
    [javac] シンボル: クラス TransformBenchmark
    [javac] 場所    : org.ros.rosjava_benchmarks の パッケージ
    [javac] import org.ros.rosjava_benchmarks.TransformBenchmark;
    [javac]                                  ^
    [javac] /home/ogutti/ros/android_core/android_benchmarks/src/org/ros/android/android_benchmarks/MainActivity.java:61: シンボルを見つけられません。
    [javac] シンボル: クラス TransformBenchmark
    [javac] 場所    : org.ros.android.android_benchmarks.MainActivity の クラス
    [javac]     nodeMainExecutor.execute(new TransformBenchmark(), nodeConfiguration);


さらに:android_benchmarksで以下のようなエラーがたくさんでました。これはAndroid SDKをアップデートしました。

       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
       [dx] java.lang.IllegalArgumentException: already added: Lorg/apache/xmlrp
c/XmlRpcRequestConfig;....



さらにandroid_tutorial_hokuyoで失敗。SDKアップデート後にcleanしていなかったので、
gradlew cleanして再ビルドしたら直りました。

5 件のコメント:

  1. はじめましてTHと申します。ROS環境構築でとても参考にさせていただいています。

    android_benchmarksでdx関連でエラーが出てしまい、先に進めない状態です(android toolsは最新のr20)

    android_gingerbread_mr1,android_honeycomb_mr2,android_benchmarksはフォルダごとにandroid update projectしないといけないと思いますが「どんなコマンドオプション(-targetなど)で実行されたか」ご教授いただけないでしょうか。よろしくお願いいたします。

    返信削除
    返信
    1. dx関連はエラーでなく警告ではないでしょうか?
      本当のエラーはdxに隠れたところにあると思いますので、もう一度エラーメッセージをよくみてみることをおすすめします。

      フォルダごとにandroid update projectはしていません。
      SKDはandroidを実行して、普通にupdateしただけです。
      あとは書いたとおりです。

      何か分かりましたら追記ください。

      削除
    2. 言われるとおりdxはワーニングでした。まるで止まってるようにみえていましたが、20分ほど放置したらビルドできました(失礼しました)

      ちなみに、いくつかのフォルダはandroid update projectしないと下記エラーがでてビルド出来ませんでした。エラー内容をコピペしておきます。

      Error: The project either has no target set or the target is invalid.
      Please provide a --target to the 'android update' command.
      :android_gingerbread_mr1:debug
      Buildfile: build.xml does not exist!
      Build failed

      削除
  2. おお、よかったです。
    なるほど。追加情報ありがとうございます!

    返信削除
  3. Android SDKでプラットフォームをいくつか入れると、THさんが言われる状況になるっぽいdす。

    android update project -p android_honeycomb_mr2 -t android-13

    とするといいみたいです。

    相変わらずrosjavaは開発が激しくてついていくのが大変です。。。
    例えば、ノード名は

    GraphName.of("nodename")

    とするようになったようです。
    また現在、android_benchmarksがビルドできないので、settings.gradleから削除してみました。

    返信削除