ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Frameworkモバイル開発者ガイド
11g リリース2 (11.1.2.4.0)
B70750-02
  目次へ移動
目次

前
 
次
 

19 ADFモバイル・アプリケーションのテストとデバッグ

この章では、iOSとAndroidの両方のプラットフォーム用に開発されたADFモバイル・アプリケーションのテストとデバッグを行う方法について説明します。

この章には次の項が含まれます:

19.1 ADFモバイル・アプリケーションのテストとデバッグの概要

ADFモバイル・アプリケーションのテストとデバッグを開始する前に、そのアプリケーションを次のいずれかにデプロイする必要があります。

ADFモバイル・アプリケーションは、デプロイしないと実行できません。詳細は、第17章「ADFモバイル・アプリケーションのデプロイ」を参照してください。

ADFモバイル・アプリケーションのテストとデバッグを行うには、通常、次の手順を実行します。

  1. スプラッシュ画面、アプリケーション機能のナビゲーション、認証、プリファレンスなど、アプリケーションのインフラストラクチャをテストして、うたわれているすべてのアプリケーション機能が使用可能であることを確認します。

  2. アプリケーションにADFモバイルAMXコンテンツが含まれている場合は、このアプリケーション機能のロジック、ページ・フロー、データ・コントロールおよびUIコンポーネントをテストします。

  3. 必要に応じてアプリケーションに変更を加えます。

  4. モバイル・デバイスを再接続するか、シミュレータを再起動し、さらなるテストおよびデバッグのためにアプリケーションをデプロイして実行します。

詳細は、次を参照してください:

19.2 ADFモバイル・アプリケーションのテスト

ADFモバイル・アプリケーションをテストするには、次の2つの方法があります。

  1. モバイル・デバイス上でのテスト: この方法では常に、最も正確な動作が提供されます。アプリケーションのパフォーマンスを測定する場合も、この方法をとる必要があります。ただし、テスト実行者がテスト対象のすべてのデバイスを入手できるとはかぎらないため、デバイスのテストは確実なものとは言えません。

  2. モバイル・デバイス・エミュレータまたはシミュレータ上でのテスト: この方法は通常、よりよいパフォーマンスとより高速なデプロイを提供し、便利です。ただし、デバイスのエミュレータまたはシミュレータは、対応する物理デバイスに近似したものであるとは言え、動作の相違やエミュレートできる機能の制限が存在する場合があります。

通常、両方の方法を組み合せて使用することで、最良の結果が得られます。

19.2.1 iOSデバイス上でアクセシビリティのテストを実行する方法

iOSデバイス用に開発されたADFモバイル・アプリケーションのアクセシビリティをテストするには、次の方法を組み合せて使用してください。

  • iOSデバイス・シミュレータ上でアクセシビリティ・インスペクタを使用してテストする。

    詳細は、iOS Developer Libraryにある『Accessibility Programming Guide for iOS』「Testing the Accessibility of Your iPhone Application」を参照してください。

  • iOSデバイス上でVoiceOverを使用してテストする。

    詳細は、iOS Developer Libraryにある『Accessibility Programming Guide for iOS』「Using VoiceOver to Test Your Application」を参照してください。

19.3 ADFモバイル・アプリケーションのデバッグ

JDeveloperには、Javaプログラムをデバッグ・モードで実行し、標準のブレークポイントを使用してOracle ADFアプリケーションの実行を監視および制御することを可能にするデバッグ・メカニズムが備わっています。詳細は、『Oracle Fusion Middleware Oracle JDeveloperユーザーズ・ガイド』のアプリケーションのデバッグに関する項を参照してください。

ADFモバイル・アプリケーションはJDeveloper内部で実行できないため、デバッグの方法が異なります。JDeveloperデバッガを使用して、モバイル・デバイスまたはシミュレータ上のJava仮想マシン(JVM) 1.4インスタンスに接続し、デプロイ済のADFモバイル・アプリケーションのJavaの部分を制御します。

