ラベル Tizen の投稿を表示しています。 すべての投稿を表示
ラベル Tizen の投稿を表示しています。 すべての投稿を表示

2013年9月28日土曜日

[Tizen]よく使うsdb(Smart Development Bridge)コマンドの使い方メモ

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]よく使うsdb(Smart Development Bridge)コマンドの使い方メモ

Tizenのエミュレーターや実機へのアプリ転送などをコマンドライン上で行えるsdb(Smart Development Bridge)がTizen SDKに同梱されています。 これはAndroidでいうadbコマンドのTizen版になります。

上記を利用する事でIDEを介さず、エミュレーターや実機にして操作が出来るのでよく使う機能などをメモを記載します。 (詳細はsdb helpコマンドで見れます)

  • sdbコマンドの場所
  • 接続されているTizenデバイスの確認
  • sdbコマンドの対象デバイスの指定
  • Tizenデバイスへのアプリ(tpk,wgt)のインストール
  • Tizenデバイスへのリモートログイン
  • Tizenデバイスからのファイル取得
  • Tizenデバイスへのファイル転送
  • その他

sdbコマンドの場所

Macの場合、$TIZEN_HOME/tools/sdbです。 パスは忘れてしまいましたが、Ubuntu、Windowsでも同様にsdbコマンド自体は利用可能です。(Windowsの場合にはコマンドプロンプト)

予め、.bashrcなどでパスを通しておくと便利です。 私の環境では以下のような感じ。

$export PATH=$PATH:/Users/toshihirock/tizen-sdk/tools

接続されているTizenデバイスの確認

エミュレーターや実機で現在PCに接続されていると認識しているTizenデバイス一覧を表示するにはsdb devicesコマンドを利用します。

$ sdb devices
* daemon not running. starting it now on port 26099 *
* daemon started successfully *
List of devices attached 
emulator-26100  device  mini
emulator-26110  device  abc1

List of devices attached配下に端末一覧が表示されています。 上記例ではminiabc1という名称のエミュレーターを2つ起動しています。

実機の場合にも、上記と同じように表示されます。 もし、実機が表示されない場合、端末のUSBデバッグモードが有効化されていない、もしくはUSBドライバがインストールされていない可能性があります。

なお、上記例ではdaemon not running. starting it now on port 26099ということでsdbサーバが同時に起動しています。

コマンドで明示的に起動する場合、sdb start-serverとすることで対応できますが、上記のように起動していなければ勝手に起動してくれるみたいなので個人的にはあまり使いません。(逆に停止する場合にはsdb kill-serverコマンドを利用します)

sdbコマンドの対象デバイスの指定

複数のTizenデバイスを接続している場合、どの端末に対してsdbコマンドを発行するか指定する必要があります。

対象が実機であるか、エミュレーターの違いかである場合にはオプションで-d-eを利用するのが便利です。(installコマンドについては後述)

$sdb -d install example.wgt
$sdb -e install example.wgt

-dオプションで実機(device)、-eオプションでエミュレーター(emulator)に対して指定したコマンドを実行しています。

実機を2台以上接続してる、エミュレーターを2台以上接続してる時はどうするかというとsdb devicesコマンドを利用してそれぞれのSerial Numberを取得し、オプションで-sを利用して指定します。

$sdb devices
List of devices attached 
emulator-26100  device  mini
emulator-26110  device  abc1
$sdb -s emulator-26100 install example.wgt

上記例ではまず、sdb devicesコマンドでそれぞれのSerial Numberを確認しています。 Serial Numberは一番左の名称が該当しています。(この例ではemulator–26100とemulator–26110)その後、-sオプションんを使用してSerial Numberが「emulator–26100」の方にアプリをインストールしています。

Tizenデバイスへのアプリ(tpk,wgt)のインストール

作成したtpk、wgtをTizenデバイスにインストールする場合にはsdb installコマンドを利用します。

$sdb -e install example.wgt

上記例ではexample.wgtというアプリをエミュレーターインストールしています。 既に上記アプリがインストールされている場合にも上記コマンドで上書き更新してくれます。

Tizenデバイスへのリモートログイン

Tizenデバイスにリモートログインする場合、sdb shellコマンドを利用します。なお、TizenIDEのConnection ExploerでもGUIでファイル構成などが確認できます。

$sdb -e shell
sh-4.1$

上記例ではエミュレーターにリモートログインしています。

普通にコマンドも使えます。

sh-4.1$ ls -la
total 88
dr-xr-xr-x  24 root root  4096 2013-07-17 20:38 .
dr-xr-xr-x  24 root root  4096 2013-07-17 20:38 ..
dr-xr-xr-x   2 root root  4096 2013-07-17 20:37 bin
dr-xr-xr-x   2 root root  4096 2013-06-14 10:38 boot
drwxr-xr-x   2 root root  4096 2013-07-17 20:36 cache
drwxr-xr-x   2 root root  4096 2013-08-03 23:36 csa
drwxr-xr-x   2 root root  4096 2013-07-17 20:36 data
drwxr-xr-x  15 root root  3700 2013-09-28 06:17 dev
drwxr-xr-x  39 root root  4096 2013-08-03 23:36 etc
lrwxrwxrwx   1 root root     9 2013-07-17 20:36 home -> /opt/home
dr-xr-xr-x   9 root root  4096 2013-07-17 20:37 lib
drwx------   2 root root 16384 2013-07-17 20:36 lost+found
drwxr-xr-x   2 root root    40 2013-09-28 06:17 media
drwxr-xr-x   9 root root  4096 2013-07-17 20:37 mnt
drwxr-xr-x  14 root root  4096 2013-07-17 20:37 opt
dr-xr-xr-x 108 root root     0 2013-09-28 06:17 proc
lrwxrwxrwx   1 root root    14 2013-07-17 20:36 root -> /opt/home/root
drwxr-xr-x  12 root root   340 2013-09-28 06:17 run
dr-xr-xr-x   2 root root  4096 2013-07-17 20:38 sbin
lrwxrwxrwx   1 root root     8 2013-07-17 20:36 sdcard -> /mnt/mmc
drwxr-xr-x   2 root root     0 2013-09-28 06:17 smack
drwxr-xr-x   2 root root  4096 2013-06-14 10:38 srv
dr-xr-xr-x  12 root root     0 2013-09-28 06:17 sys
drwxr-xr-x   2 root root  4096 2013-07-17 20:36 system
drwxrwxrwt  12 root root  1700 2013-09-28 06:43 tmp
drwxr-xr-x  16 root root  4096 2013-07-17 20:38 usr
drwxr-xr-x  16 root root  4096 2013-07-17 20:36 var

suコマンドでスーパーユーザーにもなれます。

上記より、例えばIDEのコンソールなどでhogeっていうファイルを吐き出したよって言っているけどそれってどこなんだって言うときにはsdb shellでリモートログインしてfindコマンドで探すっていうのが手っ取り早いです。

sdb shell -ls -laなどとコマンドを指定するとリモートログインすることなく、コマンドの実行も可能なようです。

Tizenデバイスからのファイル取得

Tizenデバイスからファイルを取得する場合、sdb pullコマンドを利用します。

$sdb -e pull /opt/usr/media/Images/Default.jpg ~/Downloads/
1 file(s) pulled. 0 file(s) skipped.
/opt/usr/media/Images/Default.jpg   5834 KB/s (632118 bytes in 0.105s)

上記例ではTizen端末の/opt/usr/media/Images/Default.jpgファイルをローカルPCの~/Downloads/においてね、という操作をしています。

Tizenデバイスへのファイル転送

