Oracle® Fusion Middleware Oracle Application Development Frameworkモバイル開発者ガイド 11g リリース2 (11.1.2.4.0) B70750-02 |
|
前 |
次 |
この章では、iOSとAndroidの両方のプラットフォーム用に開発されたADFモバイル・アプリケーションのテストとデバッグを行う方法について説明します。
この章には次の項が含まれます:
ADFモバイル・アプリケーションのテストとデバッグを開始する前に、そのアプリケーションを次のいずれかにデプロイする必要があります。
iOSデバイス
iOSデバイス・シミュレータ
Androidデバイス
Androidデバイス・エミュレータ
ADFモバイル・アプリケーションは、デプロイしないと実行できません。詳細は、第17章「ADFモバイル・アプリケーションのデプロイ」を参照してください。
ADFモバイル・アプリケーションのテストとデバッグを行うには、通常、次の手順を実行します。
スプラッシュ画面、アプリケーション機能のナビゲーション、認証、プリファレンスなど、アプリケーションのインフラストラクチャをテストして、うたわれているすべてのアプリケーション機能が使用可能であることを確認します。
アプリケーションにADFモバイルAMXコンテンツが含まれている場合は、このアプリケーション機能のロジック、ページ・フロー、データ・コントロールおよびUIコンポーネントをテストします。
必要に応じてアプリケーションに変更を加えます。
モバイル・デバイスを再接続するか、シミュレータを再起動し、さらなるテストおよびデバッグのためにアプリケーションをデプロイして実行します。
詳細は、次を参照してください:
ADFモバイル・アプリケーションをテストするには、次の2つの方法があります。
モバイル・デバイス上でのテスト: この方法では常に、最も正確な動作が提供されます。アプリケーションのパフォーマンスを測定する場合も、この方法をとる必要があります。ただし、テスト実行者がテスト対象のすべてのデバイスを入手できるとはかぎらないため、デバイスのテストは確実なものとは言えません。
モバイル・デバイス・エミュレータまたはシミュレータ上でのテスト: この方法は通常、よりよいパフォーマンスとより高速なデプロイを提供し、便利です。ただし、デバイスのエミュレータまたはシミュレータは、対応する物理デバイスに近似したものであるとは言え、動作の相違やエミュレートできる機能の制限が存在する場合があります。
通常、両方の方法を組み合せて使用することで、最良の結果が得られます。
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」を参照してください。
JDeveloperには、Javaプログラムをデバッグ・モードで実行し、標準のブレークポイントを使用してOracle ADFアプリケーションの実行を監視および制御することを可能にするデバッグ・メカニズムが備わっています。詳細は、『Oracle Fusion Middleware Oracle JDeveloperユーザーズ・ガイド』のアプリケーションのデバッグに関する項を参照してください。
ADFモバイル・アプリケーションはJDeveloper内部で実行できないため、デバッグの方法が異なります。JDeveloperデバッガを使用して、モバイル・デバイスまたはシミュレータ上のJava仮想マシン(JVM) 1.4インスタンスに接続し、デプロイ済のADFモバイル・アプリケーションのJavaの部分を制御します。
JDeveloperを使用してADFモバイル・アプリケーション内のJavaコードをデバッグするために実行する必要のある手順は、次のとおりです。
リモート・デバッグ用のプロジェクト・プロパティを構成します。この手順では、次のようにADFモデルのデバッグ構成を作成します。
JDeveloperのメイン・メニューで、「アプリケーション」→「プロジェクト・プロパティ」をクリックして、「プロジェクト・プロパティ」ダイアログを開きます。
「プロジェクト・プロパティ」ダイアログで、「実行/デバッグ/プロファイル」ノードを選択します。
「実行/デバッグ/プロファイル」ダイアログの「実行構成」ペインを使用して、新しい構成を作成するか、「編集」をクリックして既存の構成を変更します。
「実行構成の編集」→「起動設定」ダイアログで、「リモート・デバッグ」を選択します。
「実行構成の編集」ダイアログの「ツール設定」ノードを開き、「デバッガ」を開いて、「リモート」を選択します。
図19-1に示す「実行構成の編集」→「リモート」ダイアログで、次の構成を行います。
- プロトコルを「JPDAにアタッチ」に設定します。
- ホストを次のいずれかに設定します。1) シミュレータまたはエミュレータでのデバッグの場合は、localhostに設定します。2) デバイスでのデバッグの場合は、開発コンピュータからネットワーク経由でそのデバイスにアクセスできることを確認し(ping
コマンドを使用してネットワーク・アクセスをテストできます)、デバイスのIPアドレスを入力します。
- ポートを適切なポート番号に設定します。
- タイムアウトを2に設定します。
モバイル・デバイスまたはシミュレータにアプリケーションをデプロイします(第19.3.1項「iOSプラットフォームでのデバッグ方法」または第19.3.2項「Androidプラットフォームでのデバッグ方法」を参照)。
cvm.properties
ファイルで次のデバッグ・パラメータを指定します。
java.debug.enabled=true java.debug.port=4000
ポート番号は、JDeveloperで設定したものと一致している必要があります。
詳細は、第19.3.4項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照してください。
アプリケーションをモバイル・デバイスまたはシミュレータに再デプロイします。
アプリケーション・アイコンをクリックして、モバイル・デバイスまたはシミュレータでアプリケーションを起動します。
次のようにして、JDeveloperからデバッガを起動します。
JDeveloperのメイン・メニューのデバッグ・アイコンを使用して、実行構成(手順3でこのプロジェクトに対して定義したもの)を選択します。
デバッガのJPDAデバッガにアタッチダイアログを確認します。
注意: タイムアウト(20秒)を回避するには、モバイル・デバイスまたはシミュレータ上でアプリケーションを起動したら、ただちにデバッガを起動します。 |
デバッグでモバイル・デバイスを使用する場合は、WiFiを介して接続する必要があります。
詳細は、次を参照してください:
『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のADFコンポーネントのテストとデバッグに関する項
iOSプラットフォームでJDeveloperを使用してADFモバイル・アプリケーションをデバッグするには、第19.3項「ADFモバイル・アプリケーションのデバッグ」で説明されている一般的なデバッグ手順に従います。
iOSデバイスまたはシミュレータの構成方法、およびデバッグのためのADFモバイル・アプリケーションのデプロイ方法については、次を参照してください:
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)を使用せずに、同じネットワーク上に配置することをお薦めします。 |
ADFモバイル・アプリケーションにADFモバイルAMXコンテンツが含まれている場合は、デバイスまたはエミュレータの構成後、WebベースのADF Facesアプリケーションをデバッグするときと同じように、ブレークポイントの設定、変数の内容の表示およびメソッド・コール・スタックのインスペクトを行うことができます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のADFコンポーネントのテストとデバッグに関する項を参照してください。
注意: デバッグできるのは、JavaコードおよびJavaScriptのみです(第19.3.4項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照)。EL式または他の宣言要素のデバッグはサポートされていません。 |
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のデバッグを有効または無効にします。有効な値は、true
とfalse
です。
注意:
|
java.debug.port
: デバッグ時に使用するポートを指定します。有効値は整数です。
javascript.debug.enabled
: アプリケーションがデバイス・シミュレータで実行されている場合、JavaScriptのデバッグを有効または無効にします。有効な値は、true
とfalse
です。
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モバイル・アプリケーションのデバッグ」を参照してください。
iOS 6プラットフォームで作業している場合、Safari 6ブラウザを使用してJavaScriptをデバッグできます。これを行うには、Safariのプリファレンスを開き、「Advanced」を選択した後、「Show Develop menu in menu bar」を選択して、ブラウザ内の「Develop」メニューを有効にします(図19-2を参照)。
「Develop」メニューが有効になったら、「iPhone Simulator」または「iPad Simulator」を選択し(図19-3および図19-4を参照)、デバッグするUIWebViewを選択します。「Develop」メニューにiPhone Simulatorオプションが表示されるか、iPad Simulatorオプションが表示されるかは、どちらのデバイス・シミュレータが起動しているかによって決まります。
アプリケーションのデプロイメント・プロファイルを使用して、ADFモバイル・アプリケーションの実行モードをリリースまたはデバッグのいずれかに指定します。デバッグ・モードでは、コンパイル時に特殊なデバッグ・ライブラリおよびシンボルを含めることが可能です。
図19-5は、Android上のデバッグ・モード・オプションの設定方法を示しています。
図19-6は、iOS上のデバッグ・モード・オプションの設定方法を示しています。
アプリケーションをデバッグ・モードでデプロイする場合、デプロイメント・プロセスが終了する直前に、次のログ・メッセージがJDeveloperに出力されます。
このADFモバイル・アプリケーションはデバッグ・モードでデプロイされたため、パフォーマンスの評価には使用しないでください。パフォーマンスをテストする場合は、「ビルド・モード」オプションを「リリース」に設定します。
詳細は、次を参照してください:
サポートされるすべてのプラットフォームでADFモバイル・アプリケーションのロギングを有効にするには、JavaScript (第19.4.2項「JavaScriptのロギングの使用方法」を参照)および埋込みコード(第19.4.3項「埋込みロギングの使用方法」)で、単一ファイルへのログ出力を含む単一構成を使用します。このログ出力には、System.out.println
およびSystem.err.println
文によって生成された出力が含まれます。
デフォルトのADFモバイルのロギング・プロセスは、次のとおりです。
アプリケーションの起動時、ロギングが開始されます。
アプリケーションの以前の実行で生成された既存のログ・ファイルが削除され、現在の実行の内容のみが使用可能になります。
アプリケーションをiOSデバイス・シミュレータ上で実行している場合、すべてのログ出力は通常、開発用コンピュータのApplication/Utilities
ディレクトリを通じてアクセスできるコンソールに送信されます。ただし、開発用コンピュータでMac OS 10.8.nを実行している場合、Javaロギング出力へのアクセスに使用できるファイルは、出力のリダイレクションに伴って生成された直後に、その名前と場所が通知されるファイルのみです。
iOSデバイス上でアプリケーションを実行している場合、コンソール出力は、アプリケーションのDocuments/logs
ディレクトリにあるapplication.log
ファイルにリダイレクトされます。
Androidでは、出力は、アプリケーションと同じ名前のテキスト・ファイルにフォワードされます。出力ファイルの場所は/sdcard
です。この場所が存在していないか、読取り専用として構成されている場合、ログ出力は、アプリケーションの書込み可能データ・ディレクトリに再ルーティングされます。
logging.properties
ファイルは自動的に作成され、「アプリケーション・リソース」のDescriptors/META-INF
ディレクトリ内に配置されます(第19.4項「ロギングの使用方法と構成」を参照)。この場所は、アプリケーション・ファイル・システム内の<application_name>
/src/META-INF
の場所に対応しています。このファイルでは、すべてのログ出力でcom.sun.util.logging.ConsoleHandler
およびSimpleFormatter
を使用することが定義され、ログ・レベルがSEVERE
に設定されます。このファイルを編集して、別のロギング動作を指定できます(第19.4.1項「プロパティ・ファイルを使用したロギングの構成方法」を参照)。
注意: 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-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
: このレベルは、非常に詳細なトレース・メッセージを示します。
注意: ロギング・レベルの詳細度を選択するときは、 |
logging.properties
ファイルで定義されているログ出力は、oracle.adfmf.util.Utility
クラスから取得されるログ出力と一致します(第19.4項「ロギングの使用方法と構成」を参照)。ロギング・レベルも一致します。INFO
よりも詳細なロギング・レベルを使用する場合は、ConsoleHandler
のロギング・レベルを、例19-2に示されているものと同じレベルに変更する必要があります。
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に示されているとおり、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
ADFモバイル・プロジェクトの操作にXcodeを使用することは、JDeveloperを使用した次回のデプロイメント中に一部またはすべての変更を失う可能性があるため推奨されませんが、例外的な状況ではこれを使用できます。
始める前に:
アプリケーションをJDeveloperからiOSシミュレータにデプロイします。
生成されたプロジェクトを直接Xcodeで開く手順は次のとおりです。
workspace_directory
\deploy\
デプロイメント・プロファイル名
\temporary_xcode_project\
に移動します。
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