JDeveloperを使用してADFモバイル・アプリケーション内のJavaコードをデバッグするために実行する必要のある手順は、次のとおりです。

  1. リモート・デバッグ用のプロジェクト・プロパティを構成します。この手順では、次のようにADFモデルのデバッグ構成を作成します。

    1. JDeveloperのメイン・メニューで、「アプリケーション」→「プロジェクト・プロパティ」をクリックして、「プロジェクト・プロパティ」ダイアログを開きます。

    2. 「プロジェクト・プロパティ」ダイアログで、「実行/デバッグ/プロファイル」ノードを選択します。

    3. 「実行/デバッグ/プロファイル」ダイアログの「実行構成」ペインを使用して、新しい構成を作成するか、「編集」をクリックして既存の構成を変更します。

    4. 「実行構成の編集」→「起動設定」ダイアログで、「リモート・デバッグ」を選択します。

    5. 「実行構成の編集」ダイアログの「ツール設定」ノードを開き、「デバッガ」を開いて、「リモート」を選択します。

    6. 図19-1に示す「実行構成の編集」→「リモート」ダイアログで、次の構成を行います。

      - プロトコルを「JPDAにアタッチ」に設定します。

      - ホストを次のいずれかに設定します。1) シミュレータまたはエミュレータでのデバッグの場合は、localhostに設定します。2) デバイスでのデバッグの場合は、開発コンピュータからネットワーク経由でそのデバイスにアクセスできることを確認し(pingコマンドを使用してネットワーク・アクセスをテストできます)、デバイスのIPアドレスを入力します。

      - ポートを適切なポート番号に設定します。

      - タイムアウトを2に設定します。

      図19-1 リモート・デバッグの構成

      「JPDAにアタッチ」を選択します。
  2. モバイル・デバイスまたはシミュレータにアプリケーションをデプロイします(第19.3.1項「iOSプラットフォームでのデバッグ方法」または第19.3.2項「Androidプラットフォームでのデバッグ方法」を参照)。

  3. cvm.propertiesファイルで次のデバッグ・パラメータを指定します。

    java.debug.enabled=true
    java.debug.port=4000
    

    ポート番号は、JDeveloperで設定したものと一致している必要があります。

    詳細は、第19.3.4項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照してください。

  4. アプリケーションをモバイル・デバイスまたはシミュレータに再デプロイします。

  5. アプリケーション・アイコンをクリックして、モバイル・デバイスまたはシミュレータでアプリケーションを起動します。

  6. 次のようにして、JDeveloperからデバッガを起動します。

    1. JDeveloperのメイン・メニューのデバッグ・アイコンを使用して、実行構成(手順3でこのプロジェクトに対して定義したもの)を選択します。

    2. デバッガのJPDAデバッガにアタッチダイアログを確認します。


注意:

タイムアウト(20秒)を回避するには、モバイル・デバイスまたはシミュレータ上でアプリケーションを起動したら、ただちにデバッガを起動します。


デバッグでモバイル・デバイスを使用する場合は、WiFiを介して接続する必要があります。

詳細は、次を参照してください:

19.3.1 iOSプラットフォームでのデバッグ方法

iOSプラットフォームでJDeveloperを使用してADFモバイル・アプリケーションをデバッグするには、第19.3項「ADFモバイル・アプリケーションのデバッグ」で説明されている一般的なデバッグ手順に従います。

iOSデバイスまたはシミュレータの構成方法、およびデバッグのためのADFモバイル・アプリケーションのデプロイ方法については、次を参照してください:

19.3.2 Androidプラットフォームでのデバッグ方法

AndroidプラットフォームでJDeveloperを使用してADFモバイル・アプリケーションをデバッグするには、第19.3項「ADFモバイル・アプリケーションのデバッグ」で説明されている一般的なデバッグ手順に従います。

Androidデバイスまたはエミュレータの構成方法、およびデバッグのためのADFモバイル・アプリケーションのデプロイ方法については、第17.3.1項「AndroidエミューレータへのAndroidアプリケーションのデプロイ方法」を参照してください。

USBを介して接続されたAndroidデバイス上で、またはAndroidデバイス・エミュレータ上でJavaコードをデバッグする場合、端末で次のコマンドを実行することでTCPポートをフォワードする必要があります。

  • デバイスでのデバッグの場合:

    adb -d forward tcp:<host port> tcp:<target port>

  • エミュレータでのデバッグの場合:

    adb -e forward tcp:<host port> tcp:<target port>

たとえば、adb -d forward tcp:4510 tcp:4510を実行すると、デバイスのTCPポート4510がホストのTCPポート4510にフォワードされます。実行時、cvm.propertiesファイルのデバッグ設定(第19.3.4項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照)は、次のように定義する必要があります。

java.debug.enabled=true

java.debug.port=4510


注意:

接続がWi-Fiを介して行われる場合は、この接続が正しいことを確認してください。デバッガとターゲットの両方を、仮想プライベート・ネットワーク(VPN)を使用せずに、同じネットワーク上に配置することをお薦めします。


19.3.3 ADFモバイルAMXコンテンツのデバッグ方法