Tizenデバイスへファイルを配置する場合、sdb pushコマンドを利用します。

$sdb -e push ~/Downloads/icon.jpg /opt/usr/media/Images/
1 file(s) pushed. 0 file(s) skipped.
/Users/toshihirock/Downloads/icon.jpg   210 KB/s (2799 bytes in 0.013s)

上記例ではローカルPCの~/Downloads/icon.jpgというファイルをTizen端末の/opt/usr/media/Images/においてね、という操作をしています。

sdb pullとsdb pushでは第1引数と第2引数の意味が違うので注意です。

その他

上記以外でもsdb uninstallでアプリをアンインストールしたり、やsdb dlogでログを見たりできますが、個人的にあまり使わないので割愛します。その他にもコマンドなどありますが、詳細はsdb helpで確認下さい。

[TIzen]アプリ転送時に「There is no device to launch」というダイアログが表示される場合

このエントリーをはてなブックマークに追加 はてなブックマーク - [TIzen]アプリ転送時に「There is no device to launch」というダイアログが表示される場合

エミュレーターを起動しているにも関わらず、IDEからRun Asでアプリをエミュレーターに転送しようとした際にThere is no device to launchというダイアログが表示される事があります。

上記の場合、Tizen IDEでConnection Exploerウィンドウを開けば問題が解消されます。

Tizen IDEをインストールした場合にはデフォルトで上記Windowは表示している状態だったと思いますが、消してしまった場合、Tizen IDEのWindow→Show View→Other→Tizen→Connection Exploerで再表示可能です。

また、上記ウィンドウでエミュレーターを含む現在sdbで認識しているデバイスが表示されるので、そこにエミュレーター(実機)があるかも確認できます。

sdbコマンドを利用することでアプリの転送も可能ですが、別の機会に!

2013年8月10日土曜日

[Tizen][Jenkins]TizenネイティブアプリをJenkinsでビルドした時のメモ

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen][Jenkins]TizenネイティブアプリをJenkinsでビルドした時のメモ

Tizenネイティブアプリ(C++)のビルドをUbuntuのJenkinsでビルド出来るようにした時のメモを記載します。

結論から言うとEclipse CDT Headless build機能を利用する事で簡単に出来ました。(その結論まで辿り着くのに時間が掛かったけど。。。。)

また、上記での運用の場合、.project及び.cprojectファイルもあわせてリポジトリにコミットする事でEclipse(TizenIDE)での設定(平行ビルドやincludeするプロジェクトなどなど)をそのまま使え、新たにmakefile作成ようにシェルを作成しなくても良いのがとても楽です。

環境は以下の通りとなります。

  • Ubuntu 12.10
  • TizenSDK 2.2

また、私の環境では以下のように運用しています。

  • 30分ごとにリポジトリをポーリングし、更新があれば再ビルド
  • ビルドによってtpkまで作成する
  • ビルドの成功可否をIRCで通知
  • Doxygenでドキュメント生成
  • Cppcheckによる静的解析

なお、実施の際には以下を参考にさせて頂きました。

JenkinsでEclipse CDT (C++) プロジェクトをビルドする

C言語/C++でJenkins実践入門してみるよ

目次

  1. UbuntuへのTizenSDKインストール
  2. UbuntuへJenkinsのインストール
  3. Xvfbのインストール
  4. JenkinsでEclipse Headless Build
  5. tpk作成スクリプト作成
  6. Jenkinsプラグインの導入

1.UbuntuへのTizenSDKインストール

Tizenの公式サイトに記載の通り実施します。 java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.widgets.Displayというエラーが出る事がありますが、対応方法は

UbuntuにTizenをインストールする際に「java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.widgets.Display」というエラーが出た場合

として以前のエントリに記載したのでご確認ください。 上記以外は特に点はないかと思いますので、詳細は省きます。

インストール後、TizenIDEが利用できる所までを確認してください。

2.UbuntuへのJenkinsのインストール

以下のコマンドでOK。

sudo apt-get install jenkins

あとはブラウザでJenkinsにアクセスし、適当な名称でジョブを追加します。

3.Xvfbのインストール

Eclipse Headless Buildをコマンドラインから実行する場合に、Xvfbがないとエラーが出るのでインストールします。

>sudo apt-get install xvfb

Xvfbの起動起動及び停止はJenkinsのXvfb Pluiginを利用する事でプラグイン側で自動でやってくれるので、今回はそれを利用します。

Jenkisnのプラグイン管理から上記プラグインをインストールして、パスを設定します。 その後、予め作成したジョブの設定でXvfbに関する設定にチェックを入れればビルド開始時にXvfbの起動を行い、ビルド終了時にXvfbの停止を行ってくれます。

上記を利用しない場合には以下のようなコマンドで実行可能なので一応メモっておきます。

Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
export DISPLAY=:99

4. JenkinsでEclipse Headless Build

いよいよHeadless Buildを利用してビルドします。 Jenkinsのシェル実行の箇所で以下のように記載します。

# move workspace
cd ../
# headless build
/home/toshihirock/tizen-sdk/ide/eclipse -data workspace --launcher.suppressErrors -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -import Utility -build Utility/Debug

上記例ではUtilityというネイティブプロジェクトをDebugプロファイルでビルドしています。

  • /home/toshihirock/tizen-sdk/ide/eclipse→TizenIDE(Eclipse)の場所を指定。Windowsの場合、eclipse.exeを指定。Macの場合、TizenIDE.app/Contents/MacOS/TizenIDEを指定。
  • -data workspace→workspaceを指定。
  • –launcher.suppressErrors→ポップアップ画面を抑制し、メッセージをコンソールへ出力する。おまじない。
  • -nosplash→スプラッシュ画面抑制。おまじない。
  • -application org.eclipse.cdt.managedbuilder.core.headlessbuild→headless buildを指定。おまじない。
  • -import→Utility ビルド対象のネイティブプロジェクトを指定
  • -build→Utility/Debug Debugビルドを実施。

上記を実行すると.project及び.cprojetの設定に従い、makefileの生成、実行を自動で実施し、ビルドを行います。 (TizenIDEでプロジェクトを右クリック→Build Projetと実行した場合と同じ挙動)

上記実行後、Utility/Debugフォルダが作成され、ビルドがうまくいけばexeファイルの作成が確認できます。

5.tpkファイルの作成

ビルドを行う事でexeファイルは作成できますが、最終的にアプリとして動作させる為にはネイティブアプリの場合にはtpkにパッケージングする必要があります。

上記はTizenから提供されるnative-packagingコマンドを利用します。

コマンドは$TIZEN_SDK_HOME/tools/ide/bin配下に存在します。

なお、tpk作成時の設定ファイル(build_data)については上記と同じ場所に存在するnative-genコマンドを利用して事前に作成します。

cd workspace/Utility
/home/toshihirock/tizen-sdk/tools/ide/bin/native-gen makefile -t app

上記でCommandLineBuildフォルダが作成され、その中にbuild_dataという設定ファイルが作成されるので、適当な場所にコミットします。 (native-genやnative-makeコマンドを利用してビルドも出来ますが、バグっぽいのがあってうまく出来ない事があったので今回はその方法を利用していません。)

また、もし、証明書(p12)を作成していない場合には、予め作成してこちらも適当な場所にコミットします。

これで準備ができたので、native-packaginコマンドを利用してtpkを作成するシェルを作成します。

# Debugフォルダに移動
cd workspace/Utility/Debug
# build_dataをDebugフォルダに移動
cp ../build_data .
# パッケージング
/home/toshihirock/tizen-sdk/tools/ide/bin/native-packaging -ak ../../ryan.p12 -ap mypassword

