(57)【特許請求の範囲】
【請求項１】
モバイル装置アプリのライフサイクルを変更する方法であって、
コンピュータが、コンピュータソフトウェアアプリケーションに対応するアプリケーションマニフェストファイルおよびバイトコードファイルを提供するステップと、
前記コンピュータが、アプリケーションクラスのオリジナルメソッドの名前を前記バイトコードファイル内の改名メソッドの名前に変更するステップと、
前記オリジナルメソッドの名前を有し、前記改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたラッパーメソッドを、前記コンピュータが、前記バイトコードファイル内の前記アプリケーションクラスに挿入するステップと、
前記コンピュータが、オリジナルコンテンツプロバイダクラスの名前を、前記アプリケーションマニフェストファイル内の変更されたコンテンツプロバイダクラスの名前に変更するステップと、
前記変更されたコンテンツプロバイダクラスの名前を有し、前記オリジナルコンテンツプロバイダクラスのメソッドを呼び出すためのコールを転送する前に、前記オリジナルコンテンツプロバイダクラスがインスタンス化されたか否かをチェックするように構成されたラッパーコンテンツプロバイダクラスを、前記コンピュータが、前記バイトコードファイル内で作成するステップとを含む、方法。
【請求項２】
前記コンピュータが、アクティビティクラスのオリジナルメソッドの名前を、前記バイトコードファイル内の前記アクティビティクラスの改名メソッドの名前に変更するステップと、
前記アクティビティクラスの前記オリジナルメソッドの名前を有し、前記アクティビティクラスの前記改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたダミーメソッドを、前記コンピュータが、前記バイトコードファイル内の前記アクティビティクラスに挿入するステップとをさらに含む、請求項１に記載の方法。
【請求項３】
前記アプリケーションマニフェストファイル内のすべてのコンテンツプロバイダクラスの名前は、変更される、請求項１または２に記載の方法。
【請求項４】
前記方法は、前記コンピュータが、前記ラッパーメソッドによってポリシーを読み取るステップをさらに含み、
前記認証または暗号化メソッドを呼び出すためのコールは、前記ポリシーに準拠する、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記ポリシーは、情報技術（ＩＴ）部署から、前記モバイル装置アプリをインストールしたモバイル装置に送信される、請求項４に記載の方法。
【請求項６】
前記ラッパーメソッドは、モバイル装置マネージャアプリケーションを呼び出すためのコールを含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記オリジナルメソッドは、静的ブロック初期化を含む、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
前記オリジナルメソッドは、コンストラクタを含む、請求項１〜７のいずれかに記載の方法。
【請求項９】
前記バイトコードファイル内のアプリケーション静的初期化メソッド、アプリケーションコンストラクタメソッド、アプリケーションattachBaseContext()メソッド、コンテンツプロバイダ静的初期化メソッド、コンテンツプロバイダコンストラクタメソッド、コンテンツプロバイダonCreate()メソッド、アプリケーションonCreate()メソッド、ランチャアクティビティ静的初期化メソッド、ランチャアクティビティコンストラクターメソッド、およびランチャアクティビティonCreate()メソッド、ランチャアクティビティonStart()メソッド、およびランチャアクティビティonResume()メソッドのすべての名前を、前記コンピュータが変更するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
onCreate()メソッド、onStart()メソッド、onStop()メソッド、onRestart()メソッド、onPause()メソッド、onResume()メソッド、またはonDestroy()メソッドを、前記コンピュータが、前記ラッパーコンテンツプロバイダクラスに挿入するステップをさらに含む、請求項１〜９のいずれか１項に記載の方法。
【請求項１１】
前記オリジナルメソッドの名前を変更するステップは、前記コンピュータが、前記オリジナルメソッドにプリフィックスまたはサフィックスを追加することによって、前記改名メソッドを作成するステップを含む、請求項１〜１０のいずれか１項に記載の方法。
【請求項１２】
前記アプリケーションマニフェストファイルは、ＸＭＬ（拡張マークアップ言語）コードを含む、請求項１〜１１のいずれかに記載の方法。
【請求項１３】
前記バイトコードファイルは、Google Android（登録商標）コンピュータアプリケーション用のGoogle Dalvik（登録商標）実行可能（ＤＥＸ）なバイトコードファイルである、請求項１〜１２のいずれか１項に記載の方法。
【請求項１４】
請求項１〜１３のいずれか１項に記載の方法をコンピュータに実行させるためのプログラム。
【請求項１５】
モバイル装置アプリのライフサイクルを変更するためのコンピュータシステムであって、
プロセッサと、
前記プロセッサと動作可能に結合されたメモリとを備え、
前記プロセッサは、前記メモリからの命令を実行し、
前記命令は、
コンピュータソフトウェアアプリケーションに対応するアプリケーションマニフェストファイルおよびバイトコードファイルを提供するためのプログラムコードと、
アプリケーションクラスのオリジナルメソッドの名前を前記バイトコードファイル内の改名メソッドの名前に変更するためのプログラムコードと、
前記オリジナルメソッドの名前を有し、前記改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたラッパーメソッドを、前記バイトコードファイル内の前記アプリケーションクラスに挿入するためのプログラムコードと、
オリジナルコンテンツプロバイダクラスの名前を、前記アプリケーションマニフェストファイル内の変更されたコンテンツプロバイダクラスの名前に変更するためのプログラムコードと、
前記変更されたコンテンツプロバイダクラスの名前を有し、前記オリジナルコンテンツプロバイダクラスのメソッドを呼び出すためのコールを転送する前に、前記オリジナルコンテンツプロバイダクラスがインスタンス化されたか否かをチェックするように構成されたラッパーコンテンツプロバイダクラスを、前記バイトコードファイル内で作成するためのプログラムコードとを含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１４年９月２４日に出願された米国仮特許出願第６２／０５４８５３号の優先権を主張し、２０１５年１月１２日に出願された米国特許出願第１４／５９４３７７号の継続出願であって、その優先権を主張するものであり、両方の出願の全体があらゆる目的で参照により本明細書に援用される。
【０００２】
本願は、２０１３年３月１５日に出願された米国特許出願第１３／８４１４９８号および２０１４年３月１４日に出願された米国特許出願第１４／２１３２４４号に関連するが、それらの優先権を主張しないものであり、両方の出願の全体があらゆる目的で参照により本明細書に援用される。
【０００３】
背景
１．分野
本願は、一般的にデータ処理に関する。具体的には、本願は、認証、承認、監査、シングルサインオン、セキュリティポリシーの実施、キーの管理および配布、秘密通信、秘密データ保存、秘密データ共有などを含むセキュリティサービスを、モバイル装置および他の装置上のソフトウェアアプリケーションに提供するためのシステム、方法および機械可読媒体に関する。
【背景技術】
【０００４】
２．関連技術の考察
モバイル装置上の企業リソースに便利にアクセスすることは、繰り返して生じる課題である。モバイル装置管理（ＭＤＭ）ソリューションをモバイル装置にインストールすると、モバイル装置上の殆どすべてのデータは、企業データになる。この方法は、モバイル装置のユーザがこのモバイル装置を企業以外の目的で使用したい場合に、最適ではない。
【０００５】
しばしば「アプリ」として呼ばれるアプリケーションは、頻繁に更新され、修訂される。電子メールアプリケーションの場合、数カ月ごとに更新パッチを適用することは、珍しいことではない。モバイル装置およびその他のコンピューティング装置が多くのアプリを有し、各々のアプリが頻繁に更新される。コンピューティング装置の安全性が一般的に最も弱いリンクと同様であるため、ハッカーからモバイル装置を守ることは、困難である。１つのアプリケーションにセキュリティ異常があった場合、装置上のすべてのデータが侵害される可能性がある。
【０００６】
これらのセキュリティ上の脆弱性があるため、多くの企業は、従業員自身の装置を用いて、企業ネットワークに対するアクセス（一般的にＢＹＯＤ（bring-your-own-device）と呼ばれるアクセス）を許可しない。企業がＢＹＯＤアクセスを許可しないため、従業員は、上記のユーザ装置上のすべてのものをロックするＭＤＭソリューションに同意せざる得ない。代替案として、雇用者は、企業アクセス用の電子装置を従業員に提供することである。しかしながら、この代替案は、コストがかかり、インフラストラクチャを更新する必要がある。
【０００７】
より良いセキュリティおよび柔軟性で、アプリをモバイル装置に統合する必要がある。
【発明の概要】
【課題を解決するための手段】
【０００８】
簡単な概要
一般的に、モバイルアプリケーションをコンピューティング装置にインストールする前に、そのモバイルアプリケーションを自動的に「コンテナ化」することによって、すべてのアプリケーションのネットワークコールおよび入出力（Ｉ／Ｏ）コールを行う前に、先に必要なユーザ認証、トークン選択および／または暗号化を行うシステム、装置および方法が記載される。コンストラクタまたはネットワークまたはＩ／Ｏコールを行う際に、ネイティブアプリケーションによってコードを実行する前に、セキュリティコードが実行される。
【０００９】
「コンテナ化」アプリケーションは、変更されていないネイティブアプリケーションを入力として使用して、変更されたコンテナ化アプリケーションを出力する。具体的には、Google Android（登録商標）コンピュータアプリケーション用のApplicationManifest.XMLファイルおよびGoogle Dalvik（登録商標）実行可能（ＤＥＸ）なバイトコードファイルは、Google Android（登録商標）アプリケーションパッケージ（ＡＰＫ）ファイルから抽出される。アプリケーション、コンテンツプロバイダおよびアクティビティのために、ラッパークラスおよびダミーライフサイクルメソッドが作成される。その目的は、ダミーライフサイクルを作成することによって、認証が完了するまで、オリジナルコードが実行されないようにすることである。認証が正常に完了すると、実際のアプリケーションコードを実行する前に、ポリシーを取得し、適用する。
【００１０】
モバイル装置アプリのライフサイクルを変更することができる。方法としては、ＡＰＫファイルを復号化し、そこからAndroidマニフェストファイルおよびＤＥＸファイルを抽出する。マニフェストファイルから、アプリケーションクラスの名前を読み取り、アプリケーションクラスのバイトコードを解析し、メソッドCLINIT（静的初期化子）、INIT（コンストラクタ）、attachBaseContext、およびonCreate（アプリケーションライフサイクルメソッド）の名前を変更し、CLINIT、INIT、attachBaseContextおよびonCreateなどのオリジナルの名前を有する空白ダミーメソッドを挿入する。アプリケーションクラスを処理した後、マニフェストからコンテンツプロバイダクラスの名前を取り出し、固定のサフィックスを追加することによって、（マニフェストファイル内の）名前を変更する。次に、バイトコード操作を使用することによって、コンテンツプロバイダのクラスを作成する。このコンテンツプロバイダのクラスは、変更された名前を有し、オリジナルコンテンツプロバイダに対してラッパー／代理クラスとして機能する。コンテンツプロバイダのラッパーが作成されると、マニフェストファイルからアクティビティの名前を読み取り、バイトコードパーサを使用して、CLINITメソッド、INITメソッド、およびライフサイクルメソッド（onCreate、onResume、onStart、onRestart、onPause、onStop、onDestroy、finish）の名前を変更し、それらの場所にダミーメソッドを作成する。また、ＤＥＸファイルにダミーランチャアクティビティを追加し、アプリケーション起動時に呼び出される最初のアクティビティであるランチャアクティビティ（オリジナルランチャアクティビティから、ランチャプロパティを削除した）として、その名前をマニフェストファイルに追加する。アプリケーションのライフサイクル管理が開始すると、ダミーランチャアクティビティ認証がトリガされ、ポリシーが取得される。その後、オリジナルランチャアクティビティが呼び出される。
【００１１】
ダミーメソッド／クラスを用いて、オリジナルライフサイクルメソッド／クラスを置換する目的は、認証が完了し且つポリシーが取得される前に、アプリケーションコードが実行されないようにすることである。コンテナライザ（containerizer）は、ライフサイクルを変更するだけではなく、ファイルシステムコールおよびネットワークコールをラッピングすることによって、それらのコールにセキュリティを導入することもできる。例えば、データを装置に書き込む前に、そのデータは、読み取り処理において、暗号化され復号化される。同様に、企業ネットワークにインストールされているゲートウェイを介して、すべてのネットワークコールをプロキシすることができ、適切なチャネルを用いて、すべてのネットワークトラフィックを管理し、ルーティングすることができる。ネットワーク傍受を実行するには、トラフィックがルーティングされるネットワークから認証を取ることが重要である。書き込み／読み取り処理時の暗号化／復号化と同様に、キーマネージャを初期化する必要がある。認証が完了すると、キーマネージャを初期化し、ネットワーク通信を介して認証トークンを受信することができる。名前が変更されたオリジナルライフサイクルメソッド／クラスは、同様の順番でトリガされる。場合によって、アクティビティのライフサイクル、例えばアクティビティのonCreate/onResumeに対して管理を行うときのみ、認証を呼び出すことができる。したがって、オリジナルライフサイクルは、ダミーライフサイクルに置換される。認証を行う場合、オリジナルライフサイクルは、認証後に呼び出される。
【００１２】
コンテナ化されたアプリケーションを起動する場合、まず、アプリケーションクラスを初期化しなければならない。すべての初期化／ライフサイクルメソッドの名前が変更されたため、いずれのコードも実行できない。代わりに、（コンテナライザによって導入された）ダミーメソッドが実行される。アプリケーションクラスの初期化の後、コンテンツプロバイダが初期化され、（コンテナライザによって導入された）コンテンツプロバイダのラッパークラスが初期化される。
【００１３】
アプリケーションおよびコンテンツプロバイダの初期化の後、アプリケーションライフサイクルは、認証をトリガするダミーランチャアクティビティに入る。認証が成功すると、キーマネージャおよびネットワークマネージャが初期化される。その後、オリジナルライフサイクルがトリガされる。まず、アプリケーションクラスの改名CLINIT、改名INIT、改名attachBaseContextが呼び出される。改名ライフサイクルメソッドを実行した後、アプリケーションクラスのオリジナルコンテンツプロバイダクラスが初期化され、そのonCreateが呼び出される。オリジナルコンテンツプロバイダが初期化されると、アプリケーションクラスのオリジナルonCreateが呼び出される。すべての処理が完了すると、オリジナルランチャアクティビティが呼び出され、残りのアプリケーションがそれに応じて機能する。
【００１４】
場合によって、特定のアクティビティで、アプリケーションをトリガすることができる。この場合、アプリケーションクラスおよびコンテンツプロバイダ初期化管理がダミーランチャアクティビティに入らず、呼び出されたアクティビティに直接に入る。このため、アクティビティ内の静的初期化子（CLINIT）、コンストラクタ（INIT）およびライフサイクルメソッドの名前を変更し、すべてのアクティビティ内のアクティビティライフサイクルに、ダミーメソッドを追加した。これらのダミーメソッドは、改名オリジナルライフサイクルメソッドを呼び出す前に、認証をチェックする。認証されていない場合、onCreate／onResumeダミーメソッドが認証をトリガする。認証が成功すると、アプリケーションのライフサイクルおよびコンテンツプロバイダの初期化がトリガされる。このオリジナルCLINITの後、アクティビティ内のINITおよびonCreateが呼び出され、残りのアプリケーションがそれに応じて機能する。
【００１５】
本発明のいくつかの実施形態は、モバイル装置アプリのライフサイクルを変更する方法に関する。本発明の方法は、コンピュータソフトウェアアプリケーションに対応するアプリケーションマニフェストファイルおよびバイトコードファイルを提供するステップと、アプリケーションクラスのオリジナルメソッドの名前をバイトコードファイル内の改名メソッドの名前に変更するステップと、オリジナルメソッドの名前を有し、改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたラッパーメソッドを、バイトコードファイル内のアプリケーションクラスに挿入するステップと、オリジナルコンテンツプロバイダクラスの名前を、アプリケーションマニフェストファイル内の変更されたコンテンツプロバイダクラスの名前に変更するステップと、変更されたコンテンツプロバイダクラスの名前を有し、オリジナルコンテンツプロバイダクラスのメソッドを呼び出すためのコールを転送する前に、オリジナルコンテンツプロバイダクラスがインスタンス化されたか否かをチェックするように構成されたラッパーコンテンツプロバイダクラスを、バイトコードファイル内で作成するステップとを含む。
【００１６】
本発明の方法は、アクティビティクラスのオリジナルメソッドの名前を、バイトコードファイル内のアクティビティクラスの改名メソッドの名前に変更するステップと、アクティビティクラスのオリジナルメソッドの名前を有し、アクティビティクラスの改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたダミーメソッドを、バイトコードファイル内のアクティビティクラスに挿入するステップとをさらに含む。
【００１７】
アプリケーションマニフェストファイル内のすべてのコンテンツプロバイダクラスの名前を変更することができる。本発明の方法は、ラッパーメソッドによってポリシーを読み取るステップをさらに含むことができ、認証または暗号化メソッドを呼び出すためのコールは、ポリシーに準拠する。ポリシーは、情報技術（ＩＴ）部署から、モバイル装置アプリをインストールしたモバイル装置に送信されることができる。
【００１８】
ラッパーメソッドは、モバイル装置マネージャアプリケーションを呼び出すためのコールを含むことができる。オリジナルメソッドは、静的ブロック初期化を含むことができる。オリジナルメソッドは、コンストラクタを含むことができる。本発明の方法は、バイトコードファイル内のアプリケーション静的初期化メソッド、アプリケーションコンストラクタメソッド、アプリケーションattachBaseContext()メソッド、コンテンツプロバイダ静的初期化メソッド、コンテンツプロバイダコンストラクタメソッド、コンテンツプロバイダonCreate()メソッド、アプリケーションonCreate()メソッド、ランチャアクティビティ静的初期化メソッド、ランチャアクティビティコンストラクターメソッド、およびランチャアクティビティonCreate()メソッド、ランチャアクティビティonStart()メソッド、およびランチャアクティビティonResume()メソッドのすべての名前を変更するステップをさらに含むことができる。
【００１９】
本発明の方法は、onCreate()メソッド、onStart()メソッド、onStop()メソッド、onRestart()メソッド、onPause()メソッド、onResume()メソッド、またはonDestroy()メソッドをラッパークラスに挿入するステップをさらに含むことができる。オリジナルメソッドの名前を変更するステップは、オリジナルメソッドにプリフィックスまたはサフィックスを追加することによって、改名メソッドを作成するステップを含むことができる。アプリケーションマニフェストファイルは、ＸＭＬ（拡張マークアップ言語）コードを含むことができる。バイトコードファイルは、Google Android（登録商標）コンピュータアプリケーション用のGoogle Dalvik（登録商標）実行可能（ＤＥＸ）なバイトコードファイルである。本発明の方法は、Google Android（登録商標）アプリケーションパッケージ（ＡＰＫ）ファイルから、アプリケーションマニフェストファイルおよびバイトコードファイルを抽出するステップをさらに含むことができる。
【００２０】
さらに他の実施形態は、上述した方法を実行するシステムおよび上述の方法に使用される命令を保存または記憶する機械可読有形記憶媒体に関する。
【００２１】
この概要は、特許請求される主題の重要なまたは本質的な特徴を特定することを意図しておらず、特許請求される主題の範囲を決定するために単独で使用されることも意図していない。主題は、本特許出願の明細書全体の適切な部分、任意またはすべての図面および各請求項を参照することによって、理解されるべきである。
【図面の簡単な説明】
【００２２】
【図１】一実施形態に従って、保護された企業ネットワークに接続しているモバイル装置を示す図である。
【図２Ａ】一実施形態に従って、アプリケーションマニフェストファイルの変更を示す図である。
【図２Ｂ】一実施形態に従って、アプリケーションマニフェストファイルの変更を示す図である。
【図３Ａ】一実施形態に従って、バイトコードファイル内の変更を示す図である。
【図３Ｂ】一実施形態に従って、バイトコードファイル内の変更を示す図である。
【図４】一実施形態に従って、アプリケーションライフサイクルの変更を示す図である。
【図５】一実施形態に従ったプロセスを示すフローチャートである。
【図６】一実施形態を実現するためのネットワークシステムを示す簡略図である。
【図７】本発明のさまざまな実施形態を実現することができる例示的なコンピュータシステムを示す図である。
【図８】本発明のさまざまな実施形態を実現することができるモバイル装置アプリのライフサイクルを変更するための例示的なシステムの簡略構造を示す図である。
【発明を実施するための形態】
【００２３】
詳細な説明
以下の記載において、本発明の実施形態を完全に理解するために、説明の目的で具体的な詳細が記載する。しかしながら、これらの具体的な詳細がなくても、さまざまな実施形態を実施できることは、明らかであろう。図面および説明は、限定的な意図をしていない。
【００２４】
いくつかの図示されたシステムは、さまざまな構成において提供されてもよい。いくつかの実施形態において、システムは、当該システムの１つ以上のコンポーネントがクラウドコンピューティングシステム内の１つ以上のネットワークに分散される分散システムとして構成されてもよい。
【００２５】
本発明の態様は、Google Android（登録商標）オペレーティングシステム（OS）に基づく装置上で、安全なコンテナ化を実行する方法に関する。Androidプラットフォーム上でコンテナ化という目標の達成について説明する。Androidアプリケーションのライフサイクルを中断し、導入を実行することによって、目標を達成する手順を説明する。
【００２６】
コンテナ化は、モバイルアプリを保護するための新規な手法である。安全なワークスペースを形成し、他のアプリをそのワークスペースに統合することによって、これらのアプリは、ワークスペースと共に、コンテナ化環境を有するエコシステムを共有することができる。
【００２７】
従来の業界ソリューションは、単にモバイル装置上にＭＤＭをインストールする。これによって、装置は、事実上企業の財産になる。個人アプリでさえ、企業ポリシーに左右される。
【００２８】
本明細書に記載されたモバイルワークスペースソリューションを用いて、個人データおよび企業データを別々に管理することができる。コンテナ化環境に動作する企業アプリおよびそのデータは、企業ポリシーに管理される。企業アプリのネットワークのアクセスおよびファイルシステムのアクセスは、コンテナ化環境に共通の方法で保護される。
【００２９】
技術上、このようなモバイルワークスペースソリューションの利点は、モバイルアプリに安全性を追加すること、ネットワークおよびファイルの安全なアクセスを提供すること、アプリの認証アクセスを提供すること、アプリに対するポリシー管理を提供すること、データ漏洩の防止を提供すること、および、装置上の個人データに触れることなく、管理コンソールからロックする／消す／消去することができる管理を装置上のコンテナ化環境に提供できることである。
【００３０】
手法
一般的に、Google Android（登録商標）アプリケーションの通常ライフサイクルは、アプリケーションクラスの初期化、静的初期化、コンストラクタの初期化、attachBaseContext()アプリケーションのライフサイクルの初期化、コンテンツプロバイダ、静的初期化、コンストラクタの初期化、onCreate()コンテンツプロバイダのライフサイクルの初期化、onCreate()アプリケーションのライフサイクルの初期化、ランチャアクティビティの初期化、静的初期化、コンストラクタの初期化、および、onCreate()、onStart()、onResume()アクティビティのライフサイクルの初期化を含む。
【００３１】
アプリケーションからのすべてのネットワークおよびＩ／Ｏコールに、セキュリティポリシーのチェックおよび／またはセキュリティチェックを事前に実行させるために、このライフサイクルを変更することができる。
【００３２】
図１は、一実施形態に従って、保護された企業ネットワークに接続しているモバイル装置を示している。システム１００において、スマートフォン１０２は、広域ネットワーク１１０を介して企業ネットワーク１２０と通信する。
【００３３】
スマートフォン１０２において、Dalvik（登録商標）仮想マシン（ＶＭ）１０６上で動作するアプリケーション１０８と外部実体との直接接続が拒否される。代わりに、キーコンストラクタのラッパーおよび初期化は、モバイルデータマネージャ（ＭＤＭ）１０４を通過するようにネットワークコールを強制する。モバイルデータマネージャ１０４は、装置の認証トークンおよび他の通信に関連するセキュリティをチェックすることができる。アプリ１０８は、事実上モバイルデータマネージャ１０４およびインターネットなどの広域ネットワーク１１０を介して、企業ネットワーク１２０と通信する。
【００３４】
企業ネットワーク１２０において、すべての着信ネットワークトラフィックおよび発信ネットワークトラフィックは、ファイアウォール１１２によってチェックおよび規制される。モバイル装置１０２から企業サーバ１１４へのコールは、企業ウェブサービス１１６の形を取ることができる。例えば、アプリ１０８は、企業サービス１１６によって提供される内部従業員記録にアクセスすることができる。
【００３５】
会社のＩＴ部署は、ポリシー１１８を発布することができる。ポリシーのコピーは、広域ネットワーク１１０を介して、モバイル装置１０２に送信される。ポリシーのコピーは、拡張可能マークアップ言語（ＸＭＬ）ファイルの形態を取ることができる。アプリ１０８内のラッパークラスは、ポリシーのコピーを照会することによって、特定のトランザクション用のセキュリティ証明書などを取得するか否か、いつ取得するかを判断することができる。
【００３６】
図２Ａおよび２Ｂは、一実施形態に従って、アプリケーションマニフェストファイルの変更を示している。図２Ａに示すように、オリジナルアプリケーションマニフェストファイル２０２は、「oracle.webcenter.content.Android.documentsprovider.WCCFilesProvider」というオリジナルクラスの名前２０４を有する。このクラスの名前で命名された要素は、オリジナル下位要素を含む。
【００３７】
図２Ｂにおいて、変更されたアプリケーションマニフェストファイル２０６のオリジナルクラスの名前２０４は、「MyC14N」というプレフィックスを有するクラス名に変更され、すなわち、「oracle.webcenter.content.Android.documentsprovider.MyC14NWCCFilesProvider」という名前に変更された。さらに、オリジナルクラスの名前と同様のクラス名で、すなわち「oracle.webcenter.content.Android.documentsprovider.WCCFilesProvider」で、新しいクラス定義２１０を追加した。新しいクラス定義の下方に、新しいサブ要素が記載される。新しいサブ要素は、オリジナルサブ要素のコピーであってもよく、オリジナルサブ要素のコピーでなくてもよい。また、一部のサブ要素を削除してもよい。
【００３８】
図３Ａおよび３Ｂは、一実施形態に従って、バイトコードファイル内の変更を示している。
【００３９】
図３Ａにおいて、オリジナルバイトコードファイル３０２は、「ContentProvider」というオリジナルクラス３０４を有する。クラス内には、オリジナルコードがある。
【００４０】
図３Ｂにおいて、変更されたバイトコードファイル３０６のオリジナルクラスの名前は、「MyC14N」というプレフィックスを有する改名クラスの名前に変更され、すなわち、「MyC14NContentProvider」という名前に変更された。そのオリジナルコードは、変わらない。
【００４１】
オリジナルクラスの名前「ContentProvider」と同様の名前で、新しいクラス３１０を追加した。この新しいクラスは、インスタンス化および初期化を行ったか否かをチェックする変数を規定する。また、onCreate()などのラッパーメソッドが作成される。onCreate()などのラッパーメソッドは、ポリシーを読み取り、このポリシーに基づいて、認証、暗号化／復号化、または他のセキュリティ機能を実行してから、オリジナルクラスのオリジナルonCreate()機能を呼び出す。
【００４２】
図４は、使用可能なアプリケーションコードの実行を中断するためのバイトコード操作／導入を示している。すべての可能なネットワークおよびファイルシステム処理に対して、既存のアプリケーションに導入されるラッパークラスを作成することができる。ラッパークラスを用いて、オリジナルクラスを置換することによって、既存のコードにおいて実際のバイトコードの変更を行うことができる。例えば、カスタムラッパークラスを用いて、FileInputStreamおよびFileOutputStreamを置換することができる。
【００４３】
アプリケーションのライフサイクルを管理することを望む場合があるため、既存のライフサイクルコードを導入／修正するバイトコード操作手法を使用することができる。
【００４４】
この手法を使用する目的の１つは、ユーザを認証することである。よって、認証後、ユーザは、アプリケーションを実行し、安全なワークスペースからセッションデータおよび暗号キーを取得することができる。したがって、ネットワークコールおよびファイルシステムコールが実際に動作する。いくつかのラッパーは、暗号キーを復号化するために、マスタ暗号キーを必要とする。暗号キーは、すべてのファイル処理において、データを暗号化／復号化するために使用される。また、ネットワークコールを行うために、Oracle（登録商標）モバイルセキュリティゲートウェイまたはその他のクラウドベースゲートウェイを介してルーティングできる任意のネットワークリソースに対するコールの真偽を確証するためのセッショントークンが必要である。
【００４５】
上記の使用例を達成するために、全体のアプリケーションライフサイクルを遅延させ、ダミーライフサイクルを導入することによって、最初にユーザを認証し、その後、マスタ暗号キーおよびセッショントークンを取得することができる。
【００４６】
以下、一実施形態に係るアプリケーションライフサイクルのステップリストをステップごとに説明する。
【００４７】
処理４０２では、アプリケーションクラスの初期化を行う。
静的初期化４０４に対して、コンテナ化ステップ４３０において、アプリケーションクラスの名前は、カスタム定義された固定のプリフィックス／サフィックスを有する名前に変更され、後で呼び出され、空のクラス初期化子に導入されることができる。
【００４８】
コンストラクタの初期化４０６に対して、コンテナ化ステップ４３２において、コンストラクタの名前は、カスタム定義された固定のプリフィックス／サフィックスを有する名前に変更され、後で呼び出され、空のクラスコンストラクタに導入されることができる。このことは、利用可能なすべてのコンストラクタに対して行うことができる。このことは、スーパークラスのすべてのコンストラクタに対して行うことができ、それぞれのsuper()呼び出しを上記のカスタム名に変更することもできる。
【００４９】
attachBaseContext()メソッド４０８の名前は、処理４３４において、カスタム定義された固定のプリフィックス／サフィックスを有する名前に変更され、後で呼び出され、空のメソッドに導入されることができる。
【００５０】
コンテンツプロバイダの初期化４１０に対して、処理４３６において、アプリケーション内に定義された各コンテンツプロバイダに、ダミーコンテンツプロバイダを導入し、関連するマニフェストＸＭＬ（拡張マークアップ言語）内の参照を変更することができる。その結果、これらのダミーコンテンツプロバイダは、オリジナルコンテンツプロバイダへの参照を含み、このダミーコンテンツプロバイダのすべてのメソッドコールは、オリジナルコンテンツプロバイダに委譲される。一般的に、コンテンツプロバイダは、インターフェイスメソッドに対して第１コールが行われるまで、通常は初期化されない。コンテンツプロバイダの初期化は、怠惰な初期化であると言ってもよい。例えば、コンテンツプロバイダがMyContentProviderである場合、マニフェストのエントリ<provider android:name="MyContentProvider">を<provider android:name="MyC14NContentProvider">に変更することができ、静的初期化４１２およびコンストラクタ初期化４１４で、MyC14NContentProviderというクラスを導入することができる。
【００５１】
【数１】
0006464256.tif 000002
【００５２】
このようにして、ダミーコンテンツプロバイダを導入し、そのインターフェイスメソッドをオリジナルクラスのオリジナルメソッドに委譲することによって、コンテンツプロバイダの初期化を遅延させる。
【００５３】
アプリケーションonCreate()初期化４１６に対して、コンテナ化装置は、以下の処理を実行することができる。
【００５４】
onCreate()メソッドの名前は、例えばライフサイクルの初期化４１８に対する処理４３８において、カスタム定義された固定のプリフィックス／サフィックスを有する名前に変更され、後で呼び出され、onCreate()メソッドのダミーメソッドに導入されることができる。このことは、すべてのスーパークラスに対して行うことができる。super.onCreate()の呼び出しは、上記の改名onCreate()メソッドに委譲するできる。
【００５５】
アクティビティライフサイクルの初期化、例えばランチャアクティビティ初期化４２０に対して、処理４４０において、ダミーアクティビティをランチャアクティビティとして導入し、オリジナルアクティビティからランチャアクションを削除することができる。ダミーアクティビティの管理権を取得すると、ワークスペースを認証のために呼び出すことができる。ワークスペースは、セッショントークンおよびマスタ暗号キーを返すことができる。キーを取得すると、名前が変更されたオリジナルメソッドを呼び出すことによって、サイクルの全体を再初期化できる。
【００５６】
オリジナルアプリケーションクラスの静的初期化４２２を呼び出すことができる。
次に、オリジナルアプリケーションクラスコンストラクタ４２４を呼び出すことができる。
【００５７】
オリジナルアプリケーションクラスattachBaseContext()を呼び出すことができる。
オリジナルコンテンツプロバイダを初期化するダミーコンテンツプロバイダ上で、Init（）を呼び出すことができる。
【００５８】
オリジナルアプリケーションクラスonCreate()を呼び出すことができる。
同様に、既存のオリジナルアクティビティのライフサイクルを導入／修正することができる。
【００５９】
処理４４２において、処理４２６のonCreate()、onRestart()、onResume()メソッドの名前を変更し、カスタム定義のライフサイクルメソッドを導入することができる。これによって、ポリシーの実装タスクを行い、その後、オリジナル改名メソッドを呼び出すことができる。例えば、onCreate()の名前をonCreate_C14N()に変更し、独自のonCreate()を導入する。
【００６０】
【数２】
0006464256.tif 000003
【００６１】
他のライフサイクルメソッド、例えばStart()、onResume()、onPause()、onStop()、onDestroy()に対して、同様の処理を行うことができる。
【００６２】
バイトコードの変更／導入と同様の手法を使用して、独自のカスタムコールを用いて、共有プリファレンスおよびstartActivity()のシステムコールを置換することができる。これによって、すべての暗号化／復号化およびポリシーチェックを実行してから、オリジナル処理を呼び出すことができる。
【００６３】
図５は、一実施形態に係るプロセス５００を示すフローチャートである。このプロセスは、コンピュータがプロセッサなどに格納された命令を実行することによって実施することができる。処理５０１において、アプリケーションマニフェストファイルおよびバイトコードファイルは、提供される。アプリケーションマニフェストファイルおよびバイトコードファイルは、コンピュータソフトウェアアプリケーションに対応する。処理５０２において、アプリケーションクラスのオリジナルメソッドの名前を、バイトコードファイル内の改名メソッドの名前に変更する。処理５０３において、ラッパーメソッドをバイトコードファイル内のアプリケーションクラスに挿入する。ラッパーメソッドは、オリジナルメソッドの名前を有し、改名メソッドを呼び出す前に認証または暗号化メソッドを呼び出すように構成される。処理５０４において、オリジナルコンテンツプロバイダクラスの名前を、アプリケーションマニフェストファイル内の変更されたコンテンツプロバイダクラスの名前に変更される。処理５０５において、バイトコードファイル内に、ラッパーコンテンツプロバイダクラスを作成する。作成されたラッパーコンテンツプロバイダクラスは、変更されたコンテンツプロバイダクラスの名前を有し、オリジナルコンテンツプロバイダクラスのメソッドを呼び出すためのコールを転送する前に、オリジナルコンテンツプロバイダクラスがインスタンス化されたか否かをチェックするように構成される。
【００６４】
処理５０６において、アクティビティクラスのオリジナルメソッドの名前を、バイトコードファイル内のアクティビティクラスの改名メソッドの名前に変更する。処理５０７において、ダミーメソッドをバイトコードファイル内のアクティビティクラスに挿入する。ダミーメソッドは、アクティビティクラスのオリジナルメソッドの名前を有し、改名メソッドを呼び出す前に認証メソッドまたは暗号化メソッドを呼び出すように構成される。
【００６５】
コンピュータシステムインフラストラクチャ
図６は、一実施形態を実現するための分散システム６００の簡略図を示している。図示の実施形態において、分散システム６００は、ネットワーク６１０に分散された１つ以上のクライアントコンピューティング装置６０２、６０４、６０６および６０８を含む。これらのクライアントコンピューティング装置は、ウェブブラウザ、専用クライアント（例えば、Oracleフォーム）などのクライアントアプリケーションを実行および動作させるように構成される。サーバ６１２は、ネットワーク６１０を介して、リモートクライアントコンピューティング装置６０２、６０４、６０６および６０８と通信可能に連結されてもよい。
【００６６】
さまざまな実施形態において、サーバ６１２は、システムの１つ以上のコンポーネントによって提供された１つ以上のサービスまたはソフトウェアアプリケーションを実行するように構成されてもよい。いくつかの実施形態において、これらのサービスは、ウェブに基づくサービスまたはクラウドサービスとして、またはＳａａＳ（Software as a Service）モデルとして、クライアントコンピューティング装置６０２、６０４、６０６および／または６０８のユーザに提供されてもよい。ユーザが操作しているクライアントコンピューティング装置６０２、６０４、６０６および／または６０８は、１つ以上のクライアントアプリケーションを利用することによって、サーバ６１２と対話し、これらのコンポーネントによって提供されたサービスを利用することができる。
【００６７】
図示の構成において、システム６００のソフトウェアコンポーネント６１８、６２０および６２２は、サーバ６１２上に実装されたものとして示されている。他の実施形態において、システム６００の１つ以上のコンポーネントおよび／またはこれらのコンポーネントによって提供されたサービスは、１つ以上のクライアントコンピューティング装置６０２、６０４、６０６および／または６０８に実装されてもよい。ユーザが操作しているクライアントコンピューティング装置は、１つ以上のクライアントアプリケーションを利用することによって、これらのコンポーネントによって提供されたサービスを使用してもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせに実装されてもよい。当然ながら、分散システム６００と異なるさまざまな異なるシステム構成が可能である。したがって、図示の実施形態は、実施形態のシステムを実施するための分散型システムの一例であり、限定を意図するものではない。
【００６８】
クライアントコンピューティング装置６０２、６０４、６０６および／または６０８は、Microsoft Windows Mobile（登録商標）などのソフトウエアおよび／またはiOS、Windows Phone（登録商標）、Android（登録商標）、BlackBerry（登録商標）１０、Palm OSなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ＳＭＳ（Short Message Service）、Blackberry（登録商標）、または他の通信プロトコルに対応する携帯型装置（例えば、iPhone（登録商標）携帯電話、iPad（登録商標）コンピューティングタブレット、ＰＤＡ（personal digital assistant））または装着型装置（例えば、Google Glass（登録商標）ヘッドマウントディスプレイ）であってもよい。一例として、クライアントコンピューティング装置は、さまざまなバージョンのMicrosoft Windows（登録商標）オペレーティングシステム、Apple Macintosh（登録商標）オペレーティングシステムおよび／またはLinux（登録商標）オペレーティングシステムを実行するパーソナルコンピュータおよび／またはラップトップコンピュータを含む汎用パーソナルコンピュータとすることができる。クライアントコンピューティング装置は、さまざまなGNU/Linuxオペレーティングシステム、例えばGoogle Chrome OSを含むがこれに限定されないさまざまな市販のUNIX（登録商標）またはUNIX系オペレーティングシステムのいずれかを実行するワークステーションコンピュータであってもよい。これに代えてまたはこれに加えて、クライアントコンピューティング装置６０２、６０４、６０６および６０８は、ネットワーク６１０を介して通信することができ、シンクライアント（thin client）コンピュータ、インターネット対応ゲームシステム（例えば、Kinect（登録商標）ジェスチャ入力装置を備えるまたは備えないMicrosoft Xbox（登録商標）ゲームコンソール）、および／またはパーソナルメッセージング装置などの任意の他の電子装置であってもよい。
【００６９】
例示的な分散システム６００は、４つのクライアントコンピューティング装置を有すると図示されているが、任意数のクライアントコンピューティング装置をサポートすることができる。他の装置、例えばセンサなどを有する装置は、サーバ６１２と対話することができる。
【００７０】
分散型システム６００内のネットワーク６１０は、当業者によく知られている任意種類のネットワークであってもよく、ＴＣＰ／ＩＰ（伝送制御プロトコル/インターネットプロトコル）、ＳＮＡ（システムネットワークアーキテクチャ）、ＩＰＸ（インターネットパケット交換）、およびAppleTalkなどを含むがこれに限定されないさまざまな市販のプロトコルのいずれかを使用して、データ通信をサポートすることができる。単なる一例として、ネットワーク６１０は、イーサネット（登録商標）、トークンリング（Token‐ring）などに基づくローカルエリアネットワーク（ＬＡＮ）であってもよい。ネットワーク６１０は、広域ネットワークおよびインターネットであってもよく、仮想ネットワークであってもよい。仮想ネットワークとしては、仮想プライベートネットワーク（ＶＰＮ）、イントラネット、エクストラネット、公衆交換電話網（ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（例えば、IEEE 802.11スイートプロトコル、Bluetooth（登録商標）および／または任意の他の無線プロトコルの下で動作するネットワーク）のうちの１つまたは複数を含むことができる。および／またはこれらのネットワークの任意の組み合わせおよび／またはこれらのネットワークと他のネットワークとの組み合わせを含むがこれらに限定されない。
【００７１】
サーバ６１２は、１つ以上の汎用コンピュータ、専用サーバコンピュータ（例えば、ＰＣ（パーソナルコンピュータ）サーバ、UNIX（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、およびラックマウントサーバを含む）、サーバファーム、サーバクラスタ、または任意の適切な他の構成および／または組み合わせを含むことができる。さまざまな実施形態において、サーバ６１２は、前述の開示に説明した１つ以上のサービスまたはソフトウェアアプリケーションを実行するように構成されてもよい。例えば、サーバ６１２は、本開示の一実施形態に従って上述した処理を実行するためのサーバに相当してもよい。
【００７２】
サーバ６１２は、上記で説明したいずれかのオペレーティングシステムを含むオペレーティングシステム、および任意の市販されているサーバオペレーティングシステムを実行することができる。また、サーバ６１２は、ＨＴＴＰ（ハイパーテキストトランスポートプロトコル）サーバ、ＦＴＰ（ファイル転送プロトコル）サーバ、ＣＧＩ（共通ゲートウェイインターフェイス）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含むさまざまな追加のサーバアプリケーションおよび／またはミッドティアアプリケーションのいずれかを実行することもできる。例示的なデータベースサーバは、Oracle（登録商標）、Microsoft（登録商標）、Sybase（登録商標）、IBM（International Business Machines、登録商標）などから市販されているものを含むが、これらに限定されない。
【００７３】
いくつかの実現例において、サーバ６１２は、クライアントコンピューティング装置６０２、６０４、６０６および６０８のユーザから受信したデータフィードおよび／またはイベントアップデートを分析および統合する１つ以上のアプリケーションを含むことができる。一例として、データフィードおよび／またはイベントアップデートは、１つ以上の第三者情報ソースおよび連続データストリームから受信され、センサデータアプリケーション、金融相場表示機、ネットワーク性能測定ツール（例えば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、および自動車交通監視装置などに関連するリアルタイムイベント、例えばTwitter（登録商標）フィード、Facebook（登録商標）アップデートまたはリアルタイムアップデートを含むがこれらに限定されない。また、サーバ６１２は、クライアントコンピューティング装置６０２、６０４、６０６および６０８の１つ以上の表示装置を介して、データフィードおよび／またはリアルタイムイベントを表示する１つ以上のアプリケーションを含むこともできる。
【００７４】
また、分散システム６００は、１つ以上のデータベース６１４および６１６を含むこともできる。データベース６１４および６１６は、さまざまな場所に配置されてもよい。一例として、データベース６１４および６１６の一方または両方は、サーバ６１２に属する（および／または常駐する）非一時的な記憶媒体上に配置されてもよい。代替的には、データベース６１４および６１６は、サーバ６１２から離れており、ネットワークに基づく接続または専用接続を介して、サーバ６１２と通信することができる。一組の実施形態において、データベース６１４および６１６は、記憶域ネットワーク（ＳＡＮ）に配置されてもよい。同様に、サーバ６１２の機能を実行するために必要なファイルは、必要に応じて、サーバ６１２上におよび／またはサーバ６１２から離れた場所に格納されてもよい。一組の実施形態において、データベース６１４および６１６は、Oracleによって提供されるデータベースなどの関係データベースを含むことができる。これらの関係データベースは、ＳＱＬフォーマットの指令に応じて、データを記憶、更新および検索するように構成される。
【００７５】
図７は、本発明のさまざまな実施形態を実現することができる例示的なコンピュータシステム７００を示している。システム７００を使用して、上述したコンピュータシステムのいずれかを実現することができる。図示のように、コンピュータシステム７００は、バスサブシステム７０２を介して、多数の周辺サブシステムと通信する処理ユニット７０４を含む。これら周辺サブシステムは、処理加速ユニット７０６、Ｉ／Ｏサブシステム７０８、記憶サブシステム７１８および通信サブシステム７２４を含む。記憶サブシステム７１８は、有形のコンピュータ可読記憶媒体７２２およびシステムメモリ７１０を含む。
【００７６】
バスサブシステム７０２は、コンピュータシステム７００のさまざまな構成要素およびサブシステムが意図したように互いに通信することを可能にする機構を形成する。バスサブシステム７０２は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施形態において複数のバスを利用することができる。バスサブシステム７０２は、さまざまなバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含むいくつかの種類のバス構造のいずれか１つであってもよい。例えば、これらのバス構造は、IEEE P1386.1規格に従って製造されたメザニンバスとして実装することができるＩＳＡ（Industry Standard Architecture、業界標準アーキテクチャ）バス、ＭＣＡ（Micro Channel Architecture、マイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（Enhanced ISA、改良ISA）バス、ＶＥＳＡ（Video Electronics Standards Association、ビデオ電子工学標準化協会）ローカルバス、またはＰＣＩ（Peripheral Component Interconnect、周辺構成要素相互接続）バスを含むことができる。
【００７７】
１つ以上の集積回路（例えば、従来のマイクロプロセッサまたはマイクロコントローラ）として実装することができる処理ユニット７０４は、コンピュータシステム７００の動作を管理する。処理ユニット７０４は、１つ以上のプロセッサを含むことができる。これらのプロセッサは、シングルコアプロセッサまたはマルチコアプロセッサを含むことができる。特定の実施形態において、処理ユニット７０４は、各々がシングルコアプロセッサまたはマルチコアプロセッサを備えた１つ以上の独立した処理ユニット７３２および／または７３４として、実装されてもよい。他の実施形態において、処理ユニット７０４は、２つのデュアルコアプロセッサを単一のチップに一体化することによって形成されたクアッドコア処理ユニットとして、実装されてもよい。
【００７８】
さまざまな実施形態において、処理ユニット７０４は、プログラムコードに応答して、さまざまなプログラムを実行することができ、複数の同時実行プログラムまたはプロセスを維持することができる。任意の所定時間において、実行されるプログラムコードの一部または全部は、プロセッサ７０４および／または記憶装置サブシステム７１８に常駐することができる。適切なプログラミングによって、プロセッサ７０４は、上記のさまざまな機能を提供することができる。コンピュータシステム７００は、デジタル信号プロセッサ（ＤＳＰ）および専用プロセッサなどを含むことができる処理加速ユニット７０６をさらに含むことができる。
【００７９】
Ｉ／Ｏサブシステム７０８は、ユーザインターフェイス入力装置と、ユーザインターフェイス出力装置とを含むことができる。ユーザインターフェイス入力装置は、キーボード、マウスまたはトラックボールなどのポインティング装置、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを備えた音声入力装置、マイクロホン、および他の種類の入力装置を含む。ユーザインターフェイス入力装置は、例えば、ユーザがジェスチャおよび音声コマンドを使用した自然なユーザインターフェイスを介して、Microsoft（登録商標）３６０ゲームコントローラなどの入力装置を制御し且つ対話することを可能にするMicrosoft Kinect（登録商標）モーションセンサのような動き検出および／またはジェスチャ認識装置を含むことができる。また、ユーザインターフェイス入力装置は、ユーザの目の活動（例えば、写真撮影および／またはメニュー選択を行う時の「瞬き」）を検出し、目の動きを入力装置（例えば、Google Glass（登録商標））の入力として変換するGoogle Glass（登録商標）瞬き検出器のような目の動き認識装置を含むことができる。さらに、ユーザインターフェイス入力装置は、ユーザが音声コマンドを介して、音声認識システム（例えば、Siri（登録商標））ナビゲータ）と対話することを可能にする音声認識検出装置を含むことができる。
【００８０】
ユーザインターフェイス入力装置には、３次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびオーディオ／ビジュアル装置、例えば、スピーカ、デジタルカメラ、デジタルビデオカメラ、ポータブルメディアプレーヤ、ウェブカメラ、画像スキャナ、指紋スキャナ、バーコードリーダ３Ｄスキャナ、３Ｄプリンタ、レーザレンジファインダ、および視線追跡装置を含むが、これらに限定されない。さらに、ユーザインターフェイス入力装置は、例えば、コンピュータ断層撮影、磁気共鳴画像撮影、陽電子放射断層撮影、医療用超音波装置などの医用画像入力装置を含むことができる。また、ユーザインターフェイス入力装置は、例えば、ＭＩＤＩキーボード、デジタル楽器などのような音声入力装置を含むこともできる。
【００８１】
ユーザインターフェイス出力装置は、ディスプレイサブシステム、インジケータライト、または音声出力装置などの非視覚ディスプレイを含むことができる。ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）またはプラズマディスプレイを使用するフラットパネル装置、投影装置、タッチスクリーンなどであってもよい。一般的に、用語「出力装置」の使用は、コンピュータシステム７００からユーザにまたは他のコンピュータに情報を出力するすべての可能な種類の装置およびメカニズムを含むことを意図している。例えば、ユーザインターフェイス出力装置は、文字情報、画像情報および音声／動画情報を視覚的に伝達し、モニタ、プリンタ、スピーカ、ヘッドホン、自動車ナビゲーションシステム、プロッタ、音声出力装置およびモデムを含むがこれらに限定されないさまざまな表示装置を含むことができる。
【００８２】
コンピュータシステム７００は、ソフトウェア要素を含む記憶サブシステム７１８を備えることができる。図示では、ソフトウェア要素は、システムメモリ７１０内に配置されている。システムメモリ７１０は、処理ユニット７０４上にロード可能かつ実行可能なプログラム命令と、これらのプログラムの実行中に生成されたデータを記憶することができる。
【００８３】
システムメモリ７１０は、コンピュータシステム７００の構成および種類に応じて、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ））および／または不揮発性メモリ（例えば、読出専用メモリ（ＲＯＭ）、フラッシュメモリなど）であってもよい。ＲＡＭは、典型的には、処理ユニット７０４によってアクセス可能でありおよび／または処理ユニット７０４によって現在処理され実行されているデータおよび／またはプログラムモジュールを含む。いくつかの実現例において、システムメモリ７１０は、複数の異なる種類のメモリ、例えば静的ランダムアクセス記憶装置（ＳＲＡＭ）または動的ランダムアクセスメモリ（ＤＲＡＭ）を含むことができる。いくつかの実現例において、例えば起動中にコンピュータシステム７００内の要素間の情報転送を支援する基本ルーチンを含む基本入出力システム（ＢＩＯＳ）が、一般的にはＲＯＭに格納されてもよい。限定ではなく一例として、システムメモリ７１０は、クライアントアプリケーション、ウェブブラウザ、ミッドティアアプリケーションおよび関係データベース管理システム（ＲＤＢＭＳ）などを含み得るアプリケーションプログラム７１２、プログラムデータ７１４、およびオペレーティングシステム７１６を含む。一例として、オペレーティングシステム７１６は、さまざまなバージョンのMicrosoft Windows（登録商標）オペレーティングシステム、Apple Macintosh（登録商標）オペレーティングシステムおよび／またはLinux（登録商標）オペレーティングシステム、（さまざまなGNU/Linuxオペレーティングシステム、例えばGoogle Chrome OSを含むがこれに限定されない）さまざまな市販のUNIX（登録商標）またはUNIX系オペレーティングシステム、および／またはiOS、Windows Phone（登録商標）、Android（登録商標）、BlackBerry（登録商標）１０、Palm OSなどのモバイルオペレーティングシステムを含むことができる。
【００８４】
また、記憶サブシステム７１８は、いくつかの実施形態の機能性を提供する基本プログラミングおよびデータ構成を記憶するための有形コンピュータ可読記憶媒体を提供してもよい。プロセッサによって実行されると、上述の機能性を提供するソフトウェア（プログラム、コードモジュールおよび命令）は、記憶サブシステム７１８に記憶されてもよい。これらのソフトウェアモジュールまたは命令は、処理ユニット７０４によって実行されてもよい。記憶サブシステム７１８は、本発明に従って使用されるデータを記憶するレポジトリを提供してもよい。
【００８５】
また、記憶サブシステム７００は、コンピュータ可読記憶媒体読み取り器７２０を含むことができる。コンピュータ可読記憶媒体読み取り器７２０は、コンピュータ可読記憶媒体７２２にさらに接続することができる。コンピュータ可読記憶媒体７２２は、選択的にシステムメモリ７１０と組み合わせて、コンピュータ読み取り可能な情報を一時的におよび／または永久的に格納、記憶、送信および検索するためのリモート記憶装置、ローカル記憶装置、固定の記憶装置および／または取り外し可能な記憶装置および記憶媒体を包括的に表すことができる。
【００８６】
コードまたはコードの一部を格納するコンピュータ可読記憶媒体７２２は、情報の記憶および／または伝送のために任意の方法または技術で実現された揮発性および不揮発性媒体、取外し可能および取外し不可能媒体に限定されない記憶媒体および通信媒体を含む当技術分野で知られているまたは使用されている任意の適切な媒体を含むことができる。媒体は、ＲＡＭ、ＲＯＭ、電子的消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置などの有形コンピュータ可読記憶媒体、または他の有形コンピュータ可読媒体を含むことができる。また、媒体は、所望の情報を送信するために使用することができ、コンピューティングシステム７００によってアクセスすることができる無形コンピュータ可読媒体、例えばデータ信号、データ伝送または任意の他の媒体を含むことができる。
【００８７】
一例として、コンピュータ可読記憶媒体７２２は、取外し不可能な不揮発性磁気媒体に対して読み書きするハードディスクドライブ、取外し可能な不揮発性磁気ディスクに対して読み書きする磁気ディスクドライブ、およびＣＤ−ＲＯＭ、ＤＶＤおよびBlu-Ray（登録商標）ディスクなどの取り外し可能な不揮発性光ディスク、または他の光媒体に対して読み書きする光ディスクドライブを含むことができる。コンピュータ可読記憶媒体７２２は、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（universal serial bus、ＵＳＢ）フラッシュドライブ、セキュアデジタル（secure digital、ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含むが、これらに限定されない。また、コンピュータ可読記憶媒体７２２は、不揮発性メモリに基づくソリッドステートドライブ（ＳＳＤ）、例えばフラッシュメモリに基づくＳＳＤ、企業フラッシュドライブおよびソリッドステートＲＯＭ、および揮発性メモリに基づくＳＳＤ、例えばソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭ、ＤＲＡＭに基づくＳＳＤ、磁気抵抗ＲＡＭ（ＭＲＡＭ）ＳＳＤ、およびＤＲＡＭとフラッシュメモリに基づくＳＳＤとの組み合わせを使用するハイブリッドＳＳＤを含むことができる。ディスクドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータシステム７００用のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータを不揮発性的に記憶することができる。
【００８８】
通信サブシステム７２４は、他のコンピュータシステムおよびネットワークへのインターフェイスを形成する。通信サブシステム７２４は、コンピュータシステム７００からデータを受信し、他のシステムにデータを送信するためのインターフェイスとして機能する。例えば、通信サブシステム７２４によって、コンピュータシステム７００は、インターネットを介して、１つ以上の装置に接続することができる。いくつかの実施形態において、通信サブシステム７２４は、（例えば、携帯電話技術、３Ｇ、４ＧまたはＥＤＧＥ（Enhanced Data Rates for Global Evolution）などの先進データネットワーク技術）、WiFi（IEEE 802.11ファミリ規格、または他の移動通信技術、またはそれらの組み合わせ）を使用して）無線音声および／またはデータのネットワークにアクセスするための無線周波数（ＲＦ）トランシーバコンポーネント、全地球測位システム（ＧＰＳ）レシーバコンポーネント、および／または他のコンポーネントを含むことができる。いくつかの実施形態では、通信サブシステム７２４は、無線インターフェイスに加えてまたは無線インターフェイスの代わりに、有線ネットワーク接続（例えば、イーサネット（登録商標））を提供することができる。
【００８９】
いくつかの実施形態において、通信サブシステム７２４は、コンピュータシステム７００を使用している１人のユーザまたは複数のユーザの代理として、構造化および／または非構造化データフィード７２６、イベントストリーム７２８、イベントアップデート７３０などの形にした入力通信を受信してもよい。
【００９０】
一例として、通信サブシステム７２４は、ソーシャルネットワークおよび／または他の通信サービスのユーザから、リアルタイムデータフィード７２６、例えばTwitter（登録商標）フィード、Facebook（登録商標）アップデート、ＲＳＳ（Rich Site Summary）フィードなどのウェブフィード、および／または１つ以上の第三者情報ソースからのリアルタイム更新を受信するように構成されてもよい。
【００９１】
さらに、通信サブシステム７２４は、連続的なデータストリームの形にしたデータを受信するように構成されてもよい。そのデータストリームは、リアルタイムイベントのイベントストリーム７２８および／またはイベントアップデート７３０を含むことができ、連続的でありまたは実質的に明確な終点を有しない。連続データを生成するアプリケーションの例として、例えば、センサデータアプリケーション、金融相場表示機、ネットワーク性能測定ツール（例えば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、および自動車交通監視装置などをふくむことができる。
【００９２】
また、通信サブシステム７２４は、コンピュータシステム７００に連結された１つ以上のデータストリームソースコンピュータと通信することができる１つ以上のデータベースに、構造化および／または非構造化データフィード７２６、イベントストリーム７２８、およびイベントアップデート７３０などを出力するように構成されてもよい。
【００９３】
コンピュータシステム７００は、携帯型装置（例えば、iPhone（登録商標）携帯電話、iPad（登録商標）コンピューティングタブレット、ＰＤＡ）、装着型装置（例えば、Google Glass（登録商標）ヘッドマウントディスプレイ）、ＰＣ、ワークステーション、メインフレーム、キオスク、サーバラック、または他のデータ処理システムであってもよい。
【００９４】
コンピュータおよびネットワークの絶えず変化する性質により、図示されたコンピュータシステム７００の説明は、特定の例を示す意図を与える。図示されたシステムよりも多くのコンポーネントまたは少ないコンポーネントを有する他の構成も多くできる。例えば、カスタマイズされたハードウェアを使用してもよく、および／または特定の要素をハードウェア、ファームウェア、ソフトウェア（アプレットを含む）、またはそれらの組み合わせに実装してもよい。さらに、ネットワーク入力／出力装置などの他のコンピューティング装置への接続を使用することもできる。本明細書で提供される開示および教示に基づいて、当業者は、さまざまな実施形態を実現するための他の方法および／または方法を理解するであろう。
【００９５】
図８は、本発明のさまざまな実施形態を実現することができるモバイル装置アプリのライフサイクルを変更するための例示的なシステム８００の簡略構造を示している。
【００９６】
図８に示すように、例示的なシステム８００は、第１提供ユニット８０１と、第１改名ユニット８０２と、第１挿入ユニット８０３と、第１変更ユニット８０４と、第１生成ユニット８０５とを含むことができる。第１提供ユニット８０１は、コンピュータソフトウェアアプリケーションに関連するアプリケーションマニフェストファイルおよびバイトコードファイルを提供するように構成することができる。第１改名ユニット８０２は、アプリケーションクラスのオリジナルメソッドの名前をバイトコードファイル内の改名メソッドの名前に変更するように構成することができる。第１挿入ユニット８０３は、ラッパーメソッドをバイトコードファイル内のアプリケーションクラスに挿入するように構成することができる。このラッパーメソッドは、オリジナルメソッドの名前を有し、改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成される。第１変更ユニット８０４は、オリジナルコンテンツプロバイダクラスの名前を、アプリケーションマニフェストファイル内の変更されたコンテンツプロバイダクラスの名前に変更するように構成することができる。第１作成ユニット８０５は、バイトコードファイル内に、ラッパーコンテンツプロバイダクラスを作成するように構成することができる。このラッパーコンテンツプロバイダクラスは、変更されたコンテンツプロバイダクラスの名前を有し、オリジナルコンテンツプロバイダクラスのメソッドを呼び出すためのコールを転送する前に、オリジナルコンテンツプロバイダクラスがインスタンス化されているか否かをチェックするするように構成される。
【００９７】
第２改名ユニット８０６は、アクティビティクラスのオリジナルメソッドの名前を、バイトコードファイル内のアクティビティクラスの改名メソッドの名前に変更するように構成することができる。第２挿入ユニット８０７は、ダミーメソッドをバイトコードファイル内のアクティビティクラスに挿入するように構成することができる。このダミーメソッドは、アクティビティクラスのオリジナルメソッドの名前を有し、アクティビティクラスの改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成することができる。
【００９８】
一実施形態において、アプリケーションマニフェストファイル内のすべてのコンテンツプロバイダクラスの名前は、変更される。
【００９９】
一実施形態において、システムは、ラッパーメソッドによってポリシーを読み取るように構成された第１読み取りユニット８０８をさらに備え、認証または暗号化メソッドを呼び出すためのコールは、当該ポリシーに準拠する。
【０１００】
一実施形態において、ポリシーは、情報技術（ＩＴ）部署から、モバイル装置アプリをインストールしたモバイル装置に送信される。
【０１０１】
一実施形態において、ダミークラスは、モバイル装置マネージャアプリケーションを呼び出すためのコールを含む。
【０１０２】
一実施形態において、クラスは、静的ブロック初期化を含む。
一実施形態において、クラスは、コンストラクタを含む。
【０１０３】
一実施形態において、システムは、バイトコードファイル内のアプリケーション静的初期化メソッド、アプリケーションコンストラクタメソッド、アプリケーションattachBaseContext()メソッド、コンテンツプロバイダ静的初期化メソッド、コンテンツプロバイダコンストラクタメソッド、コンテンツプロバイダonCreate()メソッド、アプリケーションonCreate()メソッド、ランチャアクティビティ静的初期化メソッド、ランチャアクティビティコンストラクターメソッド、およびランチャアクティビティonCreate()メソッド、ランチャアクティビティonStart()メソッド、およびランチャアクティビティonResume()メソッドのすべての名前を変更するように構成された第３改名ユニット８０９をさらに備えることができる。
【０１０４】
一実施形態において、システムは、onCreate()メソッド、onStart()メソッド、onStop()メソッド、onRestart()メソッド、onPause()メソッド、onResume()メソッド、またはonDestroy()メソッドをラッパークラスに挿入するように構成された第３挿入ユニット８１０をさらに備えることができる。
【０１０５】
実施形態において、第１改名ユニットは、オリジナルメソッドにプリフィックスまたはサフィックスを追加することによって、改名メソッドを作成するように構成された追加ユニットを含むことができる。
【０１０６】
一実施形態において、アプリケーションマニフェストファイルは、ＸＭＬ（拡張マークアップ言語）コードを含む。
【０１０７】
一実施形態において、バイトコードファイルは、Google Android（登録商標）コンピュータアプリケーション用のGoogle Dalvik（登録商標）実行可能（ＤＥＸ）なバイトコードファイルである。
【０１０８】
一実施形態において、システムは、Google Android（登録商標）アプリケーションパッケージ（ＡＰＫ）ファイルから、アプリケーションマニフェストファイルおよびバイトコードファイルを抽出するように構成された抽出ユニット８１１をさらに備えることができる。
【０１０９】
本発明の原理を実行するために、システム８００のユニットは、ハードウェア（フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、集積回路（ＩＣ）、または特定用途向け集積回路（ＡＳＩＣ）など）、ソフトウェア、ファームウェアまたはそれらの任意の組み合わせを含むことができる。当業者であれば、上述の本発明の原理を実施するために、図８に記載されたユニットは、サブユニットに結合されてもよく、サブユニットに分けてもよいことを理解するだろう。したがって、図８に記載されたユニットは、実際の必要に応じて、上記の実施形態に説明した本発明の原理に従って、さまざまな動作を実行することができる。
【０１１０】
本発明に係わる例示的な実施形態のいくつかは、以下のようにすることができる。
（１）モバイル装置アプリのライフサイクルを変更するためのコンピュータシステムであって、
プロセッサと、
プロセッサと動作可能に結合されたメモリとを備え、
プロセッサは、メモリからの命令を実行し、
プロセッサは、
コンピュータソフトウェアアプリケーションに対応するアプリケーションマニフェストファイルおよびバイトコードファイルを提供し、
アプリケーションクラスのオリジナルメソッドの名前をバイトコードファイル内の改名メソッドの名前に変更し、
オリジナルメソッドの名前を有し、改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたラッパーメソッドを、バイトコードファイル内のアプリケーションクラスに挿入し、
オリジナルコンテンツプロバイダクラスの名前を、アプリケーションマニフェストファイル内の変更されたコンテンツプロバイダクラスの名前に変更し、
変更されたコンテンツプロバイダクラスの名前を有し、オリジナルコンテンツプロバイダクラスのメソッドを呼び出すためのコールを転送する前に、オリジナルコンテンツプロバイダクラスがインスタンス化されたか否かをチェックするように構成されたラッパーコンテンツプロバイダクラスを、バイトコードファイル内で作成するように構成される。
【０１１１】
（２）上記（１）のコンピュータシステムにおいて、プロセッサは、
アクティビティクラスのオリジナルメソッドの名前を、バイトコードファイル内のアクティビティクラスの改名メソッドの名前に変更し、
アクティビティクラスのオリジナルメソッドの名前を有し、アクティビティクラスの改名メソッドを呼び出す前に、認証または暗号化メソッドを呼び出すように構成されたダミーメソッドを、バイトコードファイル内のアクティビティクラスに挿入するように構成される。
【０１１２】
（３）上記（１）に記載のコンピュータシステムにおいて、アプリケーションマニフェストファイル内のすべてのコンテンツプロバイダクラスの名前は、変更される。
【０１１３】
（４）上記（１）のコンピュータシステムにおいて、プロセッサは、ラッパーメソッドによってポリシーを読み取るようにさらに構成され、認証または暗号化メソッドを呼び出すためのコールは、当該ポリシーに準拠する。
【０１１４】
（５）上記（４）に記載のコンピュータシステムにおいて、上記ポリシーは、情報技術（ＩＴ）部署から、モバイル装置アプリをインストールしたモバイル装置に送信される。
【０１１５】
（６）上記（１）に記載のコンピュータシステムにおいて、ラッパーメソッドは、モバイル装置マネージャアプリケーションを呼び出すためのコールを含む。
【０１１６】
（７）上記（１）に記載のコンピュータシステムにおいて、オリジナルメソッドは、静的ブロック初期化を含む。
【０１１７】
（８）上記（１）に記載のコンピュータシステムにおいて、オリジナルメソッドは、コンストラクタを含む。
【０１１８】
（９）上記（８）に記載のコンピュータシステムにおいて、プロセッサは、バイトコードファイル内のアプリケーション静的初期化メソッド、アプリケーションコンストラクタメソッド、アプリケーションattachBaseContext()メソッド、コンテンツプロバイダ静的初期化メソッド、コンテンツプロバイダコンストラクタメソッド、コンテンツプロバイダonCreate()メソッド、アプリケーションonCreate()メソッド、ランチャアクティビティ静的初期化メソッド、ランチャアクティビティコンストラクターメソッド、およびランチャアクティビティonCreate()メソッド、ランチャアクティビティonStart()メソッド、およびランチャアクティビティonResume()メソッドのすべての名前を変更するようにされに構成される。
【０１１９】
（１０）上記（１）に記載のコンピュータシステムにおいて、プロセッサは、onCreate()メソッド、onStart()メソッド、onStop()メソッド、onRestart()メソッド、onPause()メソッド、onResume()メソッド、またはonDestroy()メソッドをラッパークラスに挿入するようにさらに構成される。
【０１２０】
（１１）上記（１）に記載のコンピュータシステムにおいて、オリジナルクラスの名前を変更するように構成されたプロセッサは、オリジナルメソッドにプリフィックスまたはサフィックスを追加することによって、改名メソッドを作成するように構成される。
【０１２１】
（１２）上記（１）に記載のコンピュータシステムにおいて、アプリケーションマニフェストファイルは、ＸＭＬ（拡張マークアップ言語）コードを含む。
【０１２２】
（１３）上記（１）に記載のコンピュータシステムにおいて、バイトコードファイルは、Google Android（登録商標）コンピュータアプリケーション用のGoogle Dalvik（登録商標）実行可能（ＤＥＸ）なバイトコードファイルである。
【０１２３】
（１４）上記（１）に記載のコンピュータシステムにおいて、プロセッサは、Google Android（登録商標）アプリケーションパッケージ（ＡＰＫ）ファイルから、前記アプリケーションマニフェストファイルおよび前記バイトコードファイルを抽出するようにさらに構成される。
【０１２４】
前述の明細書において、特定の実施形態を参照して、本発明の態様を説明したが、当業者であれば、本発明がこれらの実施形態に限定されないことを認識するであろう。上述した本発明のさまざまな特徴および態様は、個別にまたは共同で使用することができる。さらに、実施形態は、本明細書の幅広い精神および範囲から逸脱することなく、本明細書に記載された環境および用途を超える任意数の環境および用途に利用されることができる。したがって、明細書および図面は、限定的ではなく例示的なものとして見なすべきである。
【図１】
0006464256.tif 000004
【図２Ａ】
0006464256.tif 000005
【図２Ｂ】
0006464256.tif 000006
【図３Ａ】
0006464256.tif 000007
【図３Ｂ】
0006464256.tif 000008
【図４】
0006464256.tif 000009
【図５】
0006464256.tif 000010
【図６】
0006464256.tif 000011
【図７】
0006464256.tif 000012
【図８】
0006464256.tif 000013