ADFモバイル・アプリケーションにADFモバイルAMXコンテンツが含まれている場合は、デバイスまたはエミュレータの構成後、WebベースのADF Facesアプリケーションをデバッグするときと同じように、ブレークポイントの設定、変数の内容の表示およびメソッド・コール・スタックのインスペクトを行うことができます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のADFコンポーネントのテストとデバッグに関する項を参照してください。


注意:

デバッグできるのは、JavaコードおよびJavaScriptのみです(第19.3.4項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照)。EL式または他の宣言要素のデバッグはサポートされていません。


19.3.4 JavaコードおよびJavaScriptのデバッグを有効にする方法

cvm.propertiesファイルでは、JVMの起動パラメータおよびADFモバイルのWebビューを指定して、JavaコードおよびJavaScriptのデバッグを有効にできます。cvm.propertiesファイルは自動的に作成され、「アプリケーション・リソース」のDescriptors/META-INFディレクトリ内に配置されます(第19.4項「ロギングの使用方法と構成」を参照)。この場所は、アプリケーション・ファイル・システム内の<application_name>/src/META-INFの場所に対応しています。

cvm.propertiesファイルで次のデバッグ・プロパティを使用できます。

  • java.debug.enabled: ADFモバイルでのJavaのデバッグを有効または無効にします。有効な値は、truefalseです。


    注意:

    java.debug.enabledtrueに設定されている場合、JVMは、デバッガが接続を確立するのを待ちます。デバッガが接続に失敗すると、ADFモバイルAMXアプリケーション機能のロードが失敗します。


  • java.debug.port: デバッグ時に使用するポートを指定します。有効値は整数です。

  • javascript.debug.enabled: アプリケーションがデバイス・シミュレータで実行されている場合、JavaScriptのデバッグを有効または無効にします。有効な値は、truefalseです。

  • javascript.debug.feature: ADFモバイルでのJavaScriptのデバッグの有効化をトリガーするアプリケーション機能を指定します。この値の形式はfeatureId:portです。ポートを指定する必要があります(これは当初、プレースホルダ値に設定されています)。

cvm.propertiesファイルの内容は、次のようなものです。

java.debug.enabled=true
java.debug.port=8000
javascript.debug.enabled=true
javascript.debug.feature=products:8888

cvm.propertiesファイルがJavaScriptをデバッグするように構成されたら、次のURLに異動して、ADFモバイルでデバッグ可能なすべてのロード済ページのリストを確認できます。

http://localhost:9999


注意:

iOSデバイス・シミュレータの複数のインスタンスによって共有されているコンピュータ上でJavaScriptをデバッグすると、問題が発生することがあります。iOSデバイス・シミュレータの複数のインスタンスが実行されている場合、特定のインスタンスに接続することはできない可能性があるため、デバッグ・ページを表示できません。


JDeveloperを使用してJavaコードをデバッグする方法については、第19.3項「ADFモバイル・アプリケーションのデバッグ」を参照してください。

19.3.4.1 iOS 6プラットフォーム上でのiOSデバイス・シミュレータを使用したJavaScriptのデバッグに関する必知事項

iOS 6プラットフォームで作業している場合、Safari 6ブラウザを使用してJavaScriptをデバッグできます。これを行うには、Safariのプリファレンスを開き、「Advanced」を選択した後、「Show Develop menu in menu bar」を選択して、ブラウザ内の「Develop」メニューを有効にします(図19-2を参照)。

図19-2 Safariブラウザ・オプションの有効化

Safariブラウザ・オプションの有効化

「Develop」メニューが有効になったら、「iPhone Simulator」または「iPad Simulator」を選択し(図19-3および図19-4を参照)、デバッグするUIWebViewを選択します。「Develop」メニューにiPhone Simulatorオプションが表示されるか、iPad Simulatorオプションが表示されるかは、どちらのデバイス・シミュレータが起動しているかによって決まります。

図19-3 Safariブラウザの「Develop」メニューを使用したiPhone Simulator上でのデバッグ

Safariブラウザの「Develop」メニューの使用

図19-4 Safariブラウザの「Develop」メニューを使用したiPad Simulator上でのデバッグ

Safariブラウザの「Develop」メニューの使用

19.3.5 デバッグ・モードの構成方法

アプリケーションのデプロイメント・プロファイルを使用して、ADFモバイル・アプリケーションの実行モードをリリースまたはデバッグのいずれかに指定します。デバッグ・モードでは、コンパイル時に特殊なデバッグ・ライブラリおよびシンボルを含めることが可能です。

図19-5は、Android上のデバッグ・モード・オプションの設定方法を示しています。

図19-5 Android用のデバッグ・モードの設定

Android用のデバッグ・モードの設定

図19-6は、iOS上のデバッグ・モード・オプションの設定方法を示しています。