これで成功すればtpkファイルがDebugフォルダに作成されます。

-akオプションで証明書の場所を指定し、-apコマンドで証明書のパスワードをしております。 各コマンドの詳細はTizenの公式サイトをご確認下さい。

6.Jenkinsプラグインの導入

一応、これでビルドからtpk作成までをJenkisnのジョブとして実行できますが、せっかくなので便利だったJenkinsプラグインもこちらに記載します。(詳細は省きます)

  • Cppcheck Plugin:C++の静的解析が可能です。かなり便利!
  • Doxygen Plugin:連携させておくとDoxygen形式のドキュメントが見れます。
  • IRC Plugin:ビルドの正否をIRCで通知できます。コミットログも合わせてPOSTしてくれるのが意外と便利。
  • Task Scanner Plugin:TODOを集計できます。

2013年8月4日日曜日

[Tizen]ネイティブアプリ開発をコマンドラインで実施する為のメモ

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]ネイティブアプリ開発をコマンドラインで実施する為のメモ

Tizenでは基本的にIDEを利用してソースコードのビルドやパッケージングが出来ますが、IDEを利用せず、コマンドラインでも実施可能なので、そのやり方について記載します。

  1. 利用準備
  2. プロジェクトの作成
  3. makefileの作成
  4. makefileの実行
  5. tpkファイルの作成
  6. tpkファイルを端末(エミュレータ)にインストール
  7. tpkを実行させる

確認した際のTizenSDKは2.2で、OSはMacOSXとなります。

なお、詳細なコマンドオプションなどについては公式ドキュメントのCommand Line Interfaceという欄に記載があります。

利用準備

利用する為にはTizenSDKのインストールが必要となります。 インストール後、コマンドにパスを通す事で利用が出来ます。 私の場合、TizenSDKはhome配下に配置したので以下のようにました。

vi .bashrc
# export Tizen CLI Tools
export PATH=$PATH:/Users/toshihirock/tizen-sdk/tools/ide/bin

プロジェクトの作成

native-genコマンドを利用する事で新規にTizenプロジェクトが作成できます。 例えば、Helloというプロジェクト名、テンプレートでEmptyApplication(起動は可能だが、白い画面が出るのみ)を選ぶ場合には以下のコマンドとなります。

native-gen -n Hello -s empty
Creating a project: Hello...
A project was created successfully in /Users/toshihirock/tizen_workspace/Hello 
To build a project, run native-make in /Users/toshihirock/tizen_workspace/Hello/CommandLineBuild.

上記によってカレントディレクトリにHelloというフォルダが作成され、その配下にテンプレートのコードや設定ファイルが存在します。

-nでプロジェクト名称、-sでテンプレートを選択しています。(その他オプションもありますが、割愛) 詳細なオプションはマニュアルを確認頂ければと思います。

IDEでプロジェクトを作成した時との違いとして、プロジェクト配下にCommandLineBuildというコマンドラインでビルドなどを行う為のフォルダが作成されます。

makefileの作成

デフォルトのソースコードに対応したmakefileはCommandLineBuildフォルダ配下に存在しますが、ソースコードが追加、削除になった場合、makefileを修正する必要があります。

上記についてはプロジェクト作成時同様にnative-genコマンドを利用する事で、makefileのみ更新する事が出来ます。(ただし、現状はTizenのバグなのか分かりませんが、src直下のコードのビルドしか対応しておらず、srcの下にさらにフォルダがある場合には正しいmakefileが作成されないようでした。。。)

先ほどのHelloプロジェクトのmakeifleを再作成する場合、以下のようにします。

cd Hello
native-gen makefile -t app
A makefile was created successfully in /Users/toshihirock/tizen_workspace/Hello/CommandLineBuild.
To build a project, run native-make in /Users/toshihirock/tizen_workspace/Hello/CommandLineBuild.

上記によってmakefileが再作成されます。(既にmakefileが存在する場合でもOKです)

-tオプションでプロジェクトの種類を指定します。

  • app
  • static
  • shared

なお、TizenIDEでプロジェクトを作成したが、CLI用のmakefileを作成したい場合、IDEで

  • 対象のプロジェクトを右クリック→Generate Command Line Configuration

でCommandLineBuildフォルダ配下のファイルを作成する事も可能です。

makefileの実行

makefileの実行はCommandLineBuildフォルダに移動し、native-makeコマンドを利用して実行します。

cd CommandLineBuild
native-make

成功するとCommandLIneBuild配下にexeファイルが作成されます。

tpkファイルの作成

Tizenのネイティブアプリは.tpkというファイルにパッケージングする必要があります。 上記についてはnative-packagingコマンドを利用します。 なお、利用の際に証明書の場所及びパスワードについて指定して実行します。

native-packaging -ak /Users/toshihirock/tizen-sdk/tools/certificate-generator/ryan.p12 -ap mypassword

-akオプションでは証明書のパスを指定し、-apオプションで証明書のパスワードを設定しています。 上記実行後、CommandLIneBuild配下にtpkファイルが作成されます。

tpkファイルを端末(エミュレータ)にインストール

native-installコマンドを利用する事でエミュレータにtpkをインストールできます。

native-install -p vqZpHSuVeq-1.0.0-i386.tpk

-pオプションでインストール対象のtpkファイルを指定しています。 また、上記はエミュレーターが一つのみ起動している場合のコマンドとなります。

端末がないので分かりませんが、端末を接続し、エミュレーターも起動している場合にはどちらにインストールするか指定する必要があります。その場合には-sオプションを利用してserial numberを指定する必要がありそうです。

tpkを実行させる

native-runコマンドを利用する事でtpkを実行できます。

native-run -p vqZpHSuVeq

-pオプションでパッケージ名称を指定することでエミュレーターでアプリが起動する事を確認できます。

最後に

native-uninstallnative-debugというコマンドも存在しますが、調査しきれなかったので割愛します。。。。

2013年7月26日金曜日

[Tizen]UbuntuにTizenをインストールする際に「java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.widgets.Display」というエラーが出た場合

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]UbuntuにTizenをインストールする際に「java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.widgets.Display」というエラーが出た場合
Ubuntu12.10にTizen2.2をインストールしようとしたら、binファイル実行時に
java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.swt.widgets.Display
というエラーが出てインストールに失敗した。
この場合、エラーの通りSWTのクラスが見つけられていないのでswt.jarをJavaのlib/extに配置すればOK。

SWTのサイトからLinux用のZIPファイルをダウンロードするとswt.jarがあるのでこちらを配置。Java7の場合は以下に配置した。
/usr/lib/jvm/java-7oracle/jre/lib/ext
上記で解決する。

2013年7月14日日曜日

[Tizen]TizenでHosted Web applicationsを作ってみる

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]TizenでHosted Web applicationsを作ってみる

Tizenでは大きく分けて以下の2つのWebアプリの提供方法があります。

  • Packaged Web applications
  • Hosted Web applications

ざっくりいうとPackaged Web applicationsはアプリ内(.wgt)にHTML,CSS,JavaScriptを配置して動作するのに対し、Hosted Web applicationsでは外部のサーバーにHTML,CSS,JavaScriptなどを配置させ、アプリから上記のサーバーにアクセスする事で動作します。

Hosted Web applicationsは上記で記載したようにアプリを起動した後にどのURLを表示させるかをconfig.xmlに以下のように記載します。

<tizen:content src="http://your_hosted_app_url"/>

your_hosted_app_urlは適宜変更して下さい。 これだけでOKです。

