ようこそゲストさん

すらりん日記

メッセージ欄

分類 【プログラミング::Android】 で検索

一覧で表示する

2011/10/15(土) Tegra Android Development Packを入れてみた

ちょっと気が向いてしまったので、
AndroidのNDKも視野に入れた環境を試してみました。
先月あたりにはAndroid SDKいれてJavaでアプリ作成ということはやってみたのですが、
cygwinの面倒さやAndroidでわざわざC++使わなくてもということで、
NDKの部分においては触らないようにしていました。

がしかし、Tegra Android Development Packの最新版が出ていたようなので、気が向いたこともありちょっと試してみました。

一応、NDKの環境を素からセットアップしたこともあるので
手間な部分については知っています。
それと比較すると、はるかにこのTegra Android Development Packを使ったセットアップは楽でした。
これからAndroidをNDK込みで始めたい!という人にはこれはオススメできます。
環境変数などの設定はインストーラーが勝手にやってしまうので、
そこの部分を自分仕様にしたい人には向かなそうですが。

また、cygwinのbinらにもパスが通ってしまうので、
このあたりを嫌う人にはちょっと難しいかもしれません。


手元にあったGalaxySでビルドして動作を確認してみたのですが、
一応動くようで、今のところ完全にTegra用というわけでもなさそうです。
ネイティブデバッガはまだ含まれていませんでしたし。
ネイティブデバッガが使えるようなバージョンになったころには、そのデバッガはTegra用という感じになるのだろうと思います。

2011/10/21(金) WinGDBがイケてる

Androidのネイティブプログラミングをしているときに厄介なのがデバッグ作業です。
一応、最近のSDK(NDK)を使っていれば、ndk-gdb でデバッガをつなげたりするのですが、ちょっと大変です。
できることなら普段のVisualStudioで開発するような感じで実行&ブレークポイント設定したいもんです。

これを実現させてくれるのが、WinGDB for Mobile Systems というソフトウェアです。
現在はまだベータ版なのですが一通りのことは実現させてくれます。
今から製品版が楽しみで、登場したら価格次第ではさっさと買いたいですね。

Java + jniで構成されている環境をインポートして.slnを作成します。
あとは、いつもどおりにF5で実行が可能です。

できたこと

  • ソースコードレベルでのブレークポイント設置
  • 変数の値表示、メモリ表示

不満点

  • スタティックライブラリ作成
ゼロからのプロジェクト作成で、ネイティブのスタティックライブラリを作成することができないという点です。
個人的にちょっとこれは対応してほしい点ですね。
Android.mkなどがすでに用意されている状態でならば、インポートによりスタティックライブラリの開発ができました。
  • Tegra Android Development Pack(TADP)との相性
どうもTADPをインストールした後でWinGDBいれるとうまく動かないようです。
cygwinやSDK,NDKのパスをTADPで設定されたものにしているのですが。
プロジェクトのビルドができないようです。

使う場合には、TADPに頼らずちくちくと自前でインストールしましょうってことなんでしょう。

まとめ

ndk-gdbがうまく使える環境なら、WinGDBも使えると思います。
手元ではGalaxySはうまく動きませんでしたが、ICONIA Tabでやってみたらうまくいきました。

ndk-gdbも、デバッガがない状態からすればとても便利なのですが、
このWinGDBからみるとやはり使いづらいと思います。
printfなどでデバッグしてきた世代からみると夢のような状態ですが、
ソースコードレベルでのデバッグしか経験してないと、Androidでネイティブの環境はきつすぎます・・・。

2011/10/23(日) ネイティブAndroid開発に期待が?!

VisualStudioのアドインとしてのVS-Androidを探している途中に、たまたま見つけた"VS-Android-Debugger"というもの。
名前から、VisualStudio上でAndroidのデバッグができるようになるに違いないと期待しています。

vs-android-debugger

普段の開発でVS-Androidとこのデバッガーと両方そろえば、cygwinやeclipseからオサラバできそうな感じです。

今のところ発足したばかりのようで、今後に期待ですね。

2011/10/25(火) Android 4.0 (ADT)での罠

Android 4.0が出て、SDKをインストール&更新していたら、
eclipseでうまく動かなくなった。
新規のAndroidプロジェクトを作成しようとしたら、ターゲットSDKのバージョンを選べず真っ白だったりとか。
そんな状態だったので、ADTを更新したらさらに悪化した。。。。

Android SDKのパスがリセットされたのかと思ったけど、そういうわけでもなさそう。
ただ設定項目を開くと、以下のようなメッセージが表示されている。
"com.android.sdkuilib.internal.widgets.SdkTargetSelector.access$000(Lcom/android/sdkuilib/internal/widgets/SdkTargetSelector;)Z"

どうやってもわからなかったので調べてみたところ、
eclipseの設定を一度リセットして再度プラグインを読み込ませる方法でいいらしい。

eclipseのあるフォルダには eclipse-clean.cmd があると思うので、
このエラーが発生したときにはこのバッチファイルを実行してeclipseを起動すればよい。
こちらではこの方法でうまく解決できた。

その他

ちなみにAndroid SDKを最新(4.0を含んだやつ)に更新したら、vs-androidのほうで失敗するようになった。
こちらをこれから調べてみようと思う。

2011/10/26(水) Android SDK r14以降でVS-Androidを使う

Android SDK r14(Android 4.0をサポートしたバージョン)から、VS-Androidのサンプルですらビルドが通らなくなった。VS-Androidのサンプルのチュートリアル通りにやってみても失敗し、次に示すエラーメッセージが表示される。
Your build.xml file is outdated. 
Delete it and regenerate it with 'android update project'
そもそもVS-Androidを入れての開発環境ではbuild.xmlはサンプルからコピーして使っていたし、これはそもそも自動生成してできるものじゃなかった。

調査結果

このエラーメッセージはそもそもどこで出されているのかを調べてみた。
r14の状態では、このメッセージは tools/ant/pre_setup.xml に記載されていた。
従来までなら、ここに処理(&設定)が書かれていたはず。

VS-Androidのサンプルにあった build.xmlではこのpre_setup.xmlをインポートして使っていた。
SDKを更新したことで、この役割が変わったようだ。
pre_setup.xmlと同じ場所に、build.xmlというxmlが存在するようになったみたいだ。

解決方法

以下の手順で従来の build.xmlを最新の環境で使用できるようになる。

1.buld.xmlの次の行を編集
  <!-- Required pre-setup import -->
  <import file="${sdk.dir}/tools/ant/pre_setup.xml" />
この部分を、次のように変更する.
  <import file="${sdk.dir}/tools/ant/build.xml" />
2.となっている行を削除

サンプル

自分の環境で "testProj"というVCProjを作成した際に使ったbuild.xmlを下記に表示します。
NativeActivity, hello-JNIのサンプルでこのbuild.xmlが使えることは確認しています。
(ただし、project name="***"の部分は適宜変更してください)


<?xml version="1.0" encoding="utf-8"?>
<project name="testProj" default="help">
  <loadproperties srcFile="local.properties"/>
  <property file="build.properties"/>
  <property file="default.properties"/>
  <loadproperties srcFile="default.properties"/>

  <!-- Required SDK's build.xml import -->
  <import file="${sdk.dir}/tools/ant/build.xml" />
  <path id="android.antlibs">
    <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
    <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
    <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
    <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
    <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
  </path>
</project>