図19-6 iOS用のデバッグ・モードの設定

iOS用のデバッグ・モードの設定

アプリケーションをデバッグ・モードでデプロイする場合、デプロイメント・プロセスが終了する直前に、次のログ・メッセージがJDeveloperに出力されます。

このADFモバイル・アプリケーションはデバッグ・モードでデプロイされたため、パフォーマンスの評価には使用しないでください。パフォーマンスをテストする場合は、「ビルド・モード」オプションを「リリース」に設定します。

図19-7 デプロイメントに関するログ・メッセージ

デプロイメントに関するログ・メッセージ

詳細は、次を参照してください:

19.4 ロギングの使用方法と構成

サポートされるすべてのプラットフォームでADFモバイル・アプリケーションのロギングを有効にするには、JavaScript (第19.4.2項「JavaScriptのロギングの使用方法」を参照)および埋込みコード(第19.4.3項「埋込みロギングの使用方法」)で、単一ファイルへのログ出力を含む単一構成を使用します。このログ出力には、System.out.printlnおよびSystem.err.println文によって生成された出力が含まれます。

デフォルトのADFモバイルのロギング・プロセスは、次のとおりです。

ADFモバイルのログ出力は、次のとおりoracle.adfmf.util.Utilityクラスで宣言されます。

public static final String APP_LOGNAME = "oracle.adfmf.application";
public static final Logger ApplicationLogger = Logger.getLogger(APP_LOGNAME);

public static final String FRAMEWORK_LOGNAME = "oracle.adfmf.framework";
public static final Logger FrameworkLogger = Logger.getLogger(FRAMEWORK_LOGNAME);

ADFモバイル・アプリケーションで使用するログ出力は、ApplicationLoggerです。

oracle.adfmf.util.logging.Traceクラスのメソッドを使用することもできます。

詳細は、Oracle Fusion Middleware Oracle ADFモバイルJava APIリファレンスを参照してください。

19.4.1 プロパティ・ファイルを使用したロギングの構成方法

例19-1は、ロギングの構成で使用するlogging.propertiesファイルを示しています。

例19-1 logging.propertiesファイル

# default - all loggers to use the ConsoleHandler
.handlers=com.sun.util.logging.ConsoleHandler
# default - all loggers to use the SimpleFormatter
.formatter=com.sun.util.logging.SimpleFormatter

oracle.adfmf.util.logging.ConsoleHandler.formatter=
             oracle.adfmf.util.logging.PatternFormatter
oracle.adfmf.util.logging.PatternFormatter.pattern=
             [%LEVEL%-%LOGGER%-%CLASS%-%METHOD%]%MESSAGE%

#configure the framework logger to only use the adfmf ConsoleHandler
oracle.adfmf.framework.useParentHandlers=false
oracle.adfmf.framework.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.framework.level=SEVERE

#configure the application logger to only use the adfmf ConsoleHandler
oracle.adfmf.application.useParentHandlers=false
oracle.adfmf.application.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.application.level=SEVERE

oracle.adfmf.util.logging.ConsoleHandlerは、カスタム・フォーマッタの受信者としての役割を果たします。

oracle.adfmf.util.logging.PatternFormatterでは、ログ・メッセージの出力を可能にする、次の高度なフォーマット・トークンが許可されています。

  • %LEVEL%: ロギング・レベル。

  • %LOGGER%: 出力が書き込まれるログ出力の名前。

  • %CLASS%: ログに記録されるクラス。

  • %METHOD%: ログに記録されるメソッド。

  • %TIME%: ロギング・メッセージが送信された時間。

  • %MESSAGE%: 実際のメッセージ。

使用可能なロギング・レベルは、次のとおりです。

  • SEVERE: 重大な障害を示すメッセージ・レベルです。

  • WARNING: 潜在的な問題を示すメッセージ・レベルです。

  • INFO: 情報メッセージのメッセージ・レベルです。

  • FINE: トレース情報を提供するメッセージ・レベルです。

  • FINER: このレベルは、かなり詳細なトレース・メッセージを示します。

  • FINEST: このレベルは、非常に詳細なトレース・メッセージを示します。


注意:

ロギング・レベルの詳細度を選択するときは、SEVEREWARNINGおよびINFOレベルで出力の詳細度を上げると、アプリケーションのパフォーマンスに悪影響を及ぼすことに留意してください。


logging.propertiesファイルで定義されているログ出力は、oracle.adfmf.util.Utilityクラスから取得されるログ出力と一致します(第19.4項「ロギングの使用方法と構成」を参照)。ロギング・レベルも一致します。INFOよりも詳細なロギング・レベルを使用する場合は、ConsoleHandlerのロギング・レベルを、例19-2に示されているものと同じレベルに変更する必要があります。