で、動作確認なのですが、Tizen Web SimulatorだとTizenSDK2.1では動作しません!

なので、Tizenのエミュレーターで動作確認しましょう! こちらだと上記のやり方でアプリ起動後、指定したURLを表示する挙動が確認できます。

2013年7月13日土曜日

Tizen Web Application Checkerを試してみた

このエントリーをはてなブックマークに追加 はてなブックマーク - Tizen Web Application Checkerを試してみた

Tizen Web Application Checkerなるものがあると知った。

TizenのWebアプリケーションとして作成したものがルールに従っているかチェックしてくれるツール、と。

とりあえず試してみる。

公式

Tizen Web Application Checker User Guide

対応OS

  • Linux(Ubuntu)
  • Windows
  • MacOSX

今回はMacOSXで確認。

準備

Nodeのv0.8より大きいバージョンのものをインストールしておけと。 WindowsだとNode入れるときにPythonが必要みたいでそこは注意しろと。

でパスを通しておけと。

$node -v
v0.10.11

こんな感じでパスが通っていればOK。

ダウンロード(インストール)

公式にリンクがあります。(リンク切れしていれば公式から落としてください)

Tizen Web Application Checker

ZIPがダウンロードできるので、解凍。

解凍したフォルダ名をtizen-web-app-checkerとします。

以下でバージョンが取得できるか確認。(tizen-web-app-checkerのパスは適宜変更)

$node ~/tizen-web-app-checker/bin/tizen-web-app-checker.js -V
1.0

使ってみる

TizenIDEからサンプルで作成出来るWebアプリでどんな感じなるか、確認。 Webアプリケーションは作成しビルドすれば、.wgtというファイルが出来るのでそれを利用します。 利用方法は以下のようにします。単純にさっきのコマンドの引数にwgtのパスを渡せばOK。

$node ~/tizen-web-app-checker/bin/tizen-web-app-checker.js ~/tizen_workspace/TizenWebApp/TizenWebApp.wgt 

start checking according to Tizen 2.1 compliance specification
Package checker started...
 Checker finished.
Security checker started...
Generating html report...
All tests completed.
Results report: /Users/toshihirock/tizen-web-app-checker/TizenWebApp.html

最後の行でレポート出力結果のHTMLをどこに出力したか表示されるので開きます。(tizen-web-app-checker配下に出力されるっぽい)

$open /Users/toshihirock/tizen-web-app-checker/TizenWebApp.html 

今回の奴はとくにNGのポイントはなく成功。

jQueryMobileのサンプルアプリ作ってこのツールで確認するとこんな感じでエラーとか検出してくれました。

2013年7月10日水曜日

「Tizenネイティブアプリ開発ことはじめ」というタイトルにて勉強会で発表してきました

このエントリーをはてなブックマークに追加 はてなブックマーク - 「Tizenネイティブアプリ開発ことはじめ」というタイトルにて勉強会で発表してきました

タイトルの通り、Tizenネイティブアプリ開発ことはじめという事でWebプラットフォーム勉強会にて発表させて頂きました!


あまり人前で話すのは得意でなく、当日も色々操作ミスしたりしてしまったのですが、助けてくださる方がいらっしゃって何とか終える事が出来ました。

半分勢いもあって応募したのですが、良い経験になりましたっ!

2013年7月2日火曜日

[Tizen]TizenIDEでDoxygenコメントの補完

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]TizenIDEでDoxygenコメントの補完
デフォルト設定のTizenIDEだとDoxygenコメントの補完がされない。(メソッドで/**とタイプした際に@param,@returnなどの補完が行われない)

上記についてはPluginなしで以下の設定変更で対応可能。

  • Preferences→c++→Editor→Documentation tool commentsで選択出来るセレクトボックスでDoxygenを選択。


以上で完了っす。

2013年6月24日月曜日

[Tizen]Tizenネイティブアプリ開発でのUnitテストの実施

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizenネイティブアプリ開発でのUnitテストの実施

Tizenネイティブアプリ開発時のUnitテストについて試してみたのでメモ。

Tizenのネイティブアプリ開発ではC++での開発となりますが、テストはどうするのかというと標準でGoogle C++ Testing Frameworkが同梱されており、公式ドキュメントでもこれを使うような記述があるのでこれを利用するのが一般的ではないかと思われます。

Unit Test Tool

上記リンクからTizen Native App Programing→IDE and Tools→Unit Test Toolと辿るとTizen公式ドキュメントが確認できます。

今回の例ではサンプルアプリにクラスを追加し、そのクラスに対してテストを行ってみます。 手順は以下の通りです。

  1. テスト対象プロジェクト作成(サンプルアプリ)
  2. テストプロジェクトの作成
  3. テストプロジェクトの編集
  4. テストプロジェクトの実行

なお、公式ドキュメントにテストの項目の欄で以下の記述があるため、注意が必要ではあります。

  • The unit test tool is designed to support only functional testing.
  • The unit test tool is not an OSP-based application. Therefore, certain methods related to the OSP application framework, such as the methods of the Tizen::Base::String class, can behave incorrectly.

超適当な意訳

  • functionテストのみがサポートですよー。
  • このUnit Test toolはTizen用のテストツールって訳じゃないよ。なので、Tizen::Base::Stringクラスとかいくつかのメソッドなどは誤った動作するかと思われます。

ま、まじでか。 とか思って試しにTizenのStringを利用したテストコード書いてみましたが、一応大丈夫でした。 保証はできないってことか、な。

確認環境など

  • MacOSX 10.8.4
  • TizenSDK2.1(IDEやSDKなどはインストール済み)

1.テスト対象プロジェクト作成(サンプルアプリ)

まずはテスト対象のHellWorldプロジェクトをTizenIDEを利用して作成します。

  • File→New→Others
  • Tizen→Tizen Native Project
  • Templateタブを選択→Tizen Native→Form-based Application→With SceneManagerを選択。Project Nameは任意の名前でOKですが、本例ではHelloWorldとします。

これでとりあえずプロジェクトができます。

次にUtilクラスを追加します。

とりあえずこんな感じでメソッドを2つ作ってみました。(C++初心者なので書き方がまずいかもしれませんが、とりあえず許して下さい。。。)

Util.h

#ifndef UTIL_H_
#define UTIL_H_
#include <FBase.h>

class Util {
public:
    int Sum(int x, int y) ;
    void AppendWorld(Tizen::Base::String& base);
};


#endif /* UTIL_H_ */

Util.cpp

#include "Util.h"

int Util::Sum(int x, int y) {
    return x + y;
}

void Util::AppendWorld(Tizen::Base::String& base) {
    base.Append("World!");
}

Sum関数では引数に渡した2つの引数の加算を行った結果を返却します。

AppendWorld関数では引数に渡したTizen::Base::Stringクラスの参照引数を利用してAppendメソッドを呼び出して、引数に渡された文字列の末尾に“World!”という文字列を追加します。

今回は上記2つのメソッドに対してそれぞれテストコードを書いてみます。

2.テストプロジェクトの作成

Tizenでテストを行う場合、テスト対象のプロジェクトとは別に新規にテスト用プロジェクトを作成する必要があるようです。 以下の方法で作成を行います。

  • File→New→Others
  • Tizen→Tizen Native Unit Test Project
  • Select the Tizen Project for testの箇所でHelloWorldを選択。

これでHelloWorldプロジェクのテストプロジェクトの完成です。 デフォルトで以下のようなテンプレートテストコードが作成されます。

HelloWorldTest.cpp

include "tizenx.h"
#include "Util.h"
#include "HelloWorldPanelFactory.h"
#include "HelloWorldMainForm.h"
#include "HelloWorldFrame.h"
#include "HelloWorldFormFactory.h"
#include "HelloWorld.h"
#include "AppResourceId.h"

#include <gtest/gtest.h>

class TestSuite : public testing::Test
{
    protected:
    // virtual void SetUp() will be called before each test is run.
    // You should define it if you need to initialize the variables.
    // Otherwise, you don't have to provide it.
    virtual void SetUp()
    {

    }
    // virtual void TearDown() will be called after each test is run.
    // You should define it if there is cleanup work to do.
    // Otherwise, you don't have to provide it.
    virtual void TearDown()
    {

    }
};

// When you have a test fixture, you define a test using TEST_F.
// Otherwise, you define a test using TEST.
TEST_F(TestSuite, test01)
{
    ASSERT_TRUE(true);
}

TEST_F(TestSuite, test02)
{
    ASSERT_TRUE(false);
}

先ほど作成したUtilクラスのヘッダファイルもincludeされているのでテストコードが追加できそうです。

3.テストプロジェクトの編集

HelloWorldTest.cppにSum関数、AppendWorld関数のテストコードに以下のように追加(編集)します。 なお、test02はデフォルトだと実行するとNGとなってしまうので、こちらも変更します。

TEST_F(TestSuite, test02)
{
    ASSERT_TRUE(true);
}
TEST_F(TestSuite, test03)
{
    Util *p = new Util();
    ASSERT_EQ(3, p->Sum(1, 2));
    delete p;
}

TEST_F(TestSuite, test04)
{
    Util *p = new Util();
    Tizen::Base::String hello = Tizen::Base::String("Hello");
    Tizen::Base::String helloworld = Tizen::Base::String("HelloWorld!");
    p->AppendWorld(hello);

    ASSERT_EQ(helloworld, hello);
    delete p;
}

test03ではSum関数の引数に1と2を渡し、結果で3がかえってくる事を確認しています。

test04ではHelloという文字列のTizen::Base::Stringクラスを作成し、AppendWorld関数を利用する事で“HelloWorld!”という文字列になる事を確認しています。

なお、利用しているGoogle C++ Testing Frameworkについては以下の翻訳サイトを参考にさせて頂きました。(まだ全然読めてないですが)

Google C++ Testing Frameworkをはじめよう

4.テストプロジェクトの実行

いよいよテストを実行します。 テストの実行及び結果の確認はTizenIDEで実施できます。

テスト対象のプロジェクトのビルドをしてからテストコードの存在するプロジェクトをビルドします。

  • HelloWorld→右クリック→Build Project
  • HelloWorldTest→右クリック→Build Project

なお、先にHelloWorldTestの方をビルドすると以下のような先にテストする方のプロジェクトしろよ的なメッセージが出ます。その場合、メッセージの通り先にテスト対象のビルドを実施し、その後再度テストプロジェクトのビルドをすればOKです。

次にエミュレーターを起動します。 個人的にはエミュレーターなしでやりたかったのですが、IDEから実行するときは必要だったのでやっておきます。

さてこれで準備がすべて終わったのでいよいよテストを実行します。

  • HelloWorldTest→右クリック→Run As→Tizen Native Unit Test Application

これで実行されるのでしばし待ちます。

結果はIDE上のTest Resultで確認できます。

また、上記左にあるTest Exploerを利用すると特定のテストコードのみの実行ということも可能です。

Tips

設定を行う事で以下が可能なようですが未確認。

  • HelloWorldTest→右クリック→Run As→Run Configurations

以下設定可能項目。
  • Run Disabled Tests
  • Shuffle Tests
  • Don’t Print Elapsed Time
  • Generate and XML Report

Jenkinsとかとも連携さたいので今後はCLIからの実施方法なども確認したい。

2013年6月17日月曜日

[Tizen]Tizenネイティブアプリのビルドでccacheを利用してみる

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizenネイティブアプリのビルドでccacheを利用してみる

前エントリーでC++の平行ビルドのやり方について書きましたが、もう一つのコンパイラキャッシュを利用してビルド時間を短縮する方法を記載します。具体的にはccahceというツールを利用します。 なお、利用するのがキャッシュなので1回目のビルドは早くならないみたいです。ご了承下さい。

また作業実施にあたり、以下を参考にさせていただきました。

ビルドの待ち時間を減らす - ツール編

ccacheのインストール

ccacheをインストールします。 Macの場合にはhomebrewでインストールできます。Windowsの場合、ビルドするための環境(cygwinなど)が必要なようです。。。なお、こちらが公式サイトとなります。

$brew install ccache

Ubuntuなら以下でも大丈夫なようです。(確認はしてません)

$sudo apt-get install ccache

後で利用するのでパスも確認します。

$which ccache
/usr/local/bin/ccache

ccacheの利用

TizenのC++コンパイラはclang++というのを使っているみたいで、そのコマンドを利用する際にccacheも利用してね、という設定を行います。

  • 対象のプロジェクトで右クリック→Properties

  • C/C++ BuildでGenerate Makefilesにチェックが入っている事を確認

  • Settings→C++ Compiler

Commandの箇所を変更したいのですが、変更しても反映されないので(バグか?)ちょっと微妙な気もしますが、Command line patternの箇所を変更します。

  • 変更前→${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
  • 変更後→/usr/local/bin/ccache clang++ ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

また、上記だけでなくC++ Linkerも同じように変更します。

  • 変更前→${COMMAND} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}
  • 変更後→/usr/local/bin/ccache clang++ ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}

ちょっと、いやかなりださい気もしますが、commandの箇所が変更できないので仕方ない。。。

ビルドしてみる

対象のプロジェクトを右クリックしてビルドしてみます。 で、Consoleで上記設定が反映されているかを確認します。

/usr/local/bin/ccache clang++ -I"pch" -D_DEBUG ...(以下略)

上記の通り、コンパイルの箇所でccacheを利用したコマンドへの変更ができているようです。

また、以下のコマンドを実行するとどれぐらいキャッシュが有効だったかなどを確認できます。

$ ccache -s
cache directory                     /Users/toshihirock/.ccache
cache hit (direct)                    54
cache hit (preprocessed)               0
cache miss                            19
called for link                        9
files in cache                        34
cache size                          14.7 Mbytes
max cache size                       1.0 Gbytes

こんな感じで結果がでます。私はHelloWorldプログラムでの確認なのであんまり効果がないっぽいですが、大きなプロジェクトであれば、効果があるかと思っております。 実際に早くなっているかについては計測していないので分かりませんが、時間とやる気があればどこかで。

2013年6月16日日曜日

[Tizen]Tizenのネイティブアプリで平行ビルドしてみる

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizenのネイティブアプリで平行ビルドしてみる

Tizenのネイティブアプリ開発はC++で実施しますが、TizenIDEでビルドする際に平行ビルドを有効にする方法のメモ。

平行ビルドによってビルド時間が短縮できるかはソースの構成などに依存するっぽいですが、C++のビルド時間短縮の常套手段っぽいのでとりあえずやっておきます。

手順

  • 対象のプロジェクトを選択して右クリック→Properties。

  • C/C++ Build→Behaviourタブをクリック。

  • Use parallel buildにチェックを入れる。

  • Use optimal jobs numberもしくはUse parallel jobsと数字を入れる。

例えばUse parallel jobsにチェクをして、数字に2と入れるとビルドの際にmake -j 2 となっており、平行ビルドが実行されている事がTizenIDEのConsoleで確認できます。