例19-2 非常に詳細なロギング・レベルの設定

oracle.adfmf.util.logging.ConsoleHandler.formatter=
             oracle.adfmf.util.logging.PatternFormatter
oracle.adfmf.util.logging.ConsoleHandler.level=FINEST
oracle.adfmf.util.logging.PatternFormatter.pattern=
             [%LEVEL%-%LOGGER%-%CLASS%-%METHOD%]%MESSAGE%

19.4.2 JavaScriptのロギングの使用方法

JavaScriptは、console.log or.error/.warn/.infoに出力を書き込みます。この出力は、System.outユーティリティによってファイルにリダイレクトされます。

メッセージを指定することで、ログの出力をカスタマイズできます。次のJavaScriptコードでは、"Message from JavaScript"出力が生成されます。

<script type="text/javascript" charset="utf-8">
   function test_function() { console.log("Message from JavaScript"); }
</script>

ロギング・ファイルに定義されているプロパティを利用するには、adf.mf.logパッケージ、およびそれによって提供されるApplicationログ出力を使用する必要があります。

使用可能なロギング・レベルは、次のとおりです。

  • adf.mf.log.level.SEVERE

  • adf.mf.log.level.WARNING

  • adf.mf.log.level.INFO

  • adf.mf.log.level.CONFIG

  • adf.mf.log.level.FINE

  • adf.mf.log.level.FINER

  • adf.mf.log.level.FINEST

ロギングをトリガーするには、adf.mf.log.Applicationログ出力のlogpメソッドを使用し、そのメソッドのパラメータで次のものを指定します。

  • ロギング・レベル

  • 文字列としての現在のクラス名

  • 文字列としての現在のメソッド

  • 文字列としてのメッセージ文字列

例19-3は、ADFモバイル・アプリケーションでのlogpメソッドの使用方法を示しています。

例19-3 ロギング・メソッドの使用方法

adf.mf.log.Application.logp(adf.mf.log.level.WARNING,
                            "myClass",
                            "myMethod",
                            "My Message");

logpメソッドを実行すると、次の出力が生成されます。

[WARNING - oracle.adfmf.application - myClass - myMethod] My Message

19.4.3 埋込みロギングの使用方法

埋込みロギングでは、例19-4に示されているとおり、com.sun.util.logging.Loggerを使用します。

例19-4 埋込みロギングの使用方法

import com.sun.util.logging.Level;
import com.sun.util.logging.Logger;
import oracle.adfmf.util.logging.*;
...
   Utility.ApplicationLogger.logp(Level.WARNING, 
                                  EmbeddedClass.class.getName(),
                                  "onTestMessage",
                                  "embedded warning message 1");
   Logger.getLogger(Utility.APPLICATION_LOGNAME).logp(Level.WARNING,
                                                 this.getClass().getName(),
                                                 "onTestMessage",
                                                 "embedded warning message 2");
   Logger.getLogger("oracle.adfmf.application").logp(Level.WARNING,
                                                this.getClass().getName(),
                                                "onTestMessage",
                                                "embedded warning message 3");

このコードによって生成される出力は、次のとおりです。

[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 1
[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 2
[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 3

19.4.4 iOSプラットフォームでのデバッグおよびロギングにXcodeを使用する方法

ADFモバイル・プロジェクトの操作にXcodeを使用することは、JDeveloperを使用した次回のデプロイメント中に一部またはすべての変更を失う可能性があるため推奨されませんが、例外的な状況ではこれを使用できます。

始める前に:

アプリケーションをJDeveloperからiOSシミュレータにデプロイします。

生成されたプロジェクトを直接Xcodeで開く手順は次のとおりです。

  1. workspace_directory\deploy\デプロイメント・プロファイル名\temporary_xcode_project\に移動します。

  2. Oracle_ADFmc_Container_Template.xcodeprojというXcodeプロジェクトを開きます。

開発用コンピュータでMac OS 10.8.nを実行し、Xcodeを使用してADFモバイル・アプリケーションをデバッグしている場合、IDE内(JDeveloperコンソールまたはXcodeコンソール上)にはJavaを表示できません。この出力は、ファイルにリダイレクトされます(第19.4項「ロギングの使用方法と構成」を参照)。アプリケーションのスキーマに次の引数を追加すると、この動作を無効にし、iOSデバイスまたはそのシミュレータ上でデバッグを実行するときに、XcodeからJava、JavaScriptおよびObjective-Cのログ出力にリアルタイムでアクセスできるようになります。

-consoleRedirect=FALSE