/Users/toshihirock/tizen-sdk/tools/smart-build-interface/bin/sbi action tizen-emulator-2.1.native_llvm31.i386.cpp.app -- make -options="-j2 all" -cliprojpath="" -clisdkpath="" -cliunitprojpath="" -cliappid="" 
Checking prerequisite...
Checking make... ok
Building file: ../inc/tizenx.h

平行ビルド数はPCのCPU数コア数より少し多い(?)ぐらいらしいです。。よく分からんけど。

私の環境だとUse optimal jobs numberにすると並列ビルドになりませんでした。サンプルでビルドしているのがHelloWorldのサンプルアプリだからなのかもしれませんが。

2013年6月10日月曜日

[Tizen]Tizenアプリのログ出力方法とかについてドキュメント確認してみた

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizenアプリのログ出力方法とかについてドキュメント確認してみた

TizenのドキュメントのDebugging Macros(ログとかデバッグに関する記述)について確認したのでメモ。 なお、PCのスペックが低くて、実際確認ほぼできず、ドキュメントを意訳した内容となります。

確認はTizenSDK2.1となります。

ドキュメントの詳細は公式サイトのDebugging Macrosを参照ください。

LogViewの表示

以下の操作でTizenIDEより表示出来ます。

Window→Show View→Log

ほとんどAndroidの奴と一緒っぽい感じ。

  • ログレベルによるフィルタリング
  • タグによるフィルタリング
  • ログのエクスポート
  • ログのクリア

とか出来るっぽいです。

ログの書き方

何やら大きく分けて4種類も有るみたい。

  1. Log Macros
  2. Try Macros
  3. Assert Macros
  4. Secure Log Macros

1.Log Macros

すごく普通のログ。

ログレベル指定

ログレベル(info,debug,error)を呼び出すメソッドによって切り替え、引数には表示するログメッセージを設定。

以下記述例。

AppLog("Initialization successful.");

また、以下に各ログレベルでの記述方法を記載します。

  • AppLog(message)
  • AppLogDebug(message)
  • AppLogException(message)

一番上のAppLogはInfoレベルで、AppLogDebugがDebugレベル、AppLogExceiptionがErrorレベルでの出力となります。

条件付きログ出力

第一引数(expression)の条件式がtrueの場合のみログ出力する事も出来る。

以下記述例。

int initVal;

// If initVal is greater than 0, print the info message to the console
AppLogIf(initVal > 0, "initVal is %d.", initVal);

上記のように記載すると変数initvalが0より大きい場合のみログを出力する事が出来ます。 また、以下に各ログレベルでの記述方法を記載します。

  • AppLogIf(expression, message)
  • AppLogDebugIf(expression, message)
  • AppLogExceptionIf(expression, message)

タグ付け

フィルタリングしやすいようにタグを付けてログ出力も出来る。

以下記述例。

AppLogTag("MyTag", "Initialization successful.");

また、以下に各ログレベルでの記述方法を記載します。

  • AppLogTag(tag, message)
  • AppLogDebugTag(tag, message)
  • AppLogExceptionTag(tag, message)

2.Try Macros

条件式結果によってhogeしてからログ出力…みたいな事が出来たりします。なお、ログレベルは一律でError

後述するAssert Macrosとの違いとしてこちらのTry MacrosではプロセスKillはしないみたいです。

TryCatch(condition, expressions, message)

実例を見た方が分かりやすいので、以下記述例。

const A*
MyClass::DoSomething(const wchar_t* pValue)
{
    result r = E_SUCCESS;
    // Do something

// If pValue is null, print "[E_INVALID_ARG] The pValue is null." to the console, 
// execute the expression "r = E_INVALID_ARG", and move to CATCH
TryCatch(pValue != null, r = E_INVALID_ARG, "[E_INVALID_ARG] The pValue is null."); 

SetLastResult(E_SUCCESS);

return _pValue;

CATCH:
  SetLastResult(r);

  return null;
}

英語で書いてある通りですが、

  1. pValueがnullか判断。(conditionの条件式)
  2. pValueがnullの場合、ログで[E_INVALID_ARG] The pValue is null.とErrorレベルのログを出力。
  3. 変数rに定数E_INVALID_ARGを代入。
  4. Catch構文に遷移。

という流れみたいです。

TryReturn(condition, returnValue, message)

条件式(condition)で結果がfalseの場合、messageを出力して、returnValueに記載された値を返却する。

TryReturnVoid(condition, message)

条件式(condition)で結果がfalseの場合、messageを出力して、returnするけど値は設定しない(void)と。

TryLog(condition, message)

条件式(condition)で結果がfalseの場合、messageを出力してその後の処理を継続。(returnしない)

タグ付け

上記それぞれのメソッドで引数が一つ増えてタグを付けるものがありますが、説明は省略。

3.Assert Macros

条件式(condition)の内容がfalseの場合、なんとプロセスkillするそうです!

リリースビルドではやめてね、って書いてあります。

AppAssert(condition)

条件式(condition)で結果がfalseの場合、現在のプロセスをkillする。(ログ出力なし)

AppAssert(condition, message)

条件式(condition, message)で結果がfalseの場合、messageの内容をエラーレベルのログとして出力し、現在のプロセスをkillする。

4.Secure Log Macros

基本的にLog Macros,Try Macrosと似たメソッドがあるが、以下の点が違うようです。

  • 「_SECURE_LOG」を定義していればログを出力するし、なければコンパイルタイミングで消す。
  • 出力ログ文字列の先頭にprefixとして[SECURE_LOG]を追加

一つの目の点が大きな違いですね。(すいません、C++があまり分からず、_SECURE_LOGを定義、というのが具体的に何をすれば良いのか分かってません。。値はいれず、単純に宣言すればよい?)

という事で以下はメソッドのみ記述。

  • AppSecureLog(message)
  • AppSecureLogDebug(message)
  • AppSecureLogException(message)
  • AppSecureLogTag(tag, message)
  • AppSecureLogDebugTag(tag, message)
  • AppSecureLogException(message)
  • AppSecureLogTag(tag, message)
  • AppSecureLogDebugTag(tag, message)
  • AppSecureLogExceptionTag(tag, message)
  • SecureTryCatch(condition, expressions, message)
  • SecureTryReturn(condition, returnValue, message)
  • SecureTryReturnVoid(condition, message)
  • SecureTryLog(condition, message)
  • SecureTryCatchTag(tag, condition, expressions, message)
  • SecureTryReturnTag(tag, condition, returnValue, message)
  • SecureTryReturnVoidTag(tag, condition, message)
  • SecureTryLogTag(tag, condition, message)

2013年6月8日土曜日

[Tizen]TizenIDEからローカルでTizenドキュメントを参照する方法

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]TizenIDEからローカルでTizenドキュメントを参照する方法

TizenIDEからローカルでTizenドキュメントが参照出来るのでメモ。

TizenIDEを起動して、Help→Help Contentsでブラウザが起動してローカルで参照が出来る。

地味だけど便利っす。

また、TizenSDKのクラス、メソッドなどにhover(マウスを合わせる)するとドキュメントがIDE上で参照出来るのでこれも便利。

2013年6月2日日曜日

[Tizen]Tizen Nativeアプリ(C++)でDoxygen+Graphvizを使ってJavaDoc形式コメント書いてみたり、クラス図継承関係確認してみた話

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizen Nativeアプリ(C++)でDoxygen+Graphvizを使ってJavaDoc形式コメント書いてみたり、クラス図継承関係確認してみた話

TizenのネイティブアプリはC++で書かなければいけなくて、C++でJavaDoc的にソースコードにコメントを書こうと思って、何か良いのないかなーと調べてたら何やらDoxygenでそれ出来るよと。

ちなみにDoxygenですが以下のような特徴が有ります。

  • 対応言語はC++だけでなく、Java、Objective-C、Pythonなどがある。
  • Windows、Mac OS X、Linuxで動く。
  • 出力形式としてHTML以外にXMLやLaTeX、RTFもある。

あとGraphvizも使うとクラス図とそれぞれの依存関係が分かるとかでやってみました。

というか最初に言ってしまうとTizen公式サイトのAPIリファレンスもDoxygen+Graphvizを利用しているっぽかったので、結構デファクトスタンダードなのかもとか思ったり。(C++は全く詳しくない)

参考

なお、実施に当たり、以下のサイトを参考にさせて頂きました。

ソースコードを読むのに Doxygen + Graphviz が便利な件

Doxygen+Graphvizでクラス図を自動生成する

確認方法

本例ではTizenIDEでサンプルテンプレートとして用意されているTizenネイティブアプリのFrom-based Application→With SceneManagerにJavaDocコメントを追記して確認しました。(HelloWorldアプリ)

コメント追加

まず、HelloWrold.cppにJavaDoc形式でコメントを記述します。 なお、詳細なコメント記述形式は以下の公式サイトコードのドキュメント付けが分かりやすいです。

Doxygen、Graphvizのインストール

次にDoxygenのインストールします。Homebrewを利用。

brew install doxygen

Graphvizもインストール。こちらもHomebrewを利用。

brew install graphviz

簡単!

なお、Windowsもそれぞれの公式HPにインストーラーがあって簡単にインストール出来ます。

設定ファイル作成

次にクラス図を作成したいディレクトリに移動し、doxygenコマンドで設定ファイルを作成。

cd tizen_workspace/HelloWorld/
doxgen -g

なお、Windowsの場合、doxygenのインストールが終わるとすべてのプログラムにdoxygen wizardというプログラムがあり、それでどのフォルダのドキュメント作成をするか指定していきます。

上記実行後、カレントディレクトリにDoxyfileというファイルが生成されますので、これを編集して出力するドキュメントの詳細を記述します。私の環境ではとりあえず以下を設定。 オプションの詳細はDoxygenを参照下さい。

# 文字エンコーディング。
DOXYFILE_ENCODING = UTF-8

# 出力するファイルの言語
OUTPUT_LANGUAGE = Japanese

# 再帰的にソースコードを捜索するか。
RECURSIVE = YES

# Graphvizを利用するか
HAVE_DOT = YES

# Graphvizのパス。Homebrewでインストールした場合、PATHが通っているので設定しなくても良い。Windowsの場合、Graphvizのbinフォルダを指定する。
DOT_PATH =  

# LaTexを出力するか。
GENERATE_LATEX = NO

実行

設定が終わったら以下のコマンドでドキュメント出力。

doxygen

見てみる

カレントディレクトリにhtmlフォルダが作成されます。その下にindex.htmlが有るので表示。

open html/index.html

しっかり日本語で表示出来てます。

試しにJavaDocコメントを記載したHelloWorld.cppを見てみます。

おお、良い感じ。しっかり日本語表記も出来てます。

クラス階層を見るとこんな感じ。継承関係が分かりやすく表示されています。

上記画面でクラスをクリックすると該当クラスの詳細に遷移するとかも便利。あと左上の検索バーでクラス検索が出来るのですが、サジェスト検索出来るのも結構嬉しい機能。

おまけ

結構感動してJavaのプログラムにも実行してみましたが、クラス継承関係が図式で表示する事が出来て非常に有用だと感じました。

[Tizen]Tizenエミュレーターを動かそうとしてActive secure profile is not set.Please check the signing configuratons at Preferenceとかエラーで出た場合の対応

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]Tizenエミュレーターを動かそうとしてActive secure profile is not set.Please check the signing configuratons at Preferenceとかエラーで出た場合の対応

TizenSDK2.1系でNativeアプリ、Webアプリ関わらずエミュレーターでTizenアプリを始めて動かそうとすると以下のエラーダイアログが表示される場合が有る。

Active secure profile is not set.Please check the signing configuratons at Preference > Secure Profiles.

エミュレーターにアプリをインストールする際に利用する証明書が設定されていないと表示されるエラーです。Profileで証明書を指定する必要があるので、以下の公式サイトCertificate Generatorの通り証明書を作成します。

TizenSDKをインストールしたディレクトリの配下に証明書作成用のディレクトリがあるので移動。<TIZEN_SDK_HOME>の箇所は自分がTizenSDKをインストールしたディレクトリに置き換えて下さい。

cd <TIZEN_SDK_HOME>/tools/certificate-generator 

Shellを実行(Windowsの場合、certificate-generator.batを実行)

./ certificate-generator.sh

質問が色々出てきますが、とりあえず動けば良いのでOptionalの箇所は何も指定せず(Enterを押すのみ)、それ以外の箇所も公式サイトの例の通り指定。

toshihiro308@Toshihirock-MacBook-Air:~/tizen-sdk/tools/certificate-generator$ ./certificate-generator.sh 
Please enter the country name(optional, two letters): (Enter)

Please enter the state or province name(optional): (Enter)

Please enter the city name(optional): (Enter)

Please enter your name(optional, default is 'author'): (Enter)

Please enter your organization name(optional): (Enter)

Please enter your department name(optional): (Enter)

Please enter your email id(optional): (Enter)

Please enter password for pkcs12 format key certificate: 
mypassword
Please enter alias for generated pkcs12 structure: 
ryan
Please enter file name for storing pkcs12 file (*.p12): 
ryan.p12

上記の通り、実行するとカレントディレクトリにryan.p12というファイルが生成されます。

次にTizenIDEに上記のファイルを利用してね、ということを設定します。 TizenIDEを起動し、

TizenIDE→Preferences→TinzenSDK→Secure Profiles

を選択。

ProfilesのAddを押して適当な名前のProfileを作成します。

Profile ItemsのCerificate pathに先ほど生成したp12ファイルのパスを指定し、PasswordにはPlease enter password for pkcs12 format key certificateで指定したパスワードを記載(上記例ではmypassword)を指定し、OKを選択。

その後はTizenエミュレーターで確認が出来ると思います。

2013年4月28日日曜日

[Tizen]MacBookAirのVirtualBoxにUbuntuを入れてTizenの開発環境を構築した時の手順メモ

このエントリーをはてなブックマークに追加 はてなブックマーク - [Tizen]MacBookAirのVirtualBoxにUbuntuを入れてTizenの開発環境を構築した時の手順メモ
Bloggerへの移行前のWordpressにて2012-11-07に投稿した記事です。

今後もしかするとTizen(詳細はこちら)を利用する事があるかもしれなかった為、自分のMacBookAirに開発環境を構築してみました。といっても、SDKがWindows版Ubuntu版しかなかった為、仮想環境のVirutualBox上にUbuntuを載せて、そこに構築しました。

構成


ハードウェア、ソフトウェアの構成は以下の通り。
  • MacBookAir 11-inchi MacOS X Mountain Lion(CPU:Intel Core 2 Duo 1.4GHz、Memory:4GB)
  • VirtualBox v4.2.4
  • Ubuntu 12.10-desktop(32bit)
  • Tizen SDK 2.0 Alpha

作業の流れ


以下の感じです。
  1. VirtualBoxのダウンロード、インストール
  2. Ubuntuのisoイメージダウンロード
  3. VirtualBoxでUbuntuの環境を作成
  4. TizenのSDKダウンロード及び、インストール
  5. IDEの起動
  6. Tizenエミュレーターの起動
  7. Tizenエミュレーターでのサンプルアプリ起動
上記の通り、ダウンロード作業があるのでなるべく通信環境は良い場所で作業した方が良いです。また、Ubuntuなどのインストール自体もそれなりにお時間が掛かりますのでご注意を。

1.VirtualBoxのダウンロード、インストール

以下のサイトからダウンロードしてきます。 Oracle 基本的にはダウンロードタイミングの最新の物で良いかと思います。 ダウンロード後はインストールして下さい。特にはまる事はないかと思います。

2.Ubuntuのisoのイメージダウンロード

以下のサイトからダウンロードしてきます。 Ubuntu こちらも基本的にはダウンロードタイミングの最新の物で良いかと思います。 (私は12.10で実施) なお、Tizenの公式サイトでは
Ubuntu® 11.04 or 11.10 (32- or 64-bit)
と書いてあるため、上記バージョンよりは新しい方が良いとは思われます。

3.VirtualBoxでUbuntuの環境を作成

VirtualBoxの使用方法の詳細は記載しませんが、私は以下の構成にしました。
  • HDD:8GB
  • Memory:2GB
HDDはUbuntuで4.8GBだったかな?ほどが必要で、さらにTizenSDKをインストールする場合にもある程度の領域が必要なので、8GBもしくはそれ以上あると良いかと思います。

メモリはなるべく割けるだけ割いた方が良いと思われます。2GBでも動きますが、結構重い(特にエミュレーター)です。

また、Ubuntu標準のデスクトップ環境Unityそれだけで結構メモリを食ってしまうようです。

潤沢なメモリを割り当てる事が出来れば良いですが、難しい場合には軽量のデスクトップ環境を導入する事をお勧めします。

私はLXDEに変更しました。Unityだと2GBを割り当てても操作がガクガクだったのが、変更することでかなり解消されました。

上記、LXDEの変更はGUIのUbuntu Software Centerもしくはapt-getコマンドでも出来ます。

また、VirtualBoxを利用する場合にはファイルの共有、画面解像度の最適化などが出来るGuest Additionsも導入しておくと便利です。今回のエントリーとは趣旨がずれる為、詳細については記載しません。

4.TizenのSDKダウンロード及び、インストール

4-1.Javaのインストール

まずは、Javaをインストールします。 なお、Tizenのサイトに
Oracle® Java* v7 or later (do not use OpenJDK)
とあるので、Java 7(OpendJDKではなく、pureな)をインストールします。 こちらを参考にさせて頂いたインストールします。 [ubuntu 12.04 LTS] Oracle Java(JDK)のインストール 特に問題なく出来るはずです。

4-2.TizenSDKのインストール

次にTizenSDKをインストールしてきます。
Tizen Developers SDK

Install Managerの一覧から対応するファイルをダウンロードします。

SDK本体以外に画面下部にisoイメージのダウンロードリンクもあるのでご注意下さい。
isoイメージのダウンロードは必須ではないですが、予めダウンロードしておけばSDKのインストール時にインターネット環境を利用せずともできそうです。

ダウンロード後は以下のコマンドを実行します。
なお、ダウンロードファイルは/Downloadsフォルダに配置した場合の想定です。
cd ~/Downloads/
./tizen-sdk-2.0-ubuntu32.bin 
とすると多分、色々ないから駄目よ的なメッセージが出ます。
以下の文がダウンロードページに有るのでこちらに該当するものがないとNGのようです。
In Ubuntu®, the following packages: procps, gettext, libdbus-1-3, libcurl3, expect, gtk2-engines-pixbuf, grep, zip, make, and qemu-user-static
足りない物はapt-getを使って取得します。 私の環境では以下のような操作を実施しました。
sudo apt-get install expect gtk2-engines-pixbuf libgnome2-0
その後、もう1回
./tizen-sdk-2.0-ubuntu32.bin 
とするとInstall Manager画面が起動します。
isoイメージをダウンロードしていない場合、そのままボタンを押していけばOKです。詳細はこちらのサイトに画面キャプチャ付きであるので、参考にさせて頂きました。 Ubuntu 11.10 に Tizen SDK をインストールしてエミュレータを試してみる なお、isoイメージをダウンロードしている場合、Advance→SDK Imageを選択し、ダウンロードしたisoファイルを指定後、元の画面に戻ってNextボタンを押せばOKです。 なお、Proxy環境でやる場合には以下のような記述が公式にあったので起動する際にProxyのIPアドレス、ポート番号の指定が必要のようです。
Are you using a network proxy? If yes, run the Install Manager with the -proxy : argument.

5.IDEの起動

インストールが正常に終了すれば、アプリケーションが登録されているはずです。
IDEをコマンドラインから実行する場合には以下を実施。
tizen-sdk/ide/startup.sh
で、場合にはよって起動後、 MOZILLA_FIVE_HOMEを指定しろ、というメッセージが出ます。(会社のPCでは出なかったですが、自宅のMacBookAirでは出た)

エラー内容を見る限り、SWT関連のファイルを参照するか何かで利用しているようです。

上記は以下のサイトを参考に、libwebkitgtk-1.0-0のインストールと、eclipse.iniへの追記で解決しました。

[Tizen Application-dev] Firefox or Xulrunner problem with Tizen IDE on Ubuntu 12.10 64bit

実際には以下のような操作を実施。
sudo apt-get install libwebkitgtk-1.0-0
vi tizen-sdk/ide/eclipse.ini
★最終行に追記→-Dorg.eclipse.swt.browser.DefaultType=webkit
上記操作実施後、IDE再起動によって事象は改善するかと思います。

6.Tizenエミュレーターの起動

次にTizenのエミュレーターを起動します。
tizen-sdk/tools/emulator/bin/emulator-manager
起動後の画面はAndroidのエミュレーターを作成する画面と似てます。
Create newで新しい仮想端末を作成後、起動して下さい。すごい時間が掛かりますが、辛抱して下さい。

7.Tizenエミュレーターでのサンプルアプリ起動

最後にサンプルアプリを作成してエミュレーターで表示させます。
New→Tizen Web Projectを指定。
その後、下記画面のように選択し、適当にProjectName指定後、Finishを押します。
なお、Finishボタン押下後に、プログレスバーが永遠に進まないなどの場合があるようです。その場合、IDEは終了させて下さい。上記場合でも下記サイトに記載があったようにプロジェクト自体は作成されているようです。

Ubuntu 11.10 で Tizen のサンプルプログラムを動かしてみた

作成後、右クリックしてRun as→1.Tizen Web Applicationでエミュレーターにインストールされ、画面が表示されるはずです。(エミュレーターが接続されている場合にはIDEの左下に下記のようにemulatorの文字が出ます)
エミュレーターを起動するとこんな感じです。
なお、エミュレーターの起動が遅い場合にはRun as→2.Tizen Web Simulator Applicationを選択する事でブラウザでも動作確認我で来ます。
起動するブラウザの設定はWindow→Preferences→TizenSDK→Web→Simulatorで可能です。GoogleChromeがデフォルトの設定のようなので、未インストールの場合にはまずはインストールを実施して下さい。

最後に

とにかくエミュレーターの起動が遅い!です。本当に。
ただ、途中で紹介したGoogleChromeで確認可能なTizen Web Simulator Applicationの起動はそれなりだったので、実際にはだいたいこちらで確認してエミュレーターは最終確認のみ、という感じになるのかなと。

IDEに関してはほぼEclipseなので、割と取っ付きやすそうですね。