約 5,029,921 件
https://w.atwiki.jp/saltysugar/pages/47.html
激安Android端末 Chocotto CH-AND500 で遊ぶ(2013.3) 古カメラ仲間のFerdiさんから小型で激安のAndroid端末があることをTwitter経由で教えて頂いた。 調べてみると通販で6280円で売られていたので、脊髄反射で購入してしまった。 アプライド楽天通販 (2012-03-28 現在の通販サイトのキャッシュ) はじめてのAndroid端末となるのでいろいろ遊んでみる。 1.分解 端末を裏返しにすると四隅にゴムでふたをされたビスがあるので、ゴムを精密ドライバ等ではずし、+ネジを4本外せば分解できる。 2.カスタムファームウエア(CFW)のインストール Universal Uberoid WM8650 1.5.5 HoneyCombMOD v11 12-MARCH-2012 をインストールする。 入手先はこちら(要登録)http //www.techknow.t0xic.nl/forum/index.php?topic=1908.0 2GB(~8GB)のマイクロSDHCを用意して、PCからSDHCにCFWインストーラをコピーして、そのSDHCを端末に挿して起動するとCFWが端末にインストールされる。 SDHCへのインストールでは option14(5インチ端末用)を選んでCFWインストーラをインストールすること。 SDHCを端末に挿して起動すると、壊れたような画面が現れるが、5分ほど我慢してCFWがインストールされるのを待つ。 SDHCを抜くと端末が再起動し、アンドロイドの起動画面が現れる。 3.設定 初回起動時はタッチパネルの設定が画面表示と左右逆転しているので設定からタッチパネルのキャリブレーションを行う。 言語が英語に設定されているので日本語に設定する。IMEはインストールされないのでshimeji等をインストールする。 中国風のフォントが気になる向きは DroidSansJapanease.ttfを /system/fonts にインストールする。 時刻がUTCに設定されているので、タイムゾーンから東京を選ぶ。 液晶画面がちらつくが、init.rcの中の「write /proc/sys/vpp/pixel_clock 26000000」 を20000000に書き変えて再起動するとちらつきが消える。 Google Playに接続できるが、めぼしいアプリは見えないか、「このアプリはお使いのWonderMedia WM8650に対応していません。」と言われてインストールできない。 APK DownloaderをつかってPC上のChromeでアプリをダウンロードしてSDHCにコピーし、SDHCを端末に挿してアプリをインストールする。 Homeボタンが動くようにするには、SDHCインストールディスク内のFirmwareInstall/env/env_ubootの中の setenv wmt.sys.keypad の行を 5inch 1 rc_1 3 r0_9e r1_8b r2_66 に書き換える。 (中華Pad@wiki http //www37.atwiki.jp/china_pad/pages/183.html より) 4.既知の問題点 Homeボタンを押しても何も反応しない。 フォントが中国風。 感想 端末としての性能はいまいちだが、安くていろいろ遊べるのが良い。USBとLANポートのアダプタが付属するので、有線LANでキーボードやマウスを繋いで運用することもできる。ターミナルエミュレータを入れれば手のひらサイズのLinuxマシンになるのでこれも楽しい。 -
https://w.atwiki.jp/vagante_jp/pages/66.html
Random (ランダム) キャラクター概要 Randomを選択すると「クラス」「バックグラウンド」「スキル」がランダムで選ばれる。 「クラス」はランダムを選んだ時点で見た目で判断可能。4種類の見た目もランダムで選ばれる。 初期装備と初期ステータスはそれぞれのクラスの物になる。 「バックグラウンド」はランダムを選んだ時点で一部判別可能。 BoomerangやAcolyte of Light等は装備や魔法で判別可能である。 「スキル」は各クラスのスキルの中から4種類がランダムで選ばれる。 ただし、Hound Masterのスキルはペットがいないと効果が無いため、Hound Masterのクラスが選ばれたときのみ出る模様。 Random専用のスキル「Wand」が存在する。 ※実際には完全にランダムではなく、スキルセットのテーブルが存在し、特定の条件によりその中から選択されている。 ゲームを起動してそのままランダムを選択しプレイをはじめると必ず同じセットになってしまうので、 ランダムを真に楽しむには何度か馬車を出たり入ったりする必要がある。 セーブ&ロードするとランダムに選択されたスキルセットが見た目通りの職業に戻されるバグがある。 スキル ■Wand レベル img 名前(EN) 名前(JA) 効果 1 Wand Adept INTとワンドの種類に応じて、ワンドに追加の近接攻撃力を付与。使用されたワンドはさらに近接攻撃力を 増加させる。 2 Artificer 焚火で休むことで、受動的にワンドのリチャージを 行うことができる。リチャージの巻物がより効果的になる。 3 Wand Channelling より大きな効果を得るために杖に力をこめることができる。焚火で休むことでより多くリチャージできるようになる。 4 Magic Amplifier 同じタイプの杖を装備することで、スペルによるダメージボーナスを 得ることができる。焚火でさらにより多くのワンドをリチャージできるようになった。 コメント欄 名前 最新40件を表示しています。Random_ログ全文 コメント左側の◯をクリックしてから書き込むと、レス形式でコメントできます。
https://w.atwiki.jp/anddoid/pages/2.html
メニュー トップページ プラグイン紹介 まとめサイト作成支援ツール メニュー メニュー2 anddoid @ ウィキとは レイアウト系 LinearLayout FrameLayout RelativeLayout TableLayout widget系 TextView EditText Button CheckBox RadioGroup RatingBar TimePicker DatePicker Chronometer AnalogClock DigitalClock manifest系 manifest uses-sdk application activity intent-filter action category Animation系 alpha rotate scale translate set 要素 android id android gravity android orientation android hint android background android visibility android autoLink android inputType android imeOptions android capitalize android text android textColor android textSize android textStyle android typeface android layout_width android layout_height android layout_weight android layout_gravity android layout_margin android layout_marginLeft android layout_marginTop android layout_marginRight android layout_marginBottom android padding android paddingLeft android paddingTop android paddingRight android paddingBottom ここを編集
https://w.atwiki.jp/api_programming/pages/201.html
下位ページ Content バックグラウンドでサービス起動中に通知を表示するNofificationオブジェクトを作成する NoficationManagerで通知を出す 通知を消す 通知 | Android Developers バックグラウンドでサービス起動中に通知を表示する NotificationManager.notifyにNotificationオブジェクトを渡す。Notificationオブジェクトの生成は、Builderクラスを用いたほうが簡単? Androidで通知バーに表示する | AutumnColor.com AndroidでNotificationをまた実装するときのメモ | Qiita Notification.Builderオブジェクト(builder)を作成 builderにアイコン、タイトル、メッセージを設定 builderからNotificationオブジェクト(notification)を作成 グローバルなNotificationManagerオブジェクト(manager)にインスタンスを渡す。もしもローカルに設定したらどうなるんだろう。 manager.notifyで通知を出す。 manager.cancelで通知を消す。notify, cancel それぞれで ID を指定できるので、複数出したらこれで制御する Nofificationオブジェクトを作成する NotificationCompat.Builder を作成し、通知内容を準備したあと、Notificationオブジェクトを作る。 NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); NotificationCompat.Builder | Android Developers このあと、通知バーに載せる情報を設定する。最低限必要なものはアイコンだけらしい。が、タイトルと説明文も必要。そして、さらに必要なものをセットする。 セットしたあと、オブジェクトにする。 Notification notification = builder.build(); NoficationManagerで通知を出す NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext()); manager.notify(NOTIFICATION_MINIMUM_ID, notification); Compat は互換性(Compatible) notify - NotificationManager | Android Developers アイコンは、何も準備していなければ、デフォルトの何かを使って、動作確認できる。 builder.setSmallIcon(android.R.drawable.ic_dialog_info); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); builder.setSmallIcon(android.R.drawable.ic_dialog_info); // android.R.drawable.ic_dialog_info はデフォルトダミー builder.setContentTitle("通知タイトル"); // 通知タイトル builder.setContentText("通知メッセージ"); // 通知メッセージ Notification notification = builder.build(); // (5) manager = NotificationManagerCompat.from(getApplicationContext()); manager.notify(NOTIFICATION_ID, notification); 通知を消す NotificationManagerCompat.cancel で消す cancel - NotificationManager | Android Developers
https://w.atwiki.jp/android/pages/23.html
Eclipseプラグインを使ったAndroidアプリケーションの作成 Eclipseプラグインを使わないAndroidアプリケーションの作成 |######ここまで翻訳######| Implementing Activity Callbacks Opening a New ScreenOpening a Screen Some Intent examples Returning a Result from a Screen Lifetime of the new screen Listening for Button Clicks Configuring General Window Properties Storing and Retrieving StateStoring and Retrieving Larger or More Complex Persistent Data Playing Media Files Listening For and Broadcasting Global Messages, and Setting AlarmsSending the message Receiving the message Other system messages Listening for phone events Setting Alarms Displaying AlertsNormal Alerts AlertDialog Notifications Displaying a Progress Bar Adding Your Application to the Favorites List Adding Items to the Screen MenuAdding Submenus Adding yourself to menus on other applications The offering application Display a Web Page Binding to Data Capture Images from the Phone Camera Handling Expensive Operations in the UI Thread Selecting, Highlighting, or Styling Portions of Text List of Files for an Android Application Eclipseプラグインを使ったAndroidアプリケーションの作成 Android Eclipseプラグインを使用することは、新しいAndroidアプリケーションの作成を始める最も高速で最も簡単な方法です。 プラグインは自動的にあなたのアプリケーションのために正しいプロジェクト構造を生成し、リソースを自動的にコンパイルしてくれます。 Androidアプリケーションの動作原理を理解するために、Androidアプリケーション解体新書を読んでみるのもよいでしょう。 SDKの sample/ フォルダでApiDemosアプリケーションと他のサンプルアプリケーションを見てみることもお勧めします。 最終的にはHello AndroidとNotepadのコードチュートリアルを行うことがEclipseでのAndroid開発を始めるには素敵な方法です。 特にHello Androidチュートリアルを行うことは、Eclipseで新しいAndroidアプリケーションを作成するための優れた導入方法となるでしょう。 Eclipseプラグインを使わないAndroidアプリケーションの作成 |######ここまで翻訳######| This topic describes the manual steps in creating an Android application. Before reading this, you should read Overview of an Android Application to understand the basics of how an Android application works. You might also want to look at the sample applications that ship with Android under the samples/ directory. Here is a list of the basic steps in building an application. 1. Create your required resource files This includes the AndroidManifest.xml global description file, string files that your application needs, and layout files describing your user interface. A full list of optional and required files and syntax details for each is given in File List for an Android Application. 2. Design your user interface See Implementing a UI for details on elements of the Android screen. 3. Implement your Activity (this page) You will create one class/file for each screen in your application. Screens will inherit from an android.app class, typically android.app.Activity for basic screens, android.app.ListActivity for list screens, or android.app.Dialog for dialog boxes. You will implement the required callbacks that let you draw your screen, query data, and commit changes, and also perform any required tasks such as opening additional screens or reading data from the device. Common tasks, such as opening a new screen or reading data from the device, are described below. The list of files you ll need for your application are described in List of Files for an Android Application. 4. Build and install your package. The Android SDK has some nice tools for generating projects and debugging code. Implementing Activity Callbacks Android calls a number of callbacks to let you draw your screen, store data before pausing, and refresh data after closing. You must implement at least some of these methods. See Lifetime of a Screen to learn when and in what order these methods are called. Here are some of the standard types of screen classes that Android provides android.app.Activity - This is a standard screen, with no specialization. android.app.ListActivity - This is a screen that is used to display a list of something. It hosts a ListView object, and exposes methods to let you identify the selected item, receive callbacks when the selected item changes, and perform other list-related actions. android.app.Dialog - This is a small, popup dialog-style window that isn t intended to remain in the history stack. (It is not resizeable or moveable by the user.) Opening a New Screen Your Activity will often need to open another Activity screen as it progresses. This new screen can be part of the same application or part of another application, the new screen can be floating or full screen, it can return a result, and you can decide whether to close this screen and remove it from the history stack when you are done with it, or to keep the screen open in history. These next sections describe all these options. Floating or full? When you open a new screen you can decide whether to make it transparent or floating, or full-screen. The choice of new screen affects the event sequence of events in the old screen (if the new screen obscures the old screen, a different series of events is called in the old screen). See Lifetime of an Activity for details. Transparent or floating windows are implemented in three standard ways Create an app.Dialog class Create an app.AlertDialog class Set the Theme_Dialog theme attribute to @android style/Theme.Dialog in your AndroidManifest.xml file. For example activity class="AddRssItem" android label="Add an item" android theme="@android style/Theme.Dialog"/ Calling startActivity() or startSubActivity() will open a new screen in whatever way it defines itself (if it uses a floating theme it will be floating, otherwise it will be full screen). Opening a Screen When you want to open a new screen, you can either explicitly specify the activity class to open, or you can let the operating system decide which screen to open, based upon the data and various parameters you pass in. A screen is opened by calling startActivity and passing in an Intent object, which specifies the criteria for the handling screen. To specify a specific screen, call Intent.setClass or setClassName with the exact activity class to open. Otherwise, set a variety of values and data, and let Android decide which screen is appropriate to open. Android will find one or zero Activities that match the specified requirements; it will never open multiple activities for a single request. More information on Intents and how Android resolves them to a specific class is given in the Intent topic. Some Intent examples The following snippet loads the com.google.android.samples.Animation1 class, and passes it some arbitrary data. Intent myIntent = new Intent(); myIntent.component = "com.google.android.samples.Animation1"; myIntent.putExtra("com.google.android.samples.SpecialValue", "Hello, Joe!"); // key/value pair, where key needs current package prefix. startActivity(myIntent); The next snippet requests that a Web page be opened by specifying the VIEW action, and a URI data string starting with "http //" schema Intent myIntent = new Intent("android.intent.action.VIEW", "http //www.google.com"); myIntent.putExtra("com.google.android.samples.SpecialValue", "Hello, Joe!"); // key/value pair, where key needs current package prefix. Here is the intent filter from the AndroidManifest.xml file for com.google.android.browser intent-filter action value="android.intent.action.VIEW" / category value="android.intent.category.DEFAULT" / scheme value="http" / scheme value="https" / scheme value="file" / /intent-filter Android defines a number of standard values, for instance the action constants defined by Intent. You can define custom values, but both the caller and handler must use them. See the intent-filter tag description in AndroidManifest.xml File Details for more information on the manifest syntax for the handling application. Returning a Result from a Screen A window can return a result after it closes. This result will be passed back into the calling Activity s onActivityResult() method, which can supply an integer result code, a string of data, and a Bundle of arbitrary data, along with the request code passed to startSubActivity(). Note that you must call the startSubActivity() method that accepts a request code parameter to get this callback. The following code demonstrates opening a new screen and retrieving a result. // Open the new screen. public void onClick(View v){ // Start the activity whose result we want to retrieve. The // result will come back with request code GET_CODE. Intent intent = new Intent(this, com.example.app.ChooseYourBoxer.class); startSubActivity(intent, CHOOSE_FIGHTER); } // Listen for results. protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras){ // See which child activity is calling us back. switch (resultCode) { case CHOOSE_FIGHTER // This is the standard resultCode that is sent back if the // activity crashed or didn t doesn t supply an explicit result. if (resultCode == RESULT_CANCELED){ myMessageboxFunction("Fight cancelled"); } else { myFightFunction(data, extras); } default break; } } // Class SentResult // Temporary screen to let the user choose something. private OnClickListener mLincolnListener = new OnClickListener(){ public void onClick(View v) { Bundle stats = new Bundle(); stats.putString("height","6\ 4\""); stats.putString("weight", "190 lbs"); stats.putString("reach", "74\""); setResult(RESULT_OK, "Lincoln", stats); finish(); } }; private OnClickListener mWashingtonListener = new OnClickListener() { public void onClick(View v){ Bundle stats = new Bundle(); stats.putString("height","6\ 2\""); stats.putString("weight", "190 lbs"); stats.putString("reach", "73\""); setResult(RESULT_OK, "Washington", Bundle); finish(); } }; Lifetime of the new screen An activity can remove itself from the history stack by calling Activity.finish() on itself, or the activity that opened the screen can call Activity.finishSubActivity() on any screens that it opens to close them. Listening for Button Clicks Button click and other UI event capturing are covered in Listening for UI Notifications on the UI Design page. Configuring General Window Properties You can set a number of general window properties, such as whether to display a title, whether the window is floating, and whether it displays an icon, by calling methods on the Window member of the underlying View object for the window. Examples include calling getWindow().requestFeature() (or the convenience method requestWindowFeature(some_feature)) to hide the title. Here is an example of hiding the title bar //Hide the title bar requestWindowFeature(Window.FEATURE_NO_TITLE); Storing and Retrieving State If your application is dumped from memory because of space concerns, it will lose all user interface state information such as checkbox state and text box values as well as class member values. Android calls Activity.onFreeze before it pauses the application. This method hands in a Bundle that can be used to store name/value pairs that will persist and be handed back to the application even if it is dropped from memory. Android will pass this Bundle back to you when it calls onCreate(). This Bundle only exists while the application is still in the history stack (whether or not it has been removed from memory) and will be lost when the application is finalized. See the topics for onFreeze(Bundle) and onCreate(Bundle) for examples of storing and retrieving state. Read more about the life cycle of an application in Lifetime of an Activity. Storing and Retrieving Larger or More Complex Persistent Data Your application can store files or complex collection objects, and reserve them for private use by itself or other activities in the application, or it can expose its data to all other applications on the device. See Storing, Retrieving, and Exposing Data to learn how to store and retrieve private data, how to store and retrieve common data from the device, and how to expose your private data to other applications. Playing Media Files Please see the document Android Media APIs for more details. Listening For and Broadcasting Global Messages, and Setting Alarms You can create a listening class that can be notified or even instantiated whenever a specific type of system message is sent. The listening classes, called intent receivers, extend IntentReceiver. If you want Android to instantiate the object whenever an appropriate intent notification is sent, define the receiver with a receiver element in the AndroidManifext.xml file. If the caller is expected to instantiate the object in preparation to receive a message, this is not required. The receiver will get a call to their IntentReceiver.onReceiveIntent() method. A receiver can define an intent-filter tag that describes the types of messages it will receive. Just as Android s IntentResolver will look for appropriate Activity matches for a startActivity() call, it will look for any matching Receivers (but it will send the message to all matching receiver, not the "best" match). To send a notification, the caller creates an Intent object and calls Activity.broadcastIntent() with that Intent. Multiple recipients can receive the same message. You can broadcast an Intent message to an intent receiver in any application, not only your own. If the receiving class is not registered using receiver in its manifest, you can dynamically instantiate and register a receiver by calling Context.registerReceiver(). Receivers can include intent filters to specify what kinds of intents they are listening for. Alternatively, if you expect a single known caller to contact a single known receiver, the receiver does not specify an intent filter, and the caller specifies the receiver s class name in the Intent by calling Intent.setClassName() with the recipient s class name. The recipient receives a Context object that refers to its own package, not to the package of the sender. Note If a receiver or broadcaster enforces permissions, your application might need to request permission to send or receive messages from that object. You can request permission by using the uses-permission tag in the manifest. Here is a code snippet of a sender and receiver. This example does not demonstrate registering receivers dynamically. For a full code example, see the AlarmService class in the ApiDemos project. Sending the message // We are sending this to a specific recipient, so we will // only specify the recipient class name. Intent intent = new Intent(this, AlarmReceiver.class); intent.putExtra("message","Wake up."); broadcastIntent(intent); Receiving the message Receiver AndroidManifest.xml (because there is no intent filter child, this class will only receive a broadcast when the receiver class is specified by name, as is done in this example) receiver class=".AlarmReceiver" / Receiver Java code public class AlarmReceiver extends IntentReceiver{ // Display an alert that we ve received a message. @Override public void onReceiveIntent(Context context, Intent intent){ // Send a text notification to the screen. NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nm.notifyWithText(R.id.alarm, "Alarm!!!", NotificationManager.LENGTH_SHORT, null); } } Other system messages You can listen for other system messages sent by Android as well, such as USB connection/removal messages, SMS arrival messages, and timezone changes. See Intent for a list of broadcast messages to listen for. Messages are marked "Broadcast Action" in the documentation. Listening for phone events The telephony package overview page describes how to register to listen for phone events. Setting Alarms Android provides an AlarmManager service that will let you specify an Intent to send at a designated time. This intent is typically used to start an application at a preset time. (Note If you want to send a notification to a sleeping or running application, use Handler instead.) Displaying Alerts There are two major kinds of alerts that you may display to the user (1) Normal alerts are displayed in response to a user action, such as trying to perform an action that is not allowed. (2) Out-of-band alerts, called notifications, are displayed as a result of something happening in the background, such as the user receiving new e-mail. Normal Alerts Android provides a number of ways for you to show popup notifications to your user as they interact with your application. Class Description app.AlertDialogorContext.showAlert() A popup alert dialog with two buttons (typically OK and Cancel) that take callback handlers. It can be created separately, or launched using the Application helper method Context.showAlert(). See the section after this table for more details. ProgressDialog A dialog box used to indicate progress of an operation with a known progress value or an indeterminate length (setProgress(bool)). See Views Progress Bar in ApiDemos for examples. Activity By setting the theme of an activity to android theme="android style/Theme.Dialog", your activity will take on the appearance of a normal dialog, floating on top of whatever was underneath it. You usually set the theme through the android theme attribute in your AndroidManifest.xml. The advantage of this over Dialog and AlertDialog is that Application has a much better managed lifecycle than dialogs if a dialog goes to the background and is killed, you cannot recapture state, whereas Application exposes a Bundle of saved values in onCreate() to help you maintain state. AlertDialog This is a basic warning dialog box that lets you configure a message, button text, and callback. You can create one by calling the Application helper method Context.showAlert(), as shown here. private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case ACCEPT_CALL answer(msg.obj); break; case BOUNCE_TO_VOICEMAIL voicemail(msg.obj); break; } } }; private void IncomingMotherInlawCall(Connection c) { String Text; // "Answer" callback. Message acceptMsg = Message.obtain(); acceptMsg.target = mHandler; acceptMsg.what = ACCEPT_CALL; acceptMsg.obj = c.getCall(); // "Cancel" callback. Message rejectMsg = Message.obtain(); rejectMsg.target = mHandler; rejectMsg.what = BOUNCE_TO_VOICEMAIL; rejectMsg.obj = c.getCall(); showAlert(null, "Phyllis is calling", "Answer", acceptMsg, true, rejectMsg); } Notifications Out-of-band alerts should always be displayed using the NotificationManager, which allows you to tell the user about something they may be interested in without disrupting what they are currently doing. A notification can be anything from a brief pop-up box informing the user of the new information, through displaying a persistent icon in the status bar, to vibrating, playing sounds, or flashing lights to get the user s attention. In all cases, the user must explicitly shift their focus to the notification before they can interact with it. The following code demonstrates using NotificationManager to display a basic text popup when a new SMS message arrives in a listening service, and provides the current message count. You can see several more examples in the ApiDemos application, under app/ (named notification*.java). static void setNewMessageIndicator(Context context, int messageCount){ // Get the static global NotificationManager object. NotificationManager nm = NotificationManager.getDefault(); // If we re being called because a new message has been received, // then display an icon and a count. Otherwise, delete the persistent // message. if (messageCount 0) { nm.notifyWithText(myApp.NOTIFICATION_GUID, // ID for this notification. messageCount + " new message" + messageCount 1 ? "s" "", // Text to display. NotificationManager.LENGTH_SHORT); // Show it for a short time only. } } To display a notification in the status bar and have it launch an intent when the user selects it (such as the new text message notification does), call NotificationManager.notify(), and pass in vibration patterns, status bar icons, or Intents to associate with the notification. Displaying a Progress Bar An activity can display a progress bar to notify the user that something is happening. To display a progress bar in a screen, call Activity.requestWindowFeature(Window.FEATURE_PROGRESS). To set the value of the progress bar, call Activity.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, level). Progress bar values are from 0 to 9,999, or set the value to 10,000 to make the progress bar invisible. You can also use the ProgressDialog class, which enables a dialog box with an embedded progress bar to send a "I m working on it" notification to the user. Adding Your Application to the Favorites List You can t. Only a user can add an application to the Favorites list. Adding Items to the Screen Menu Every Android screen has a default menu with default options, such as adding the activity to the favorites menu. You can add your own menu entries to the default menu options by implementing Activity.onCreateOptionsMenu or Activity.onPrepareOptionsMenu(), and adding Item objects to the Menu passed in. To handle clicks implement Activity.onOptionsItemSelected() to handle the click in your Activity class. You may also pass the Item object a handler class that implements the Runnable class (a handler) but this is less efficient and discouraged. An application receives a callback at startup time to enable it to populate its menu. Additionally, it receives callbacks each time the user displays the options menu to let you perform some contextual modifications on the menu. To populate the menu on startup, override Activity.onCreateOptionsMenu; to populate it when the menu is called (somewhat less efficient), you can override Activity.onPrepareOptionsMenu(). Each Activity has its own menu list. Menu items are displayed in the order added, though you can group them as described in the Menu.add documentation. The following code snippet adds three items to the default menu options and handles them through the overridden Activity.onOptionsItemSelected() method. You can show or hide menu items by calling setItemShown() or setGroupShown(). // Called only the first time the options menu is displayed. // Create the menu entries. // Menu adds items in the order shown. @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Parameters for menu.add are // group -- Not used here. // id -- Used only when you want to handle and identify the click yourself. // title menu.add(0, 0, "Zoom"); menu.add(0, 1, "Settings"); menu.add(0, 2, "Other"); return true; } // Activity callback that lets your handle the selection in the class. // Return true to indicate that you ve got it, false to indicate // that it should be handled by a declared handler object for that // item (handler objects are discouraged for reasons of efficiency). @Override public boolean onOptionsItemSelected(Menu.Item item){ switch (item.getId()) { case 0 showAlert("Menu Item Clicked", "Zoom", "ok", null, false, null); return true; case 1 showAlert("Menu Item Clicked", "Settings", "ok", null, false, null); return true; case 2 showAlert("Menu Item Clicked", "Other", "ok", null, false, null); return true; } return false; } You can add key shortcuts by calling the Item.setAlphabeticShortcut() or Item.setNumericShortcut() methods, as demonstrated here to add a "C" shortcut to a menu item thisItem.setAlphabeticShortcut(0, c ); Adding Submenus Add a submenu by calling Menu.addSubMenu(), which returns a SubMenu object. You can then add additional items to this menu. Menus can only be one level deep, and you can customize the appearance of the submenu menu item. @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Parameters for menu.add are // group -- Not used here. // id -- Used only when you want to handle and identify the click yourself. // title menu.add(0, 0, "Send message"); menu.add(0, 1, "Settings"); menu.add(0, 2, "Local handler"); menu.add(0, 3, "Launch contact picker"); // Add our submenu. SubMenu sub = menu.addSubMenu(1, 4, "Days of the week"); sub.add(0, 5, "Monday"); sub.add(0, 6, "Tuesday"); sub.add(0, 7, "Wednesday"); sub.add(0, 8, "Thursday"); sub.add(0, 9, "Friday"); sub.add(0, 10, "Saturday"); sub.add(0, 11, "Sunday"); return true; } Adding yourself to menus on other applications You can also advertise your Activity s services so that other Activities can add your activity to their own option menu. For example, suppose you implement a new image handling tool that shrinks an image to a smaller size and you would like to offer this as a menu option to any other Activity that handles pictures. To do this, you would exposes your capabilities inside an intent filter in your manifest. If another application that handles photos asks Android for any Activities that can perform actions on pictures, Android will perform intent resolution, find your Activity, and add it to the other Activity s options menu. The offering application The application offering the service must include an intent-filter element in the manifest, inside the activity tag of the offering Activity. The intent filter includes all the details describing what it can do, such as a type element that describes the MIME type of data that it can handle, a custom action value that describes what your handling application can do (this is so that when it receives the Intent on opening it knows what it is expected to do), and most important, include a category filter with the value android.intent.category.ALTERNATIVE and/or android.intent.category.SELECTED_ALTERNATIVE (SELECTED_ALTERNATIVE is used to handle only the currently selected element on the screen, rather than the whole Activity intent. Here s an example of a snip of a manifest that advertises picture shrinking technology for both selected items and the whole screen. activity class="PictureShrink" !-- Handling class -- intent-filter label="Shrink picture" !-- Menu label to display -- action value="com.example.sampleapp.SHRINK_IT" / type value="image/*" / !-- MIME type for generic images -- category value="android.intent.category.ALTERNATIVE " / category value="android.intent.category.SELECTED_ALTERNATIVE" / /intent-filter /activity The menu-displaying application An application that wants to display a menu that includes any additional external services must, first of all, handle its menu creation callback. As part of that callback it creates an intent with the category Intent.ALTERNATIVE_CATEGORY and/or Intent.SELECTED_ALTERNATIVE, the MIME type currently selected, and any other requirements, the same way as it would satisfy an intent filter to open a new Activity. It then calls menu.addIntentOptions() to have Android search for and add any services meeting those requirements. It can optionally add additional custom menu items of its own. You should implement SELECTED_ALTERNATIVE in onPrepareOptionsMenu() rather than onCreateOptionsMenu(), because the user s selection can change after the application is launched. Here s a code snippet demonstrating how a picture application would search for additional services to display on its menu. @Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); // Create an Intent that describes the requirements to fulfill to be included // in our menu. The offering app must include a category value of Intent.ALTERNATIVE_CATEGORY. Intent intent = new Intent(null, getIntent().getData()); intent.addCategory(Intent.ALTERNATIVE_CATEGORY); // Search for, and populate the menu with, acceptable offering applications. menu.addIntentOptions( 0, // Group 0, // Any unique IDs we might care to add. MySampleClass.class.getName(), // Name of the class displaying the menu--here, its this class. null, // No specifics. intent, // Previously created intent that describes our requirements. 0, // No flags. null); // No specifics. return true; } Display a Web Page Use the webkit.WebView object. Binding to Data You can bind a ListView to a set of underlying data by using a shim class called ListAdapter (or a subclass). ListAdapter subclasses bind to a variety of data sources, and expose a common set of methods such as getItem() and getView(), and uses them to pick View items to display in its list. You can extend ListAdapter and override getView() to create your own custom list items. There are essentially only two steps you need to perform to bind to data 1. Create a ListAdapter object and specify its data source 2. Give the ListAdapter to your ListView object. That s it! Here s an example of binding a ListActivity screen to the results from a cursor query. (Note that the setListAdapter() method shown is a convenience method that gets the page s ListView object and calls setAdapter() on it.) // Run a query and get a Cursor pointing to the results. Cursor c = People.query(this.getContentResolver(), null); startManagingCursor(c); // Create the ListAdapter. A SimpleCursorAdapter lets you specify two interesting things // an XML template for your list item, and // The column to map to a specific item, by ID, in your template. ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, // Use a template that displays a text view c, // Give the cursor to the list adapter new String[] {People.NAME} , // Map the NAME column in the people database to... new String[] {"text1"}); // The "text1" view defined in the XML template setListAdapter(adapter); See view/List4 in the ApiDemos project for an example of extending ListAdapter for a new data type. Capture Images from the Phone Camera You can hook into the device s camera onto your own Canvas object by using the CameraDevice class. See that class s documentation, and the ApiDemos project s Camera Preview application (Graphics/Camera Preview) for example code. Handling Expensive Operations in the UI Thread Avoid performing long-running operations (such as network I/O) directly in the UI thread — the main thread of an application where the UI is run — or your application may be blocked and become unresponsive. Here is a brief summary of the recommended approach for handling expensive operations 1. Create a Handler object in your UI thread 2. Spawn off worker threads to perform any required expensive operations 3. Post results from a worker thread back to the UI thread s handler either through a Runnable or a Message 4. Update the views on the UI thread as needed The following outline illustrates a typical implementation public class MyActivity extends Activity { [ . . . ] // Need handler for callbacks to the UI thread final Handler mHandler = new Handler(); // Create runnable for posting final Runnable mUpdateResults = new Runnable() { @Override public void run() { updateResultsInUi(); } }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); [ . . . ] } protected void startLongRunningOperation() { // Fire off a thread to do some work that we shouldn t do directly in the UI thread Thread t = new Thread() { public void run() { mResults = doSomethingExpensive(); mHandler.post(mUpdateResults); } }; t.start(); } private void updateResultsInUi() { // Back in the UI thread -- update our UI elements based on the data in mResults [ . . . ] } } For further discussions on this topic, see Developing Responsive Applications and the Handler documentation. Selecting, Highlighting, or Styling Portions of Text You can highlight or style the formatting of strings or substrings of text in a TextView object. There are two ways to do this If you use a string resource, you can add some simple styling, such as bold or italic using HTML notation. So, for example, in res/values/strings.xml you could declare this resource string id="@+id/styled_welcome_message" We are b i so /i /b glad to see you. /string /resources To style text on the fly, or to add highlighting or more complex styling, you must use the Spannable object as described next. To style text on the fly, you must make sure the TextView is using Spannable storage for the text (this will always be true if the TextView is an EditText), retrieve its text with getText(), and call setSpan(Object, int, int, int), passing in a new style class from the android.text.style package and the selection range. The following code snippet demonstrates creating a string with a highlighted section, italic section, and bold section, and adding it to an EditText object. // Get our EditText object. EditText vw = (EditText)findViewById(R.id.text); // Set the EditText s text. vw.setText("Italic, highlighted, bold."); // If this were just a TextView, we could do // vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE); // to force it to use Spannable storage so styles can be attached. // Or we could specify that in the XML. // Get the EditText s internal text storage Spannable str = vw.getText(); // Create our span sections, and assign a format to each. str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); List of Files for an Android Application The following list describes the structure and files of an Android application. Many of these files can be built for you (or stubbed out) by the activityCreator.py application shipped in the tools/ menu of the SDK. See Building an Android Sample Application for more information on using activityCreator.py. MyApp/ AndroidManifest.xml (required) Advertises the screens that this application provides, where they can be launched (from the main program menu or elsewhere), any content providers it implements and what kind of data they handle, where the implementation classes are, and other application-wide information. Syntax details for this file are described in AndroidManifest.xml. src//myPackagePath/.../MyClass.java (required) This folder holds all the source code files for your application, inside the appropriate package subfolders. res/ (required) This folder holds all the resources for your application. Resources are external data files or description files that are compiled into your code at build time. Files in different folders are compiled differently, so you must put the proper resource into the proper folder. (See Resources for details.) anim/animation1.xml... (optional) Holds any animation XML description files that the application uses. The format of these files is described in Resources. drawable/some_picture.pngsome_stretchable.9.pngsome_background.xml... (optional) Zero or more files that will be compiled to android.graphics.drawable resources. Files can be image files (png, gif, or other) or XML files describing other graphics such as bitmaps, stretchable bitmaps, or gradients. Supported bitmap file formats are PNG (preferred), JPG, and GIF (discouraged), as well as the custom 9-patch stretchable bitmap format. These formats are described in Resources. layout/screen_1_layout.xml... (optional) Holds all the XML files describing screens or parts of screens. Although you could create a screen in Java, defining them in XML files is typically easier. A layout file is similar in concept to an HTML file that describes the screen layout and components. See Implementing a UI for more information about designing screens, and Layout Resources for the syntax of these files. values/arraysclasses.xmlcolors.xmldimens.xmlstrings.xmlstyles.xmlvalues.xml (optional) XML files describing additional resources such as strings, colors, and styles. The naming, quantity, and number of these files are not enforced--any XML file is compiled, but these are the standard names given to these files. However, the syntax of these files is prescribed by Android, and described in Resources. xml/ (optional) XML files that can be read at run time on the device. raw/ (optional) Any files to be copied directly to the device.
https://w.atwiki.jp/android/pages/151.html
Eclipseプラグインを使ったAndroidアプリケーションの作成 Eclipseプラグインを使わないAndroidアプリケーションの作成 |######ここまで翻訳######| Implementing Activity Callbacks Opening a New ScreenOpening a Screen Some Intent examples Returning a Result from a Screen Lifetime of the new screen Listening for Button Clicks Configuring General Window Properties Storing and Retrieving StateStoring and Retrieving Larger or More Complex Persistent Data Playing Media Files Listening For and Broadcasting Global Messages, and Setting AlarmsSending the message Receiving the message Other system messages Listening for phone events Setting Alarms Displaying AlertsNormal Alerts AlertDialog Notifications Displaying a Progress Bar Adding Your Application to the Favorites List Adding Items to the Screen MenuAdding Submenus Adding yourself to menus on other applications The offering application Display a Web Page Binding to Data Capture Images from the Phone Camera Handling Expensive Operations in the UI Thread Selecting, Highlighting, or Styling Portions of Text List of Files for an Android Application Eclipseプラグインを使ったAndroidアプリケーションの作成 Android Eclipseプラグインを使用することは、新しいAndroidアプリケーションの作成を始める最も高速で最も簡単な方法です。 プラグインは自動的にあなたのアプリケーションのために正しいプロジェクト構造を生成し、リソースを自動的にコンパイルしてくれます。 Androidアプリケーションの動作原理を理解するために、Androidアプリケーション解体新書を読んでみるのもよいでしょう。 SDKの sample/ フォルダでApiDemosアプリケーションと他のサンプルアプリケーションを見てみることもお勧めします。 最終的にはHello AndroidとNotepadのコードチュートリアルを行うことがEclipseでのAndroid開発を始めるには素敵な方法です。 特にHello Androidチュートリアルを行うことは、Eclipseで新しいAndroidアプリケーションを作成するための優れた導入方法となるでしょう。 Eclipseプラグインを使わないAndroidアプリケーションの作成 |######ここまで翻訳######| This topic describes the manual steps in creating an Android application. Before reading this, you should read Overview of an Android Application to understand the basics of how an Android application works. You might also want to look at the sample applications that ship with Android under the samples/ directory. Here is a list of the basic steps in building an application. 1. Create your required resource files This includes the AndroidManifest.xml global description file, string files that your application needs, and layout files describing your user interface. A full list of optional and required files and syntax details for each is given in File List for an Android Application. 2. Design your user interface See Implementing a UI for details on elements of the Android screen. 3. Implement your Activity (this page) You will create one class/file for each screen in your application. Screens will inherit from an android.app class, typically android.app.Activity for basic screens, android.app.ListActivity for list screens, or android.app.Dialog for dialog boxes. You will implement the required callbacks that let you draw your screen, query data, and commit changes, and also perform any required tasks such as opening additional screens or reading data from the device. Common tasks, such as opening a new screen or reading data from the device, are described below. The list of files you ll need for your application are described in List of Files for an Android Application. 4. Build and install your package. The Android SDK has some nice tools for generating projects and debugging code. Implementing Activity Callbacks Android calls a number of callbacks to let you draw your screen, store data before pausing, and refresh data after closing. You must implement at least some of these methods. See Lifetime of a Screen to learn when and in what order these methods are called. Here are some of the standard types of screen classes that Android provides android.app.Activity - This is a standard screen, with no specialization. android.app.ListActivity - This is a screen that is used to display a list of something. It hosts a ListView object, and exposes methods to let you identify the selected item, receive callbacks when the selected item changes, and perform other list-related actions. android.app.Dialog - This is a small, popup dialog-style window that isn t intended to remain in the history stack. (It is not resizeable or moveable by the user.) Opening a New Screen Your Activity will often need to open another Activity screen as it progresses. This new screen can be part of the same application or part of another application, the new screen can be floating or full screen, it can return a result, and you can decide whether to close this screen and remove it from the history stack when you are done with it, or to keep the screen open in history. These next sections describe all these options. Floating or full? When you open a new screen you can decide whether to make it transparent or floating, or full-screen. The choice of new screen affects the event sequence of events in the old screen (if the new screen obscures the old screen, a different series of events is called in the old screen). See Lifetime of an Activity for details. Transparent or floating windows are implemented in three standard ways Create an app.Dialog class Create an app.AlertDialog class Set the Theme_Dialog theme attribute to @android style/Theme.Dialog in your AndroidManifest.xml file. For example activity class="AddRssItem" android label="Add an item" android theme="@android style/Theme.Dialog"/ Calling startActivity() or startSubActivity() will open a new screen in whatever way it defines itself (if it uses a floating theme it will be floating, otherwise it will be full screen). Opening a Screen When you want to open a new screen, you can either explicitly specify the activity class to open, or you can let the operating system decide which screen to open, based upon the data and various parameters you pass in. A screen is opened by calling startActivity and passing in an Intent object, which specifies the criteria for the handling screen. To specify a specific screen, call Intent.setClass or setClassName with the exact activity class to open. Otherwise, set a variety of values and data, and let Android decide which screen is appropriate to open. Android will find one or zero Activities that match the specified requirements; it will never open multiple activities for a single request. More information on Intents and how Android resolves them to a specific class is given in the Intent topic. Some Intent examples The following snippet loads the com.google.android.samples.Animation1 class, and passes it some arbitrary data. Intent myIntent = new Intent(); myIntent.component = "com.google.android.samples.Animation1"; myIntent.putExtra("com.google.android.samples.SpecialValue", "Hello, Joe!"); // key/value pair, where key needs current package prefix. startActivity(myIntent); The next snippet requests that a Web page be opened by specifying the VIEW action, and a URI data string starting with "http //" schema Intent myIntent = new Intent("android.intent.action.VIEW", "http //www.google.com"); myIntent.putExtra("com.google.android.samples.SpecialValue", "Hello, Joe!"); // key/value pair, where key needs current package prefix. Here is the intent filter from the AndroidManifest.xml file for com.google.android.browser intent-filter action value="android.intent.action.VIEW" / category value="android.intent.category.DEFAULT" / scheme value="http" / scheme value="https" / scheme value="file" / /intent-filter Android defines a number of standard values, for instance the action constants defined by Intent. You can define custom values, but both the caller and handler must use them. See the intent-filter tag description in AndroidManifest.xml File Details for more information on the manifest syntax for the handling application. Returning a Result from a Screen A window can return a result after it closes. This result will be passed back into the calling Activity s onActivityResult() method, which can supply an integer result code, a string of data, and a Bundle of arbitrary data, along with the request code passed to startSubActivity(). Note that you must call the startSubActivity() method that accepts a request code parameter to get this callback. The following code demonstrates opening a new screen and retrieving a result. // Open the new screen. public void onClick(View v){ // Start the activity whose result we want to retrieve. The // result will come back with request code GET_CODE. Intent intent = new Intent(this, com.example.app.ChooseYourBoxer.class); startSubActivity(intent, CHOOSE_FIGHTER); } // Listen for results. protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras){ // See which child activity is calling us back. switch (resultCode) { case CHOOSE_FIGHTER // This is the standard resultCode that is sent back if the // activity crashed or didn t doesn t supply an explicit result. if (resultCode == RESULT_CANCELED){ myMessageboxFunction("Fight cancelled"); } else { myFightFunction(data, extras); } default break; } } // Class SentResult // Temporary screen to let the user choose something. private OnClickListener mLincolnListener = new OnClickListener(){ public void onClick(View v) { Bundle stats = new Bundle(); stats.putString("height","6\ 4\""); stats.putString("weight", "190 lbs"); stats.putString("reach", "74\""); setResult(RESULT_OK, "Lincoln", stats); finish(); } }; private OnClickListener mWashingtonListener = new OnClickListener() { public void onClick(View v){ Bundle stats = new Bundle(); stats.putString("height","6\ 2\""); stats.putString("weight", "190 lbs"); stats.putString("reach", "73\""); setResult(RESULT_OK, "Washington", Bundle); finish(); } }; Lifetime of the new screen An activity can remove itself from the history stack by calling Activity.finish() on itself, or the activity that opened the screen can call Activity.finishSubActivity() on any screens that it opens to close them. Listening for Button Clicks Button click and other UI event capturing are covered in Listening for UI Notifications on the UI Design page. Configuring General Window Properties You can set a number of general window properties, such as whether to display a title, whether the window is floating, and whether it displays an icon, by calling methods on the Window member of the underlying View object for the window. Examples include calling getWindow().requestFeature() (or the convenience method requestWindowFeature(some_feature)) to hide the title. Here is an example of hiding the title bar //Hide the title bar requestWindowFeature(Window.FEATURE_NO_TITLE); Storing and Retrieving State If your application is dumped from memory because of space concerns, it will lose all user interface state information such as checkbox state and text box values as well as class member values. Android calls Activity.onFreeze before it pauses the application. This method hands in a Bundle that can be used to store name/value pairs that will persist and be handed back to the application even if it is dropped from memory. Android will pass this Bundle back to you when it calls onCreate(). This Bundle only exists while the application is still in the history stack (whether or not it has been removed from memory) and will be lost when the application is finalized. See the topics for onFreeze(Bundle) and onCreate(Bundle) for examples of storing and retrieving state. Read more about the life cycle of an application in Lifetime of an Activity. Storing and Retrieving Larger or More Complex Persistent Data Your application can store files or complex collection objects, and reserve them for private use by itself or other activities in the application, or it can expose its data to all other applications on the device. See Storing, Retrieving, and Exposing Data to learn how to store and retrieve private data, how to store and retrieve common data from the device, and how to expose your private data to other applications. Playing Media Files Please see the document Android Media APIs for more details. Listening For and Broadcasting Global Messages, and Setting Alarms You can create a listening class that can be notified or even instantiated whenever a specific type of system message is sent. The listening classes, called intent receivers, extend IntentReceiver. If you want Android to instantiate the object whenever an appropriate intent notification is sent, define the receiver with a receiver element in the AndroidManifext.xml file. If the caller is expected to instantiate the object in preparation to receive a message, this is not required. The receiver will get a call to their IntentReceiver.onReceiveIntent() method. A receiver can define an intent-filter tag that describes the types of messages it will receive. Just as Android s IntentResolver will look for appropriate Activity matches for a startActivity() call, it will look for any matching Receivers (but it will send the message to all matching receiver, not the "best" match). To send a notification, the caller creates an Intent object and calls Activity.broadcastIntent() with that Intent. Multiple recipients can receive the same message. You can broadcast an Intent message to an intent receiver in any application, not only your own. If the receiving class is not registered using receiver in its manifest, you can dynamically instantiate and register a receiver by calling Context.registerReceiver(). Receivers can include intent filters to specify what kinds of intents they are listening for. Alternatively, if you expect a single known caller to contact a single known receiver, the receiver does not specify an intent filter, and the caller specifies the receiver s class name in the Intent by calling Intent.setClassName() with the recipient s class name. The recipient receives a Context object that refers to its own package, not to the package of the sender. Note If a receiver or broadcaster enforces permissions, your application might need to request permission to send or receive messages from that object. You can request permission by using the uses-permission tag in the manifest. Here is a code snippet of a sender and receiver. This example does not demonstrate registering receivers dynamically. For a full code example, see the AlarmService class in the ApiDemos project. Sending the message // We are sending this to a specific recipient, so we will // only specify the recipient class name. Intent intent = new Intent(this, AlarmReceiver.class); intent.putExtra("message","Wake up."); broadcastIntent(intent); Receiving the message Receiver AndroidManifest.xml (because there is no intent filter child, this class will only receive a broadcast when the receiver class is specified by name, as is done in this example) receiver class=".AlarmReceiver" / Receiver Java code public class AlarmReceiver extends IntentReceiver{ // Display an alert that we ve received a message. @Override public void onReceiveIntent(Context context, Intent intent){ // Send a text notification to the screen. NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nm.notifyWithText(R.id.alarm, "Alarm!!!", NotificationManager.LENGTH_SHORT, null); } } Other system messages You can listen for other system messages sent by Android as well, such as USB connection/removal messages, SMS arrival messages, and timezone changes. See Intent for a list of broadcast messages to listen for. Messages are marked "Broadcast Action" in the documentation. Listening for phone events The telephony package overview page describes how to register to listen for phone events. Setting Alarms Android provides an AlarmManager service that will let you specify an Intent to send at a designated time. This intent is typically used to start an application at a preset time. (Note If you want to send a notification to a sleeping or running application, use Handler instead.) Displaying Alerts There are two major kinds of alerts that you may display to the user (1) Normal alerts are displayed in response to a user action, such as trying to perform an action that is not allowed. (2) Out-of-band alerts, called notifications, are displayed as a result of something happening in the background, such as the user receiving new e-mail. Normal Alerts Android provides a number of ways for you to show popup notifications to your user as they interact with your application. Class Description app.AlertDialogorContext.showAlert() A popup alert dialog with two buttons (typically OK and Cancel) that take callback handlers. It can be created separately, or launched using the Application helper method Context.showAlert(). See the section after this table for more details. ProgressDialog A dialog box used to indicate progress of an operation with a known progress value or an indeterminate length (setProgress(bool)). See Views Progress Bar in ApiDemos for examples. Activity By setting the theme of an activity to android theme="android style/Theme.Dialog", your activity will take on the appearance of a normal dialog, floating on top of whatever was underneath it. You usually set the theme through the android theme attribute in your AndroidManifest.xml. The advantage of this over Dialog and AlertDialog is that Application has a much better managed lifecycle than dialogs if a dialog goes to the background and is killed, you cannot recapture state, whereas Application exposes a Bundle of saved values in onCreate() to help you maintain state. AlertDialog This is a basic warning dialog box that lets you configure a message, button text, and callback. You can create one by calling the Application helper method Context.showAlert(), as shown here. private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case ACCEPT_CALL answer(msg.obj); break; case BOUNCE_TO_VOICEMAIL voicemail(msg.obj); break; } } }; private void IncomingMotherInlawCall(Connection c) { String Text; // "Answer" callback. Message acceptMsg = Message.obtain(); acceptMsg.target = mHandler; acceptMsg.what = ACCEPT_CALL; acceptMsg.obj = c.getCall(); // "Cancel" callback. Message rejectMsg = Message.obtain(); rejectMsg.target = mHandler; rejectMsg.what = BOUNCE_TO_VOICEMAIL; rejectMsg.obj = c.getCall(); showAlert(null, "Phyllis is calling", "Answer", acceptMsg, true, rejectMsg); } Notifications Out-of-band alerts should always be displayed using the NotificationManager, which allows you to tell the user about something they may be interested in without disrupting what they are currently doing. A notification can be anything from a brief pop-up box informing the user of the new information, through displaying a persistent icon in the status bar, to vibrating, playing sounds, or flashing lights to get the user s attention. In all cases, the user must explicitly shift their focus to the notification before they can interact with it. The following code demonstrates using NotificationManager to display a basic text popup when a new SMS message arrives in a listening service, and provides the current message count. You can see several more examples in the ApiDemos application, under app/ (named notification*.java). static void setNewMessageIndicator(Context context, int messageCount){ // Get the static global NotificationManager object. NotificationManager nm = NotificationManager.getDefault(); // If we re being called because a new message has been received, // then display an icon and a count. Otherwise, delete the persistent // message. if (messageCount 0) { nm.notifyWithText(myApp.NOTIFICATION_GUID, // ID for this notification. messageCount + " new message" + messageCount 1 ? "s" "", // Text to display. NotificationManager.LENGTH_SHORT); // Show it for a short time only. } } To display a notification in the status bar and have it launch an intent when the user selects it (such as the new text message notification does), call NotificationManager.notify(), and pass in vibration patterns, status bar icons, or Intents to associate with the notification. Displaying a Progress Bar An activity can display a progress bar to notify the user that something is happening. To display a progress bar in a screen, call Activity.requestWindowFeature(Window.FEATURE_PROGRESS). To set the value of the progress bar, call Activity.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, level). Progress bar values are from 0 to 9,999, or set the value to 10,000 to make the progress bar invisible. You can also use the ProgressDialog class, which enables a dialog box with an embedded progress bar to send a "I m working on it" notification to the user. Adding Your Application to the Favorites List You can t. Only a user can add an application to the Favorites list. Adding Items to the Screen Menu Every Android screen has a default menu with default options, such as adding the activity to the favorites menu. You can add your own menu entries to the default menu options by implementing Activity.onCreateOptionsMenu or Activity.onPrepareOptionsMenu(), and adding Item objects to the Menu passed in. To handle clicks implement Activity.onOptionsItemSelected() to handle the click in your Activity class. You may also pass the Item object a handler class that implements the Runnable class (a handler) but this is less efficient and discouraged. An application receives a callback at startup time to enable it to populate its menu. Additionally, it receives callbacks each time the user displays the options menu to let you perform some contextual modifications on the menu. To populate the menu on startup, override Activity.onCreateOptionsMenu; to populate it when the menu is called (somewhat less efficient), you can override Activity.onPrepareOptionsMenu(). Each Activity has its own menu list. Menu items are displayed in the order added, though you can group them as described in the Menu.add documentation. The following code snippet adds three items to the default menu options and handles them through the overridden Activity.onOptionsItemSelected() method. You can show or hide menu items by calling setItemShown() or setGroupShown(). // Called only the first time the options menu is displayed. // Create the menu entries. // Menu adds items in the order shown. @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Parameters for menu.add are // group -- Not used here. // id -- Used only when you want to handle and identify the click yourself. // title menu.add(0, 0, "Zoom"); menu.add(0, 1, "Settings"); menu.add(0, 2, "Other"); return true; } // Activity callback that lets your handle the selection in the class. // Return true to indicate that you ve got it, false to indicate // that it should be handled by a declared handler object for that // item (handler objects are discouraged for reasons of efficiency). @Override public boolean onOptionsItemSelected(Menu.Item item){ switch (item.getId()) { case 0 showAlert("Menu Item Clicked", "Zoom", "ok", null, false, null); return true; case 1 showAlert("Menu Item Clicked", "Settings", "ok", null, false, null); return true; case 2 showAlert("Menu Item Clicked", "Other", "ok", null, false, null); return true; } return false; } You can add key shortcuts by calling the Item.setAlphabeticShortcut() or Item.setNumericShortcut() methods, as demonstrated here to add a "C" shortcut to a menu item thisItem.setAlphabeticShortcut(0, c ); Adding Submenus Add a submenu by calling Menu.addSubMenu(), which returns a SubMenu object. You can then add additional items to this menu. Menus can only be one level deep, and you can customize the appearance of the submenu menu item. @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Parameters for menu.add are // group -- Not used here. // id -- Used only when you want to handle and identify the click yourself. // title menu.add(0, 0, "Send message"); menu.add(0, 1, "Settings"); menu.add(0, 2, "Local handler"); menu.add(0, 3, "Launch contact picker"); // Add our submenu. SubMenu sub = menu.addSubMenu(1, 4, "Days of the week"); sub.add(0, 5, "Monday"); sub.add(0, 6, "Tuesday"); sub.add(0, 7, "Wednesday"); sub.add(0, 8, "Thursday"); sub.add(0, 9, "Friday"); sub.add(0, 10, "Saturday"); sub.add(0, 11, "Sunday"); return true; } Adding yourself to menus on other applications You can also advertise your Activity s services so that other Activities can add your activity to their own option menu. For example, suppose you implement a new image handling tool that shrinks an image to a smaller size and you would like to offer this as a menu option to any other Activity that handles pictures. To do this, you would exposes your capabilities inside an intent filter in your manifest. If another application that handles photos asks Android for any Activities that can perform actions on pictures, Android will perform intent resolution, find your Activity, and add it to the other Activity s options menu. The offering application The application offering the service must include an intent-filter element in the manifest, inside the activity tag of the offering Activity. The intent filter includes all the details describing what it can do, such as a type element that describes the MIME type of data that it can handle, a custom action value that describes what your handling application can do (this is so that when it receives the Intent on opening it knows what it is expected to do), and most important, include a category filter with the value android.intent.category.ALTERNATIVE and/or android.intent.category.SELECTED_ALTERNATIVE (SELECTED_ALTERNATIVE is used to handle only the currently selected element on the screen, rather than the whole Activity intent. Here s an example of a snip of a manifest that advertises picture shrinking technology for both selected items and the whole screen. activity class="PictureShrink" !-- Handling class -- intent-filter label="Shrink picture" !-- Menu label to display -- action value="com.example.sampleapp.SHRINK_IT" / type value="image/*" / !-- MIME type for generic images -- category value="android.intent.category.ALTERNATIVE " / category value="android.intent.category.SELECTED_ALTERNATIVE" / /intent-filter /activity The menu-displaying application An application that wants to display a menu that includes any additional external services must, first of all, handle its menu creation callback. As part of that callback it creates an intent with the category Intent.ALTERNATIVE_CATEGORY and/or Intent.SELECTED_ALTERNATIVE, the MIME type currently selected, and any other requirements, the same way as it would satisfy an intent filter to open a new Activity. It then calls menu.addIntentOptions() to have Android search for and add any services meeting those requirements. It can optionally add additional custom menu items of its own. You should implement SELECTED_ALTERNATIVE in onPrepareOptionsMenu() rather than onCreateOptionsMenu(), because the user s selection can change after the application is launched. Here s a code snippet demonstrating how a picture application would search for additional services to display on its menu. @Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); // Create an Intent that describes the requirements to fulfill to be included // in our menu. The offering app must include a category value of Intent.ALTERNATIVE_CATEGORY. Intent intent = new Intent(null, getIntent().getData()); intent.addCategory(Intent.ALTERNATIVE_CATEGORY); // Search for, and populate the menu with, acceptable offering applications. menu.addIntentOptions( 0, // Group 0, // Any unique IDs we might care to add. MySampleClass.class.getName(), // Name of the class displaying the menu--here, its this class. null, // No specifics. intent, // Previously created intent that describes our requirements. 0, // No flags. null); // No specifics. return true; } Display a Web Page Use the webkit.WebView object. Binding to Data You can bind a ListView to a set of underlying data by using a shim class called ListAdapter (or a subclass). ListAdapter subclasses bind to a variety of data sources, and expose a common set of methods such as getItem() and getView(), and uses them to pick View items to display in its list. You can extend ListAdapter and override getView() to create your own custom list items. There are essentially only two steps you need to perform to bind to data 1. Create a ListAdapter object and specify its data source 2. Give the ListAdapter to your ListView object. That s it! Here s an example of binding a ListActivity screen to the results from a cursor query. (Note that the setListAdapter() method shown is a convenience method that gets the page s ListView object and calls setAdapter() on it.) // Run a query and get a Cursor pointing to the results. Cursor c = People.query(this.getContentResolver(), null); startManagingCursor(c); // Create the ListAdapter. A SimpleCursorAdapter lets you specify two interesting things // an XML template for your list item, and // The column to map to a specific item, by ID, in your template. ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, // Use a template that displays a text view c, // Give the cursor to the list adapter new String[] {People.NAME} , // Map the NAME column in the people database to... new String[] {"text1"}); // The "text1" view defined in the XML template setListAdapter(adapter); See view/List4 in the ApiDemos project for an example of extending ListAdapter for a new data type. Capture Images from the Phone Camera You can hook into the device s camera onto your own Canvas object by using the CameraDevice class. See that class s documentation, and the ApiDemos project s Camera Preview application (Graphics/Camera Preview) for example code. Handling Expensive Operations in the UI Thread Avoid performing long-running operations (such as network I/O) directly in the UI thread — the main thread of an application where the UI is run — or your application may be blocked and become unresponsive. Here is a brief summary of the recommended approach for handling expensive operations 1. Create a Handler object in your UI thread 2. Spawn off worker threads to perform any required expensive operations 3. Post results from a worker thread back to the UI thread s handler either through a Runnable or a Message 4. Update the views on the UI thread as needed The following outline illustrates a typical implementation public class MyActivity extends Activity { [ . . . ] // Need handler for callbacks to the UI thread final Handler mHandler = new Handler(); // Create runnable for posting final Runnable mUpdateResults = new Runnable() { @Override public void run() { updateResultsInUi(); } }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); [ . . . ] } protected void startLongRunningOperation() { // Fire off a thread to do some work that we shouldn t do directly in the UI thread Thread t = new Thread() { public void run() { mResults = doSomethingExpensive(); mHandler.post(mUpdateResults); } }; t.start(); } private void updateResultsInUi() { // Back in the UI thread -- update our UI elements based on the data in mResults [ . . . ] } } For further discussions on this topic, see Developing Responsive Applications and the Handler documentation. Selecting, Highlighting, or Styling Portions of Text You can highlight or style the formatting of strings or substrings of text in a TextView object. There are two ways to do this If you use a string resource, you can add some simple styling, such as bold or italic using HTML notation. So, for example, in res/values/strings.xml you could declare this resource string id="@+id/styled_welcome_message" We are b i so /i /b glad to see you. /string /resources To style text on the fly, or to add highlighting or more complex styling, you must use the Spannable object as described next. To style text on the fly, you must make sure the TextView is using Spannable storage for the text (this will always be true if the TextView is an EditText), retrieve its text with getText(), and call setSpan(Object, int, int, int), passing in a new style class from the android.text.style package and the selection range. The following code snippet demonstrates creating a string with a highlighted section, italic section, and bold section, and adding it to an EditText object. // Get our EditText object. EditText vw = (EditText)findViewById(R.id.text); // Set the EditText s text. vw.setText("Italic, highlighted, bold."); // If this were just a TextView, we could do // vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE); // to force it to use Spannable storage so styles can be attached. // Or we could specify that in the XML. // Get the EditText s internal text storage Spannable str = vw.getText(); // Create our span sections, and assign a format to each. str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); List of Files for an Android Application The following list describes the structure and files of an Android application. Many of these files can be built for you (or stubbed out) by the activityCreator.py application shipped in the tools/ menu of the SDK. See Building an Android Sample Application for more information on using activityCreator.py. MyApp/ AndroidManifest.xml (required) Advertises the screens that this application provides, where they can be launched (from the main program menu or elsewhere), any content providers it implements and what kind of data they handle, where the implementation classes are, and other application-wide information. Syntax details for this file are described in AndroidManifest.xml. src//myPackagePath/.../MyClass.java (required) This folder holds all the source code files for your application, inside the appropriate package subfolders. res/ (required) This folder holds all the resources for your application. Resources are external data files or description files that are compiled into your code at build time. Files in different folders are compiled differently, so you must put the proper resource into the proper folder. (See Resources for details.) anim/animation1.xml... (optional) Holds any animation XML description files that the application uses. The format of these files is described in Resources. drawable/some_picture.pngsome_stretchable.9.pngsome_background.xml... (optional) Zero or more files that will be compiled to android.graphics.drawable resources. Files can be image files (png, gif, or other) or XML files describing other graphics such as bitmaps, stretchable bitmaps, or gradients. Supported bitmap file formats are PNG (preferred), JPG, and GIF (discouraged), as well as the custom 9-patch stretchable bitmap format. These formats are described in Resources. layout/screen_1_layout.xml... (optional) Holds all the XML files describing screens or parts of screens. Although you could create a screen in Java, defining them in XML files is typically easier. A layout file is similar in concept to an HTML file that describes the screen layout and components. See Implementing a UI for more information about designing screens, and Layout Resources for the syntax of these files. values/arraysclasses.xmlcolors.xmldimens.xmlstrings.xmlstyles.xmlvalues.xml (optional) XML files describing additional resources such as strings, colors, and styles. The naming, quantity, and number of these files are not enforced--any XML file is compiled, but these are the standard names given to these files. However, the syntax of these files is prescribed by Android, and described in Resources. xml/ (optional) XML files that can be read at run time on the device. raw/ (optional) Any files to be copied directly to the device.
https://w.atwiki.jp/testlink/pages/28.html
ユーザーマニュアル TestLink version 1.7 Copyright 2004 - 2007 TestLink Community Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. The license is available in "GNU Free Documentation License" homepage. --- 翻訳 Testing Engineer s Forum (TEF) - ソフトウェアテスト技術者交流会 - 「TEF有志によるTestLink日本語化プロジェクト」部会 --- 1 一般情報 TestLinkはWebベースのテスト管理システムです。このマニュアルは、TestLinkを使用するために必要な操作手順、用語、構成などについて説明しています。インストール時に必要となる、システム要件、インストール手順、システム構成方法などは、インストールマニュアルをご参照ください。最新のドキュメントは、TestLinkフォーラム(www.teamst.org)または、SourceForge上のプロジェクトページ(testlink.sourceforge.net)からダウンロードすることができます。 (訳注 日本語で書かれた情報については http //www38.atwiki.jp/testlink/ または http //sourceforge.jp/projects/testlinkjp をご参照ください。) 1.1. TestLinkコンポーネントの全体構造 TestLinkの基盤となるコンポーネントは3種類あります。それは、テストプロジェクト、テスト計画、そしてユーザです。これ以外の全てのデータは、この基盤要素の関連もしくは属性となります。それではまず始めに、この文書およびソフトウエアテスト分野で使用される用語について定義します。 1.2. TestLinkで使用する用語 テストケースは、TestLink上でのテスト作業を表す最小単位であり、ステップ(アクション、シナリオとも呼ばれます)と実行結果を含んでいます。 テストスイートは、テストケースをグループ化するための単位です。これにより、テスト仕様を論理的に分割することができます。 テストスイートは、TestLinkバージョン1.6以前にコンポーネントやカテゴリと呼ばれていたものに対応します。 テスト計画は、テストケースを実行する時に作成されます。テスト計画は、ひとつまたは複数のテストプロジェクト上のテストケースから構成されます。テストケースには、製品ビルド、マイルストーン、テストの割り当て、そしてテスト結果が含まれます。 TestLinkの起動中は、必ず1つ以上のテストプロジェクトが存在しています。テストプロジェクトは、いくつものバージョンに更新されていきます。テストプロジェクトには、テストケースが登録されたテスト仕様、要件仕様、キーワードが含まれます。プロジェクトに参加するユーザには役割が設定されます。 TestLinkのユーザには、TestLinkの機能を使用して定義された役割が与えられます。詳しくはユーザ管理の章をご参照ください。図1はユーザの役割に関連する一般的な作業を表しています。 1.3. TestLinkを用いた作業の流れの例 1. 管理者がテストプロジェクト「ファーストフード」を作成し、「リーダー」権限をもったAdamと、「テスト主任」権限をもったBelaとい2. リーダーであるAdamが、ソフトウェア要件をインポートし、空のテストケースを作成します。 3. テスト担当者であるBelaが各テストケースのステップ(テストシナリオ)を記述し、テストスイートを用いてそれらを分類します。 4. Adamはキーワード「回帰」を作成し、10種類のテストケースにアサインします。 5. Adamはテスト計画「フィッシュ チップス」とビルド「フィッシュ 0.1」を登録し、キーワード「回帰」がアサインされたテストケースを登録します。 6. AdamとBelaはテストを実行し、5ケースで成功、1ケースで失敗、4ケースでブロックというように結果を記録します。 7. 開発者が新たなビルド「フィッシュ 0.2」を作成し、Belaが以前失敗もしくはブロックしたテストケースのみを実行します。これらのテストが成功したとします。 8. チームのマネージャもテスト結果を見たいことでしょう。ログインページでアカウントを追加できることを、管理者はマネージャに説明します。マネージャがアカウントを作成すると、デフォルトで「ゲスト」権限が与えられ、テストケースと実行結果を閲覧することができます。マネージャは、ビルド「フィッシュ 0.1」で問題があったことと、最終的に全てのテストケースが成功したことを確認できるでしょう。しかしながら、「ゲスト」権限しかないマネージャは、これらのデータを変更することはできません。 2. テスト仕様 TestLinkでは、テストケースの構造をテストスイートとテストケースに分解します。このレベルはアプリケーションを通して保持されます。 2.1. テストケースの作成 テスターは少なくともテストスイートとテストケースという構造に従わなければなりません。最初にテストプロジェクトに対して、ひとつか、それ以上のテストスイートを作成します。印刷に使用可能な説明を記述することができます。テストスイートは、別のテストスイートを含むことができます。 ユーザは、テストケースをコピーしたり、移動したりすることができます。 テストケースは次に示す部分を持っています。 タイトル:短い概要もしくは略号を含めることができます。(例:TL-USER-LOGIN) 要約:簡潔に、概要のようなもの ステップ:テストシナリオを記述します(入力操作)、事前条件や事後処理に関する情報を含めることもできます。 実行結果:確認事項や、期待結果に関して記述します。 テストケース番号はTestLinkによる自動採番で、ユーザが変更することは出来ません。 このIDは、テストプロジェクトに関わらず、テストケースが作成されるとき、システム全体でグローバルなカウンタが使用されているのを意味します。 テストケース - 有効属性 もし、複数のバージョンのテストケースが存在する場合、有効/無効を示す新しい属性があったほうが親切です。これは次のように使われます。 すべでのテストケースは、有効として作成されます。無効なテストケースのバージョンは「テスト計画へのテスト計画の追加」では、利用できません。これは、テストデザイナーにとっては便利な機能です。彼らはテストケースのバージョンを編集し、テスト計画で利用可能になった時に、完了したと判断して、ステータスを有効に変更することができます。 一度、テストケースのバージョンがテスト計画に関連付けられ、結果を持つと、無効にすることはできなくなります。 次のことに注意してください。テストプロジェクト名(この例では、toaster_x15)のそばの数字は2ですが、テストプロジェクトは3つのテストケースがあります。これは、テストケース1が無効なためカウントされていないからです。 2.2. テストケースの削除 テストケースとテストスィートはテスト計画からリーダの権限を持っている場合には削除することができます。この操作はテスト計画を最初に作成して、まだ結果が何もない場合には有効です。しかしながら、テストケースの削除はひもづくすべての実行結果を失うかもしれません。このことから、極端な警告がこの機能を使用するために推奨されています。 2.3. 要件との紐付け テストケースは、ソフトウエア要件、システム要件とn対nで関連付けられます。この機能は、テストプロジェクトで実現されています。ユーザは、テストケースと要件をメインメニューの要件の関連付けで割り当てることができます。 3.キーワード 3.1 キーワードを使う キーワードは、テストケースの分類において、ユーザにもうひとつのレベルを提供する為の機能です。 キーワードはテスト仕様の中で何らかの特性をもつテストケースのコレクションをサポートし、 あなたはそれを定義する為に使う事ができます。 例 回帰テストの為のセット 検討済みのテストケース 単一プラットフォームに向けたテストケース 3.2 キーワードの作成 キーワードはmgt_modify_key権限を持つユーザのみが作成できます。 この権限は、現在リーダーのみが持っています。ひとつ、あるいはキーワードの グループが作成されたら、ユーザーはそれをテストケースに割り当てる事ができます。 3.3. キーワードの割り当て テストケースへのキーワード割り当ては、キーワード割り当て画面[the assign keyword screen](一括)、 あるいはテストケース管理(個々)から行われます。 3.4. キーワードによるフィルタ ユーザがキーワードによってフィルタ可能なもの テスト仕様書からテストケースを探す。 テストスイートにテストケースのグループを加える。 テストスクリーンを実行する。 4. 要件に基づくテスト 4.1 イントロダクション テスターは、システムが仕様通りに作られていることを証明するために、 要件に基づくテストを行います。 全ての要件に対して複数のテストケースが設計されます。 テスト実行が終わると、テストマネージャーは、実行結果と要件の網羅度を報告します。 この情報に基づき、顧客とステークホルダーは、システムを 次のテストフェーズに移行、もしくは稼動させてもよいかを決定します。 システムが仕様通りに作られていることを保証するために、 テストマネージャーはリスクの組み合わせと要件に基づくテストを行います。 それは、システムが仕様通りに作られていることを、顧客とステークホルダー に見えるようにするためのものです。 要件に基づくテストの優位性: ・ リスクと要件を結びつけると、曖昧さや要件もれが明確になります。 ・ システムの最重要部分へ最初に焦点をあてられるので、優先度の高いリスクを カバーすることができます。 ・ 顧客やステークホルダーと同じ言葉でコミュニケーションできます。 そのため、テストプロジェクトの状態の報告がよりわかりやすくなるので もっとテストするか、リスクをとるか、を判断しやすくなります。 ・ リスクと優先度は納期の圧力のかかったテストプロジェクトでは交渉の対象になります。 リスクとは、テストプロジェクトで何をカバーする必要があって、何を 延期できるかということです。 リスクと要件に基づいたテストは、テストプロジェクトをより管理しやすくします。 顧客やステークホルダーとのコミュニケーションが改善されます。 テストマネージャはリスクと優先度に基づいたテストを始めます。 プロセスは合理化され、その結果、高品質の結果を得られます。 4.2. 有効性 機能を有効にするのはテストプロジェクトのレベルで行います。 すなわち、管理者はそのテストプロジェクトを有効にしなければなりません。 (メインウィンドウのテストプロジェクトのリンクを編集してください) そうしないとリンクは見えません。 これは利用者レベルを分けるためのものです。 最も一般的な役割では、要件を見ることはできても変更はできません。 詳細はユーザ管理の章を参照してください。 4.3. 要件仕様 要件はいくつかのシステム/ソフトウェア/ユーザ要件仕様に まとめられます。 要件文書の作成: 1. メインウィンドウの要件仕様をクリックします。 要件仕様リストのウィンドウが開かれます。 2. 文書を作成するために作成ボタンを押します。 3. 題名、スコープ、最終的なテストケースの数を書き換えます。 最後のパラメータは統計のために使われます。 もし、有効な要件文書があれば、それだけで使えますが、 入力した時点で TestLink の全ての要件が有効であるとは限りません。 デフォルト値 n/a は、仕様の中で現在までに使われた要件の 数を意味します。 検討中 begin 3. 題名、スコープ、最終的な要件の数を書き換えます。 最終的な要件の数は統計のために使われます。 全ての要件を登録しないうちにTestLinkを実行する場合に使うものです。 最終的な要件の数が設定されない場合には、現在登録されている要件の 数が使われます。 検討中 end 4. データベースにデータを追加するために作成ボタンを押します。 要件仕様リストのウィンドウの表の中に新しく作成した文書の題名が 表示されます。 5. 次の作業をするために文書の題名をクリックします。 要件仕様ウィンドウが開かれます。 各々の要件仕様は自分自身の統計値と 関係するデータが含まれたレポートを持っています。 "要件仕様" ウィンドウの全ての仕様は "印刷" ボタンを使って 印刷することができます。 管理者は定義ファイルの著作権と部外秘の表示で会社を定義できます。 4.4. 要件 個々の要件は、題名、スコープ(html 形式)、状態を持っています。 題名はユニークである必要はなく、最大半角100文字までです。 スコープパラメータはHTML 形式のテキストです。 状態は、有効(VALID)かテスト不可(NOT_TESTABLE)の値を持ちます。 テスト不可(NOT_TESTABLE)の要件は測定には含まれません。 要件はCSVファイルのインポートやTestLink インターフェース経由で 手動で生成、修正、削除できます。 4.4.1. 要件のインポート TestLink は2タイプの CSV 形式をサポートしています。 一つめのシンプルタイプは、各行に題名とスコープを含みます。 二つめの Doors からエクスポートするタイプでは、ヘッダと 選択された完全なフィールドを見つけようとします。 題名をインポートしてから比較して、衝突を回避します。 二つ目のタイプでは、以下の3つの方法が選択できます。 ・同じ題名の要件をインポートして更新する。 ・同じ題名の要件をインポートして新しいものを作成する。 ・同じ題名の要件はインポートしないようにする。 4.4.2. 要件とテストケースとの関係 テストケースはソフトウェア/システムの要件と多対多で関連づけられます。 すなわち、いくつものテストケースを一つの要件に割り当てたり、 複数の要件を一つのテストケースでカバーすることができます。 ユーザはメインウィンドウの割り当て要件リンク経由で 要件をテストケースに割り当てられます。 テスト仕様のカバレッジは、要件仕様ウィンドウの解析ボタンを 押すことで見ることができます。 4.4.3. 要件に基づく報告 「テストレポートとメトリクス」メニューに移動すると 要件に基づいた各種報告のリンクが表示されます。 現在の要件仕様の要件とテスト計画は、この報告で解析されます。 全テストケースの最新結果(テスト計画で有効な)は 個々の要件にも反映されます。 異なる結果が一つの要件に適用されるような場合は 優先順位の高い結果が適用されます。 優先順位は、上から失敗、ブロック、未実行、パスの順です。 要件カバレッジの例 要件は三件のテストケースでカバーされている。 これらの二つは現在のテストスイートに含まれている。 ビルド1では、一つはパスして、もう一つは未テストである。 現在の要件の全体の結果:未実行。 ビルド2で二つめのテストケースがテストされてパスした場合は 要件に適用される結果はパスとなる。 5. テストプロジェクト テストプロジェクトはTestLinkの基礎です。あなたの会社のリリース版テストプロジェクトは、時間がたつにつれてそれらの特徴や機能に変更がありますが、ほとんどが同じまま残ります。 テストプロジェクトは要件ドキュメンテーション、テスト仕様書、テスト計画、そしてキーワードを含んでいます。 5.1. 新規テストプロジェクトの作成 新規テストプロジェクトの作成は"管理者"権限を必要とします。各テストプロジェクトの名前は重複しないようにする必要があります。目視によりそれらを区別するために背景色をテストプロジェクトテンプレートに割り当てることができます。 新規プロジェクトを作成するとき注意すること たくさんのテストケースが孤立する、またはテストケースがシステムから削除されてしまうので、システムからテストプロジェクトを消すことは推奨しません。 テスト計画はある一定の時点におけるテストプロジェクトのテストを表します。その結果、テスト計画はテストプロジェクト上のテストケースから生成されます。 TestLinkはテストプロジェクトにCSVデータのインポートをすることをサポートしています。これは後述のインポートのセクションでより詳しく説明します。 5.2. テストプロジェクトの編集と削除 テストプロジェクトの編集は"管理者"権限を必要とします。ユーザは、テストプロジェクト名、背景色、要件管理機能の有効性の変更が可能です。 特権を持つユーザは、使われなくなったテストプロジェクトを無効にさせることもできます。これにより、無効なテストプロジェクトはトップナビゲーションバー上のリストに表示されなくなります(ただし、管理者の場合、このようなテストプロジェクトは、リストに * のマークがついた状態で表示されます)。 ユーザはテストプロジェクトの削除も可能です。この行為は、データベースからすべての関連データをも削除します。この行為は元に戻せません。削除の代わりに無効にすることを強くお勧めします。 6. テスト計画 テスト計画は、名称、説明、選出したテストケースの収集、ビルド、テスト結果、マイルストーン、テスターの割り当て、優先度の定義を含んでいます。 6.1. 新規テスト計画の作成 テスト計画はリーダー権限を持ったユーザにより、“テスト計画作成”ページ(“テスト計画作成”リンク)から作成できます。 テスト計画はテストケース実行の基礎です。テスト計画は、特定の時点においてTestプロジェクトからインポートされたテストケースで作られます。テスト計画はリーダー権限を持ったユーザのみ作成可能です。他のテスト計画からテスト計画を作成することも可能です。これで、ユーザは必要になった時点でのテストケースからテスト計画を生成します。パッチのためのテスト計画を作成するとき、これが必要となるかもしれません。ユーザがテスト計画を見るためには、適当な権限を持たねばなりません。権限は(リーダーにより)ユーザ定義/プロジェクト権限のセクションで割り当てることができます。ユーザにプロジェクトが見られないと言われたとき、このことを思い出してください。それくらい重要なことです。 6.2. ビルド リーダー権限を持ったユーザは、メインページの“ビルドの管理”リンクをたどることが可能です。 ビルドはソフトウェアの特定のリリースです。会社における各プロジェクトは、たぶん多くの異なったビルドで構成されています。TestLinkでは、実行はビルドとテストケースの両方で構成されます。もしプロジェクトにひとつもビルドを作成していなければ、実行画面はあなたに実行を許可しないでしょう。また、メトリクス画面は完全に空白になるでしょう。 現在、ビルドは編集できません。現存のビルドの表にある“ゴミ箱”アイコンをクリックすることでビルドを削除することができます。 6.3. テスト計画の削除 テスト計画はリーダー権限を持ったユーザにより削除できます。テスト計画を永久に削除すると、テスト計画と、テストケースやテスト結果など対応するデータのすべてとが、両方とも削除されます。これは特別なケースのためだけにとっておくべきです。 代わりに、テスト計画は同ページ上で無効にさせる(“メイン” ページの選択メニュー上に表示しないようにする)ことが可能です。 7. テスト計画に実装されているもの 7.1. 新規テストケースの追加 ステップと期待結果が含まれたテストケースが追加されます。 複数のテストプロジェクトからのデータを1つのテスト計画に追加することができます。キーワード(ナビゲーションシートで調整される)でテスト仕様書データをフィルターにかけることができます。 データがいったんテスト計画にリンクされると、それはチェック印でマークされるでしょう。既にテストケースをインポート済みであれば、再びそれをインポートしようとしても、それを無視するでしょう。 7.2. テスト計画からテストケースを削除する "テストケースの削除"ページから、リーダー権限を持つユーザは、テスト計画からテストケースとテストスイートを削除することができます。結果が保存されていないため、初回のテスト計画作成のときには、データの削除も役に立ちます。しかしながら、テストケースを削除することは、それらに関連しているすべての結果の損失をもたらすでしょう。したがって、この機能を使用するときには、極度に用心することをお勧めします。 左側のシートのツリーで、テスト計画における現在のテストケースだけを表示します。 7.3. 優先度 TestLinkはテストケースのオーナーシップと優先度を割り当てる能力をリーダー権限を持ったユーザに与えます。一般的なリスクはテストスイートレベルで行われます。 リスクレベルは low, medium, high そして重要度は 3, 2, 1 です。ユーザは優先度 A,B,C としてリスクと重要度(L1, L2, L3, M1, H2, M3, H1, H2, H3)の組み合わせを格付けすることができます。 リスク、重要度、オーナーシップ、および優先度を割り当てるのは、すべて任意であり、メトリクス画面では優先度Bをデフォルトとするでしょう。 7.4. テスト実行の割り当て テスト実行の割り当ては実行とメトリクス画面の両方に影響します。実行画面では、ユーザが割り当てられたことにより実行可能なテストケースをソートする機能を持っています。メインメトリクス画面には、テスト担当者が残しているテストケースを示すテーブルがあります。もしテスト担当者に割り当てられたテストケースが無ければ、デフォルトでは何もありません。 また、これらのメトリクスが有効にされるなら、テスト担当者はメインページにおいて、自分が実行したテストのメトリクスを見ることができます(インストールマニュアル参照)。 8. テストの実行 8.1. 概要 テストの実行は以下の条件が満たされると有効になります。 1.テスト仕様が作成された。 2.テスト計画が作成された。 3.テスト計画にテストケースが追加された。 4.ビルドが作成された。 5.テスト計画がテスターに割り当てられた(割り当てがされなければテスターはテスト計画のページに移動することはできません)。 メインページで要求されたテスト計画を選択して、 テストの実行 リンクをクリックします。左画面がツリー画面で表示され、テストケーススイートの設定ができます。ここではフィルタリングやビルドの定義ができます。 8.2. ナビゲーション ナビゲーション画面は フィルタ&設定 とテストケーススイートが表示されたツリー型のメニューから構成されます。 8.2.1. テストケースのフィルタリング このテーブルでは洗練されたナビゲーションを通して、テストの実行前にユーザーがテストケースをフィルタリングできます。 テスタ テスタでテストケースをフィルタリングします。 キーワード キーワードでテストケースをフィルタリングします。テストケースの作成・編集・削除時かあるいは”キーワードの割り当て”で複数のテストケースにキーワードを割り当てます。キーワードはテストリーダにより作成・編集・削除できます。それぞれのテスタはキーワードの割り当てができます。 結果 結果でテストケースをフィルタリングします。「結果」はテストケースの実行時にそのビルドで何が発生したかを示します。結果は次のいづれかです。成功・失敗・ブロック・実行されてない。 8.2.2. テストビルドの定義 ビルドでテストケースをフィルタリングします。ビルドはテストの追跡をするための基本の構成になります。それぞれのテストケースは一つのビルドにつき一回実行されます。ビルドはテストリーダにより”新しいビルドの作成”ページで作成されます。 8.2.3. ツリー型メニュー ツリー型メニューは結果により色分けされてテストケースを表示します。 色付けされたメニュー デフォルトではツリーはドロップダウンボックスで選択されたビルドに対して、結果でソートされています。. ビルドによる色付けされたテストケースの例 ユーザはビルド2をドロップダウンボックスから選択し、"最近"チェックボックスを有効にしていません。ビルド2からのすべてのテストケースがその状況とともに表示されます。もしテストケース1がビルド2で成功しているならば、緑で表示されます。 ”最終結果”はメニューを最近のテスト結果により色付けします。 最近のテスト結果により色づけされたテストケースの例 ユーザはビルド2をドロップダウンボックスから選択し、"最近"チェックボックスを有効にしています。ビルド2からのすべてのテストケースがその最新状況とともに表示されます。もしテストケース1がビルド3で成功しているけれども、ユーザがビルド2を選択している場合には、緑で表示されます。 8.3. 実行 8.3.1. テストステータス テスト実行は、結果(成功、失敗、ブロック)を特定のビルドのテストケースに割り振リます。 ブロック されたテストケースは何らかの理由によりテストすることができません(例 構成の問題より機能的なテストを実行できないなど)。 8.3.2. テスト結果の挿入 テスト結果の画面は、適当なテストスイートもしくはテストケースをナビゲーション画面でクリックすることで表示されます。タイトルに現在のビルドとオーナーが表示されます。色づけされたバーはテストケースのステータスを示します。黄色はテストケースのテストシナリオを含みます。 Version1.5ではテスト仕様のテストケースが更新されたか削除されたかの表示機能はサポートされていません。 更新されたテストケース TL1.0.4ではフラグにより表示されましたが、Version1.6ではこの機能がありません。ユーザが適切な権限を持っていれば、メインページから"テストケースの更新”ページに移動することができます。 もし変更があった(新しいバージョンであるか、削除された)場合、ユーザがテストケースを更新する必要はありません。 9. カスタムフィールド カスタムフィールドはシステムレベルで定義をします。例)カスタムフィールドを同じフィールドIDで定義することはできません。カスタムフィールドを作成した後に、使用したいテストプロジェクトへ割り当てる必要があります。これはMantisモデルに基づきます カスタムフィールドはMantis(http //www.mantisbt.org/)とdotproject(http //www.dotproject.net/)の両方のモデルの機能を使って実装されています。 表示/変更属性 デザイン時の表示 カスタムフィールドがテストケース仕様で表示されます。 デザイン時の変更 ユーザはテストケース仕様でカスタムフィールドの値を割り当て・変更できます。 実行時の表示 カスタムフィールドはテストケースの実行時に表示されます。 実行時の変更 ユーザはテストケースの実行時にカスタムフィールドの値を割り当て・変更できます。 割り当てられた値は保存されます。 例 1. カスタムフィールド 追加備考 型 string テストスイートで利用できます。編集はテストケース仕様でのみできます。 ただしテスト実行時に表示されることで役に立てます。 デザイン時の表示 = YES デザイン時の変更 = YES 実行時の表示 = YES 実行時の変更 = NO 例 2. カスタムフィールド オペレーションシステム 型 list テストケースで利用できます。テストケースデザインでない場合には、テストケースの実行時のみ編集できます。 デザイン時の表示 = NO デザイン時の変更 = NO 実行時の表示 = YES 実行時の変更 = NO 10. テストレポートとメトリクス レポートとメトリクスはメインページの"結果"または"テストレポートとメトリクス"をクリックすることにより表示することができます。レポートとメトリクスは現在選択されているテスト計画を対象にしており、複数のテスト計画を対象にすることは現バージョンではできません。結果ページを表示する前にメインページで対象とするテスト計画が選択されているか確認してください。ユーザーに表示されるページは左枠と右枠のページで構成されています。 左枠のページからどのようなレポートを実行して表示するか選択することができます。 右枠のページには各レポート毎の説明と使用方法が表示されます。 左枠のページからは次の項目を設定することができます。 アクティブビルド "アクティブビルド"の項目を設定によって影響を受けるレポートは"アクティブビルドのメトリクス"レポートのみです。このレポートは設定されたビルドを元に現在のテスト計画の状態を表示します。 レポートフォーマット チャートを除く全てのレポートは次のいずれかの形式で表示させることができます: 1."normal" - ブラウザにレポートが表示されます 2."MS Excel" - Microsoft Excel形式でレポートがエクスポートされます 3."HEML Email" - ユーザーのメールアドレスにレポートが送信されます 現バージョンでは左枠から10種類のレポートを選択することができます。各レポートの目的や機能を以下に説明します。 10.1. アクティブビルドのメトリクス "アクティブビルド"に設定されたビルドの詳細な結果を表示します。このレポートは選択されたビルドで実行された結果のみ表示します。 レポートは結果を次の様なテーブルで表示します: 最上位のテストスイートごとの結果 ツリーの最上位のテストスイートごとに結果を表示します。テストケース数、成功、失敗、ブロック、未実行の合計と完了したテストケースの完了率が表示されます。完了したテストケースとは成功、失敗、ブロックのいずれかの結果が設定されたテストケースを指します。テストスイートに表示されている結果にはそのテストスイート内のテストスイートの結果も含まれています。 テストスイートごとの結果 ツリーの最上位のテストスイートだけでなく、テスト計画の全てのテストスイートごとにメトリクスを表示します。 キーワードごとの結果 テスト計画のテストケースに割り当てられているキーワードごとに結果を表示します。 10.2. 一般的なテスト計画のメトリクス このレポートはテストスイート、オーナー、キーワードごとにテスト計画の最新の状態を表示します。テスト計画の最新の状態とは、最も新しいビルドで実行されたテストケースで構成されます。例として、あるテストケースがいくつものビルドでテストされていた場合、最も新しいテスト結果が反映されます。最新のテスト結果を反映することは他の多くのレポートにも共通する概念です。最新のテスト結果は次のようにして決定されます。 1)テスト計画に反映されるビルドの優先順位はビルドの新旧によって決定します。より新しいビルドのテスト結果が古いビルドのテスト結果よりも優先されます。例として、あるテストケースのテスト結果がビルド1では"失敗"となっていたが、ビルド2では"成功"だった場合、最新のテスト結果は"成功"となります。 2)同じビルドでテストが幾度か実行された場合は、より新しいテスト結果が優先されます。例として、ビルド3がリリースされ、あるテスト担当者がビルド3のテスト結果を"成功"と設定し、後に別のテスト担当者が同じビルドのテスト結果を"失敗"と設定した場合、最新のテスト結果は"失敗"となります。 3)ビルドに対するテスト結果が"未実行"となっているテストケースは最新のテスト結果には反映されません。例として、ビルド1のテスト結果が"成功"となっておりビルド2のテスト結果が"未実行"となっていた場合、最新のテスト結果は"成功"となります。 次のようなテーブルが表示されます。 最上位のテストスイートごとの結果 最上位のテストスイートごとに結果を表示します。テストケース、成功、失敗、ブロック、未実行の合計と完了したテストケースの完了率が表示されます。完了したテストケースとは成功、失敗、ブロックのいずれかの結果が設定されたテストケースを指します。テストスイートに表示されている結果にはそのテストスイート内のテストスイートの結果も含まれています。 キーワードごとの結果 テスト計画のテストケースに割り当てられているキーワードごとに結果を表示します。 例: |キーワード|合計|成功|失敗|ブロック|未実行|完了率 [%]| |P3|1128|346|47|55|680|39.72| |P2|585|372|25|31|157|73.16| |P1|328|257|6|51|14|95.73| オーナーごとの結果 テスト計画のテストケースに割り当てられているオーナーごとに結果を表示します。オーナーが割り当てられていないテストケースは"未割り当て"という行に反映されます。 例: |テスト担当者|合計|成功|失敗|ブロック|未実行|完了率 [%]| |Dominika|579|217|34|47|281|51.47| |Mohammad|246|82|9|2|153|37.80| |未割り当て|35|19|0|1|15|57.14| |Ken|289|110|1|21|157|45.67| |Mallik|430|269|5|18|138|67.91| |Ali|227|123|28|13|63|72.25| |Mike|24|22|0|0|2|91.67| |Alex|272|155|1|36|80|70.59| 10.3. 全てのビルドの状態 全てのビルドのテスト結果を表示します。各ビルドごとにテストケース、成功、失敗、ブロック、未実行の合計とその割合が表示されます。テストケースを同じビルドで何度かテストしていた場合は、最も新しいテスト結果が反映されます。 10.4. メトリクスの抽出 このレポートはメトリクスの抽出条件を入力するページと抽出された結果を表示するページで構成されています。 抽出条件ページ: 抽出条件ページには4つの項目があります。各項目はデフォルトで全てのビルドとテストケースを抽出対象にするようアイテムが選択されています。抽出条件を変更することにより特定のオーナーやキーワード、テストスイート、ビルドの結果といった任意のレポートを作成することができます。 キーワード 任意のキーワードを選択することができます。デフォルトではキーワードは選択されていません。キーワードが選択されていない場合、キーワードが割り当てられているかに依存せず全てのテストケースが抽出対象になります。キーワードはテスト計画ページや、キーワード管理ページからアサインすることができます。テストケースにアサインされたキーワードは全てのテスト計画やテストケースのバージョンに反映されます。特定のキーワードについての結果を抽出したい場合はこの項目を変更してください。 オーナー オーナーを選択することができます。デフォルトではオーナーは選択されていません。オーナーが選択されていない場合、オーナーのアサインに依存せず全てのテストケースが抽出対象になります。現バージョンではオーナーが"未割り当て"のテストケースを検索することはできません。オーナーシップは"テスト実行の割り当て"ページやテスト計画でアサインすることができます。特定のテスト担当者の進捗を確認した場合はこの項目を変更してください。 最上位のテストスイート (複数選択することができます) 最上位のテストスイートを選択することができます。デフォルトでは全てのテストスイートが選択されています。選択されたテストスイートのみ抽出対象になります。特定のテストスイートについての結果を抽出したい場合はこの項目を変更してください。 ビルド (複数選択することができます) ビルドを選択することができます。デフォルトでは全てのビルドが選択されています。選択されたビルドによって実行されたテストケースのみメトリクスの抽出対象になります。例として、過去3つのビルドによってどのくらいのテストケースが実行されたか確認したい・・・等の場合はこの項目を変更してください。 キーワード、オーナーおよびテストスイートの選択によりテスト計画からテストケースの数が決定されます。この選択はテストスイートやテスト計画ごとのメトリクスを計算するために使われます。例として、オーナーに"Greg"、キーワードに"Priority 1"を設定し、全てのテストスイートを選択した場合はGregにアサインされたPriority 1のテストケースが抽出対象になります。レポートに表示されるテストケースの合計はこれら3つの項目により計算されます。 どのビルドを選択するかはメトリクスに表示されるテスト結果(成功、失敗、ブロック、未実行)に影響を与えます。詳細については前述されている"最新のテスト結果"の箇所を参照してください。 "クエリー送信"ボタンを押して抽出を開始し、結果を表示します。 抽出結果ページ: 抽出結果ページは次の項目を表示します: 1. レポート作成に設定された抽出条件 2. テスト計画全体の総計 3. テストスイートごとの総計(テストケース、成功、失敗、ブロック、未実行の合計)と実行結果。テストケースが複数のビルドで実行されていた場合、選択されたビルドの全ての実行結果が表示されます。しかし、テストスイートの概要は選択されたビルドの最新のテスト結果のみ表示します。 10.5. ブロック、失敗、実行不能テストケースレポート これらのレポートは現在のブロック、失敗、実行不能テストケースの全てを表示します。 “最近のテスト結果”ロジック(全体テスト計画メトリクスに基づいて表現された)は ブロック、失敗、実行不能と判断されたテストケースを採用しないようにします。 ブロック、失敗、実行不能テストケースレポートはユーザが統合バグトラッキングシステムを使用している場合 同類のバグを表示します 10.6. テストレポート 各々のビルドの各々のテストケースのステータスを見ます。 もしテストケースがなんども同じビルドで実行されたとすれば、 最新の実行結果を使うでしょう。このレポートの“?”は このビルドでは実行不能テストケースを知らせます。 大きいデータセットを使用している場合はより簡単に眼を通せるようにExcelフォーマットでこのレポートを エクスポートすることをお勧めします。 10.7. チャート このレポートページはブラウザにFlashのプラグインが必要になります。 Flashはhttp //www.maani.usから提供されており、結果を図式的なフォーマットで表示するために使用します。 “最近のテスト結果”ロジックはあなたの閲覧できる全部で4つのチャートで使用されます。 グラフはユーザを現在のテスト計画のメトリクスを視覚化し補助するために動画で表示されます。 提供している4つとは 1.全体のパス/失敗/ブロック/実行不能 テストケースの円グラフ 2.キーワードによる結果の棒グラフ 3.オーナーによる結果の棒グラフ 4.トップレベルスイートによる結果の棒グラフ 棒グラフの棒はユーザがパス、失敗、ブロック、実行不能ケースののおおよその数が見分けられる様に おのおの彩色されています。 10.8. 各々のテストケースのバグ総計 このレポートは全てのバグがファイルされた全体のプロジェクトの各々のテストケースを表示します。 このレポートはバグトラッキングシステムを接続している場合にのみ使用可能です。 12 ユーザ管理 12.1 アカウントの設定 すべてのユーザはアカウント設定ウインドウ(メニューバーの中の"Personal")から、 自分自身の情報を編集する事ができます。TestLinkはadministrator権限を持つ ユーザに対して、ユーザの作成、編集、削除を許可しますが、参照、ユーザパスワードの 変更は許可されません。もし、ユーザがパスワードを忘れた場合は、ログイン画面の 上部にあるリンクから、ユーザ名と登録したメールアドレスを入力すればそのアドレスへ パスワードが送付されます。 11.2. 役割と権限 TestKinkには6つの異なったデフォルトパーミッションレベルが用意されています。 これらの権限は管理者がアクセスできる”the user administration”で変更できます。 パーミッションレベルは下記のとおりです Guest テストケースとプロジェクトメトリクスの参照のみ行えます。 Test Executor 彼らに割り当てられたテストを実行する事のみ可能です。 Test Designer テスト仕様書および要求全てに働きかける事ができます。 Test Analyst テストの作成、編集、削除、およびそれらを実行する事ができます。 テスト計画の管理、テストプロジェクトの管理、マイルストーンの作成や権限の移譲は行えません。 Test Leader これまでの全ての権限を持ち、さらにテスト計画の管理、権限の移譲、マイルストーンの作成、 キーワードの管理が行えます。 Admininstrator これまでの全ての権限を持ち、さらにテストプロジェクトの管理が行えます。 注意 テスト計画に関連する機能は、もれなく作成済みのテス計画にアサインされる必要があります。 詳しくは、テスト計画のアサインの項をご参照ください。 11.2.1. 役割 TestLinkには規定の役割が存在します。管理者はシステムの中でデータを編集する適切な権限を付与します。それぞれのユーザに対して、これらの役割のひとつを割り当てます。下記のテーブルは、横の列にそれぞれの役割 (guest ,tester, senior tester, leader, admin)、次のカラムにそれぞれ異なる権限レベルを参照できます。これらのレベルは規定のものですが、自由に編集したり、新しい役割を定義する事もできます(熟練した管理者向け)。ユーザーテーブルは、役割の適切な権限レベルを指し示す外部キーを含んでいます。 Role|List of Rights|Permissions Guest|mgt_view_tc, mgt_view_key, tp_metrics|データの参照のみ Test Executor(Tester)|tp_execute,tp_metrics|テストの実行のみ Test Analyst(Senior Tester)|tp_execute, tp_metrics, tp_create_build,mgt_view_tc, mgt_modify_tc, mgt_view_key,mgt_view_req|テストの編集,テストの実行, ビルド生成 Test Designer|tp_metrics, mgt_view_tc, mgt_modify_tc, mgt_view_key, mgt_modify_req, mgt_view_req|テストと要求の編集 Test Leader|tp_execute, tp_create_build, tp_metrics, tp_planning, tp_assign_rights, mgt_view_tc, mgt_modify_tc, mgt_view_key, mgt_modify_key, mgt_view_req, mgt_modify_req|テスト計画に関するすべての権限, テストの編集と実行 Admin|tp_execute, tp_create_build, tp_metrics, tp_planning, tp_assign_rights, mgt_view_tc, mgt_modify_tc, mgt_view_key, mgt_modify_key, mgt_view_req, mgt_modify_req, mgt_modify_product, mgt_users|全ての事が可能. この役割だけが、ユーザとプロジェクトをメンテナンスできる Table 1 Role description 11.2.2. 役割の定義 次のテーブルは、役割の定義に使われたキーワードのリストです。 Right|Description mgt_view_tc|テスト仕様の参照 (data of Component, Category, and test case)| mgt_modify_tc|テスト仕様の編集 (create,modify,delete,order, move, and copy Components, Categories, and test cases) mgt_view_key|キーワードの参照 mgt_modify_key|キーワードの変更 mgt_modify_product|テストプロジェクトの生成、編集、削除 mgt_view_req|要求の参照 mgt_modify_req|要求の生成、編集、削除、紐付け Table 2 Test project related Rights Right|Description tp_execute|テストケースを実行する権限 (テスト結果の挿入) tp_create_build|ビルドを生成する権限 tp_metrics|メトリクスの参照 tp_planning|テストプランの生成、編集、削除、リスクとオーナーシップ、マイルストーン、テストスイートの割り当て tp_assign_rights|プロジェクト参照権限の割り当て Table 3 Test Plan related Rights 11.3. テスト計画の割り当て ユーザは割り当てられたテスト計画だけを見られます。 テスト計画の権限を得る為には、リーダー権限か、管理者権限を持つユーザが彼らに"ユーザ定義/プロジェクト権限"を通して、"テスト計画管理"にて権限を与える必要があります。 システムのすべてのユーザーが、新しくつくられたテスト計画を見るための権限をデフォルトで持っているというわけではありません(彼ら自身に権限を与えることの出来るテスト計画者を除いては) テスト計画の権限が0と言うことは、そのユーザはメイン画面にあるテスト計画ドロップダウンボックスのどんなテスト計画も見られないことを意味します。 テスト計画権限のテーブルにそれらはあります(すなわち、どのユーザがどのテスト計画を見ることが出来るかが分かります)。 このテーブルはユーザIDとプロジェクトIDが結合して作られます。 メインページには、ログインしたユーザに適切な権限があるかどうかチェックするコードが含まれます。 (そして許可されたプロジェクトを表示します。これを切ることは薦められません) 12. データのインポートとエクスポート TestLinkはデータを共有するいくつかの方法をサポートします。 項目 ファイルフォーマット あなたが得るもの キーワード CSV XML 全てのテストプロジェクトのキーワード テストプロジェクト XML 全てのテストスイートとテストケース あなたは割り当てたキーワードもまた、エクスポートするかどうか選ぶことができます。 テストスイート XML テストスイートの詳細、全てのテストケース、子となるテストスイートとテストケース あなたは割り当てたキーワードをエクスポートするかどうか選ぶことができます。 テストケース XML 2種類のエクスポートが可能です。 - 1つのテストケースだけ - テストスイートにある全てのテストケース あなたは割り当てたキーワードをエクスポートするかどうか選ぶことができます。 要件 CSV CSV DOORS(※) XML (※)このフォーマットではインポートしかサポートしていません。 テーブル4:項目はインポート/エクスポートの両方ができます。 制限:添付ファイルはエクスポートできません。 12.1. キーワードのインポート/エクスポート CSV形式の例 “キーワード;備考” Klyngon;Klyngon keyword notes Moon rocks;Moon rocks keyword notes XML形式の例 キーワード ?xml version="1.0" encoding="UTF-8"? keywords keyword name="Klyngon" notes ![CDATA[Klyngon keyword notes]] /notes /keyword keyword name="Moon rocks" notes ![CDATA[Moon rocks keyword notes]] /notes /keyword /keywords 12.2. テスト計画のインポート/エクスポート ユーザは計画の記述、テスト仕様とキーワードを含むテスト計画をインポート、 またはエクスポートすることができます。 次の2つの説明はツリーメニュー状データと同じデータのXMLファイルです。 ?xml version="1.0" encoding="UTF-8"? testsuite name="" details ![CDATA[]] /details testsuite name="Communications" details ![CDATA[ p Communication Systems of all types /p ]] /details testsuite name="Handheld devices" details ![CDATA[]] /details testcase name="10 G shock" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase testcase name="Gamma Ray Storm" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase /testsuite testsuite name="Subspace channels" details ![CDATA[ p Only basic subspace features /p ]] /details testcase name="Black hole test" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase /testsuite /testsuite testsuite name="Holodeck" details ![CDATA[]] /details testcase name="Light settings" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase /testsuite testsuite name="Propulsion Systems" details ![CDATA[]] /details testsuite name="Main engine" details ![CDATA[]] /details testcase name="Emergency stop" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase /testsuite /testsuite /testsuite 12.3. テストスイートのインポート/エクスポート キーワードを除いたテストスイートのXML出力例 ?xml version="1.0" encoding="UTF-8"? testsuite name="Handheld devices" details ![CDATA[]] /details testcase name="10 G shock" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase testcase name="Gamma Ray Storm" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase /testsuite キーワードを含むテストスイートのXML出力例 ?xml version="1.0" encoding="UTF-8"? testsuite name="Handheld devices" details ![CDATA[]] /details testcase name="10 G shock" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults keywords keyword name="Klyngon" notes ![CDATA[Klyngon keyword notes]] /notes /keyword /keywords /testcase testcase name="Gamma Ray Storm" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults keywords keyword name="Klyngon" notes ![CDATA[Klyngon keyword notes]] /notes /keyword keyword name="Moon rocks" notes ![CDATA[Moon rocks keyword notes]] /notes /keyword /keywords /testcase /testsuite 12.4. 単独のテストケース XMLファイルの例 ?xml version="1.0" encoding="UTF-8"? testcases testcase name="Black hole test" summary ![CDATA[ p This procedure must be done once a week, with this safety device disabled /p ol li X45HH /li li YY89-000-JI /li /ol ]] /summary steps ![CDATA[ p Preset bias to 0 /p p Enable strong long range /strong communications control /p p Simulate black hole interference /p ]] /steps expectedresults ![CDATA[ table width="200" cellspacing="1" cellpadding="1" border="1" caption Main Results /caption tbody tr td Spin value /td td 9.9 /td /tr tr td Opposite Angle /td td 18 rad /td /tr tr td nbsp; /td td nbsp; /td /tr /tbody /table ]] /expectedresults keywords keyword name="Moon rocks" notes ![CDATA[Moon rocks keyword notes]] /notes /keyword /keywords /testcase /testcases 12.5. テストスイート中のすべてのテストケース ?xml version="1.0" encoding="UTF-8"? testcases testcase name="10 G shock" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase testcase name="Gamma Ray Storm" summary ![CDATA[]] /summary steps ![CDATA[]] /steps expectedresults ![CDATA[]] /expectedresults /testcase /testcases 12.6. ソフトウェア要求仕様のインポート/エクスポート CSVファイルは“ドキュメントID, タイトル, 詳細”が含まれます。 CSVファイルの例 ENG-0001,Terrestrial Propulsor, ENG-0002,Main Deflector," p Main deflector bla, bla, bla. /p " XMLファイルの例 ?xml version="1.0" encoding="UTF-8"? requirements requirement docid ![CDATA[ENG-0001]] /docid title ![CDATA[Terrestrial Propulsor]] /title description ![CDATA[]] /description /requirement requirement docid ![CDATA[ENG-0002]] /docid title ![CDATA[Main Deflector]] /title description ![CDATA[ p Maindeflector bla, bla, bla. /p ]] /description /requirement /requirements Revision History # Description Date Author 0.x Documents for TL 1.5 and update for TL 1.6 2005 M. Havlat A. Morsing F. Mancardi 1.0 Converted to OO2 format; 2005/03/12 M. Havlat 1.1 Minor update; FIX 372, 352 2006/02/14 M. Havlat 1.2 Updated as draft for TL 1.7 2006/11/17 M. Havl?t 1.3 Removed TL 1.6 terms Added initial information about Custom Fields 2007/03/01 F. Mancardi 1.4 Added content and updated Franciscos “jumpstart_manual” and tl_file_format. General style cleanup and update. 2007/09/06 M. Havl?t
https://w.atwiki.jp/gcmatome/pages/1544.html
PANDORA MAXシリーズリンク 機種 タイトル 概要 判定 PS PANDORA MAX SERIES Vol.1 ドラゴンナイツグロリアス 「1980円の超大作」第1作。手堅くまとまった王道RPG。 なし PANDORA MAX SERIES Vol.2 死者の呼ぶ館 ホラーADV。シナリオはともかく、システムデータくらい作ってくれ。 ク PANDORA MAX SERIES Vol.3 ラビッシュブレイズン 第1作と世界観を共有するギャグRPG。 なし PANDORA MAX SERIES Vol.4 Catch! ~気持ちセンセーション~ 恋愛ADV。ロード地獄。それといい加減システムデータを作れ! ク PANDORA MAX SERIES Vol.5 ごちゃちる おまけゲームのキャラ達が主役のファンディスク的存在。前4作品のデータ補完も。 なし PANDORA MAX SERIES Vol.6 ONI零 ~復活~ 『ONI』新作が1980円で登場も、シリーズ打ち切りでシナリオは投げっぱなしに。 なし 関連作品 ONIシリーズ シリーズ概要 株式会社パンドラボックス(現:シャノン)のゲームブランド。 完全新作で、やり応え十分のゲームソフトを1980円でリリースするというコンセプトに基づいて開発されたシリーズ。 1,980円(税込2,079円)という価格設定だが、これは同時期の一般的なPSソフトよりも非常に安い。 当時のソフトの定価は5,000~6,000円程度が普通で安くとも3,000円、ディスク複数枚組のソフトなど7,000円近いゲームも珍しくは無かった。 『Vol.1』と同年発売のソフトを例に挙げると、『サルゲッチュ』が定価6090円、『クロノ・クロス』がディスク2枚組で6,800円、『ファイナルファンタジーVIII』がディスク4枚組で8,190円である(全て税込)。 しかし、既にそれよりも安い『SIMPLE1500シリーズ』がリリースされているため、「前代未聞の安さ」という訳では無い。 シリーズ共通の仕様として「コンバート」というシステムが存在し、同シリーズソフトのセーブデータを読み込むとレアアイテムの入手や隠しサブイベントの発生などさまざまな特典を獲得することが可能である。 また、いずれの作品にも「おまけ」のメニューが存在しており、プレイヤーのファンレター掲載コーナーやミニゲーム、コミカルな短編ADV「ごちゃちる」などが収録されていた。 この「ごちゃちる」のキャラクター達をメインにしたゲームがシリーズ第5作として発売されている。 「5作品ごとに5本のソフトを収納可能なボックス仕様のソフトを出す」という構想が早い内からあったようで、実際に第5作はその仕様の限定版が発売された。 しかし、その次の第6作でシリーズは終了。シリーズ全作を買い揃えると、1本だけボックスの外にぽつんと置かれるというなんとも寂しいことになってしまった。 ちなみに、6作とも2009年8月26日よりゲームアーカイブスで配信中。 未発売作品 「おまけ」メニュー内には発売予定の作品を紹介する「予告」が収録されていたのだが、中には予告されたものの諸々の事情で未発売に終わった作品もいくつか存在する。 『リストラの朝』 中年サラリーマンの大河原泰造(46)は、平成不況の煽りを受けリストラされてしまう。そこで会社への復讐として手製の爆弾を仕掛けることを試みるが、なんと会社は既にテロリストに占拠されており…というストーリーのADV。 シリーズ開始当初から第5作として発表されていたが、第5作はボックス仕様の限定版を出すことになり、雰囲気が合わないだろうという事で見送られ、そのまま結局お蔵入りになった。 ゲームは未発売に終わったが、大河原はこっそりミニゲームのキャラクターとして出演している。また、ゲーム部分もほぼ完成していたらしい。 『闇の蛹』 シリーズ開始当初から第6作として発表されていた。 記憶喪失の何者かが主人公のADV。予告ムービーは、窓の無い薄暗い密室で目覚めた「私」が、謎の昆虫の成長記録が書かれた日記帳を発見するというものだった。脱出ゲームのようなジャンルの作品になる予定だったのだろうか。 「縦横無尽に張り巡らされたトリックを、あなたは解くことができるか…」「真実が見えてくればくるほど、きっとあなたは後悔し、絶望する」「あなたの元にとっておきの恐怖を…」といった紹介がなされており、不気味な雰囲気が強調されていた。 しかし、シリーズの途中から予告ムービーが簡素なものになり、また発売日も未定に。この時点で既に雲行きの怪しさはあったが、やはり未発売に終わった。 『ラビッシュブレイズン2』 タイトル通りシリーズ第3作の続編。新キャラクターのイラストなどもムービーに映っていたのだが、結局その後音沙汰は無かった。 もっとも、予告ムービーの極端な短さや未着色で線画のみのイラストなど、未発売になりそうな雰囲気は既に漂っていたが…。 『ONI零~流転~』 シリーズ第7作になるはずだった作品。この作品のみ「予告」メニューで紹介されたものではなく、第6作のエンディング後に予告ムービーが収録されていた。 『ONI零』のみならず過去の『ONI』シリーズのキャラクターが集結するなどファンに期待を抱かせる内容だったが、結局うやむやになってしまった。
https://w.atwiki.jp/achdh/pages/13.html
第一話*② 第一話 原案:マド録 文:柊南天 プロローグ 遥か遠い過去──現在の統治企業や統一連邦でなく、純然たる主権国家が、この薄汚れた地上世界を治めていた時代があったそうだ。 しかし、繁栄を極めた国家群も時代の変遷と共に衰退し、それに代わって国家体制を支えていた軍産複合体が、世界の覇権を巡り競合するようになっていった。 統一連邦と名を変えたかつての主権国家群は、その骨肉の戦乱の中で意味もなく翻弄されるだけの存在に成り果てた。 熾烈を極めた覇権競合も現代では世界情勢の日常風景となり、戦争経済そのものが人類社会の存続の糧になっていると、知識人は云う。 そんな実情を体現する幾つかの存在が、ここ一世紀あまりで生まれたからだ。 人型機動兵器──アーマード・コア。 俗にACと呼ばれるその兵器と、それを自在に駆り、混迷の戦場世界を往く渡り鴉【レイヴン】と呼称される自由傭兵達。 戦争経済の拡大が彼らを育み、彼らの繰り返す戦火がまた、戦争経済をさらに肥大化させている。 アーマード・コアを駆る自由傭兵──俺も、その一人を目指して戦場に足を踏み入れた。 俺が鴉を志してから暫く経った頃、世界を異変が覆った。 近年発見の相次いでいた世界各地に散在する旧世代遺跡で、旧世代技術の遺産と思われる軍事兵器の実存が、統治勢力によって確認された。それらは現代のあらゆる精鋭兵器をすら凌駕しうる性能を持ち、発見から程なくして、世界は旧世代兵器群による全面攻勢を受ける事となった。 暫くの後、世論はその未曾有の大惨禍を兵器災害──【アーセナル・ハザード】と呼び始めた。 一世紀の年月を掛け、戦争経済の恩恵と共に復興を遂げようとしていた人類社会はわずかな期間で壊滅的な損害を受け、残された人類は旧世代兵器群が降り注ぐ大地で、生存をかけた闘争を強要されることとなった。 そんな絶望的な世界に在っても、その暗い大空を戦場の鴉達のみは、自由に飛び続けていた。 ──幸か不幸か、人類社会に大損害を与えた【アーセナル・ハザード】を新たな市場として戦争経済は更に勢力を増し、僅か数年という歳月で地上世界の全てを戦争一色に呑み込むまでとなっていった。 世界各地で繰り返される武力衝突の主体である統治企業体──それに多大な兵力供給を行う独立系勢力や、自由傭兵のレイヴン達を統括し、商品として売り込む幾つかの傭兵仲介企業勢力──。 絶え間ない戦渦にのみ安息を見出す鴉達は各々の巣に寄り添い、各々の理念に従って、世界各地の武装地帯を渡り歩いていた。 ──そして俺は今日、初の単独任務を遂行するレイヴンとして、戦場に立っている──。 統治企業直下経済管轄領、旧ナルバエス地方──。 * 文書記録を圧縮保存してタッチパネルに走らせていた手を止め、投射型メインディスプレイに常時出力中の外部映像に視線を移す。 黄塵の吹き抜ける広大な荒野の先、先行して制圧攻撃を仕掛けた友軍による戦火が轟いていた。 確立状態の通信回線を通じ、作戦司令部から作戦支援業務を行う総合通信士から定時報告が入る。転送されてきた圧縮データを解凍し、最新の戦域環境情報をディスプレイ上に出力した。 『作戦司令部、オペレーターです。現在第一陣主戦力が、施設外周地表部で交戦状態に入りました。第二陣主戦力は施設隔壁の開放に備え、速やかに移動を開始してください──』 「──了解、移動を開始する」 マルチコンソールから溢れる淡青色の光源に照らされるコクピット内で、マイ・アーヴァンクは勤めて冷静に返す。二基一対の操縦把を握り込み、コクピット下方部のフット・ペダルに足を掛け直す。 戦術支援AIに口頭指示し、機体制御態勢を第一種戦闘準備態勢から第一種戦闘態勢へと移行させた。動力源である燃料電池から供給される電力が機体出力を著しく上昇させ、各種搭載センサー群及び索敵用レーダー・システムも第一種戦域索敵態勢に移行する。 瞬く間に戦域環境情報が更新されそれらがHMD画面に出力されていくのを確認、その後、マイ・アーヴァンクはフット・ペダルを強く踏み込んだ。感じ慣れた震動がコクピットを細かく揺らし、発進用の準備推力に加えて点火した噴射炎が、搭乗者であるマイ・アーヴァンクを乗せた人型機動兵器【アーマード・コア】──〝蒼竜騎〟の巨躯を前方へと押し出す。 先行し、施設外周交戦域へ向け蒼竜騎の舵を取る。 マルチコンソールを叩いて数百メートル前方の地表部交戦域を拡視界に出力、吹き荒ぶ黄塵の中に続く戦闘の様相を直に確認した。 白燐の燃焼による曳航弾の赤い軌跡が乾燥した大気を切り裂く中、第一陣主戦力として施設地表部の制圧に臨んだAC部隊が敵対勢力と戦火を交えている。 もうもうと吹き上がる粉塵の裂け目から、制圧対象である施設の防衛戦力──この世のどの軍事技術にも既存しない形態を宿した兵器の青白い眼窩と視線を交えた気がして、マイは口許を小さく歪めた。 直後、四脚形態を備えるその兵器がAPFSDS弾(離脱装弾筒付翼安定徹甲弾)の直撃によって頭部を吹き飛ばされ、噴煙の中へとその姿を消す。 戦域状況は目まぐるしく変動しているが、第一陣主戦力にはいまだ戦域離脱者は出ていない模様であった。 突出して施設地表部戦域へと進行中の蒼竜騎の右側を、堅牢な外部装甲を纏ったエア・クッション型強襲艦艇が追い抜き、その後を同種の機動艦群と数機の工作用MT部隊が追従していく。 それとほぼ同時に艦艇が艦載砲の砲口を前方戦域に固定、一拍を置いて砲火が煌めいた。 作戦戦域を重厚な砲声が突き抜け、蒼竜騎の機体がそれを受けて細かい空気震動を受ける。その時、今度は先ほどの機動艦艇群とは異なる機影が右前方に突出し、真横で併走し始めた。 マイの眼球動作に追従するフレーム・システムがカメラアイを僅かに傾ける。有視界に映り込んだ一機のAC機体の機影を見咎めた時、蒼竜騎の通信回線に特定周波数で無線が飛ばされてきた。 『──ミラージュの野郎共もやる気まんまんって感じだな。結局最後にケツ拭くのは、俺達だってのによ?』 併走する友軍ACの搭乗者──マイが持つ業界の知己である自由傭兵の〝ゼオ〟が遠慮する事もなく、毒のこもった言葉を吐いた。 「奴さんも、面子ってモンが絡んでんのさ。大目に見てやりな」 作戦の性質を鑑みれば、少々言葉は悪いものの彼の言うとおりだと、マイは胸中で同意する。 今作戦の依頼主は、最上位の統治企業体として、嘗ては統治企業連合にも名を連ねていた〝ミラージュ社〟である。 依頼内容は、現在世界各地で頻発している兵器災害の惨状を鑑みれば、ごく有り触れたものだった。 ──ミラージュ社旧経済管轄区【旧ナルバエス地方】は、広大な荒野を有す同地方に散在する旧世代遺跡の一つ【アスセナ】へ進入、施設内部を調査し、かつ同遺跡の維持機能を停止せよ──。 まあ、至極簡潔に言えば、無尽に湧き出る有象無象の防衛戦力を排除し、同遺跡内部の調査を済ませた上で施設機能を停止させろ、という事だ。 遂行主戦力は業務依頼を受諾した自由傭兵及び独立系勢力のレイヴンであり、マイを含む主戦力部隊が所定に沿って旧世代施設を武力制圧する手筈となっている。 一応、ミラージュ社も保有軍から戦力を供出して合同作戦に当たると、事前のブリーフィングで具体的に明示していた。が、よもやこれほど大胆な制圧攻撃を行うとは、さすがのマイも予測していなかった。 しかし、ミラージュ社供出軍が合同作戦に加わっている以上、そこにマイが口にしたような要因が絡んでいる事は、主戦力であるレイヴンの大半も察知しているだろう。 五年前の兵器災害発生に伴って同地方を破棄した依頼主にとって、その復興計画の一貫である今作戦の成功を内外に知らしめる事は、小さくない意味を持つ。 そして自社戦力の損失を避ける為に外部戦力を雇用したとはいえ、ミラージュ社が作戦を立案し、戦闘を遂行したという事実は残らねばならない。 これは、統治企業として強大な権勢を誇る依頼主の機微であり、重要な政治的意味を持っている。 ──最も、自分のような駆け出しの下っ端レイヴンがそれを齧った程度に知っていた所で、何の関係もありはしない筈だが。 戦って、生き残って、金を貰って、命と一緒に持って帰る──他の事は、まあ、なるべく考えない方がいい。 それ以外に関しては、各々に帰着するもので、そこは他者が関知すべき事でない。 こと今回の自分に関しては、原隊を遠く離れての初の単独出向任務の最中なのだ──望めるのなら、何事もなく仕事を消化するに越した事はなかった。 「──だけど、胡散臭さは親方の警告通りだな」 『あん? 何か言ったか?』 通信回線から垂れ流しになっていた独り言に対してゼオが声をあげ、マイは軽くかぶりを振った後、「なんでもない」と、静かに返した。 『第一陣だけでカタが着いたら、俺達の報酬がなくなるなんて事はないよな?』 「──さあ。だが、あの個体数だ。少なくとも出番がないなんてオチはないだろう」 ゼオが若干茶化して言う冗談に、マイは曖昧な返事を返す。 先行した第一陣主戦力の主任務は、施設外周地表部に展開する施設防衛戦力の無力化だ。施設内部進入後、施設制圧作戦に於ける主戦力は第二陣が担う。 外周地表部に兵隊蟻の如く湧き出てきた防衛戦力の兵力数から鑑みて、施設内部にはそれと同等か、或いはそれ以上の数が施設侵入を阻もうと待ち伏せているだろうと考えるのに、どこも不自然はない。 旧世代遺跡施設の正面隔壁へ残り八〇〇メートル強まで接近した時、作戦司令部の総合通信士が抑揚に欠けた冷淡な声音で定例報告を行う。 『第一陣戦力の地表部制圧が、間もなく完了します。第二陣戦力は移動を継続、隔壁開放と共に施設内部へ進入してください』 一切の無駄なく、施設防衛戦力に立ち直る隙を与えず、というところか。 機動力と圧倒的火力に勝る速やかな制圧方法は他にない。 『一気に行くとするか。先に突出するぜ、〝ドラグーン〟──!』 威勢良い言葉の最後に自身のレイヴンとしての名を残し、ゼオは併走させていた自らの搭乗機体〝シックザール〟の進行推力を劇的に跳ね上げ、現場へ向かう第二陣戦力の最前衛に立った。 自身と同世代とはいえ、特定組織に加担しない自由傭兵としては中堅格に入ってもおかしくない筈だが、どうも彼は血の気が多い。自由傭兵を名乗る鴉として、その生き方に忠実である為の彼なりの処世術なのかもしれないが。 そして自分も自分で、この作戦に参加できた事に、僅かながら歓喜しているのは事実なのだ。 「──蒼竜騎、強襲機動を開始する」 力強い言葉に呼応して戦術支援AIが機体各部の機能状況をHMD画面に出力し、それに伴って搭載センサー群から収集される戦域環境情報も著しく更新されてゆく。 短機関砲を携える右腕部を持ち上げ強襲機動態勢を構築、マイは足元のブースタ・ペダルを目一杯に踏み込んだ。後背メインノズルから吐き出された高出力の噴射炎が蒼竜騎を更に前方へと押し出し、黄塵と戦火の渦巻く荒野を疾走させていく。 自らの試金石となる目の前の戦場を鋭い眼差しで見つめ、マイは小さく笑んだ。 旧ナルバエス地方旧世代軍事施設【アスセナ】制圧作戦、開始。 * 施設外周部戦域──。 鋭角的な切返しを交えた偏差機動によって狙いの逸れた照射光が、赤土の大地に深い焦熱痕を穿つ。 第二射を照射すべく向けられた腕部発振兵装を正確に捕捉──第一陣主戦力の中に名を連ねる自由傭兵、〝マユ・キリシマ〟は両手にそれぞれ握り込んだ操縦把付随のトリガーを引き絞った。 搭乗機体〝ヴァルキリー・フェイバー〟の両腕に携える速射型滑腔砲が同時に火を噴き、APFSDS弾(離脱装弾筒付翼安定徹甲弾)による集中掃射を見舞う。初速は遥か音速域へ踏み込んだ砲弾が捕捉目標の右腕を直撃、外部装甲もろとも内部構造を深く抉り取った。 その損傷を受けて捕捉目標が、断末魔じみた機械音を立てる。搭載センサー群が拾い上げたその音を耳にし、マユ・キリシマは狭いコクピット内で憚る事もなく大きく舌を打った。 地上への落下と共に右腕部が爆散し、その衝撃を受けて捕捉目標が機体姿勢を崩す。優れた動体視力を備えるマユの双眸は、その隙を見逃さなかった。間断なくブースタペダルを踏み込み、約二五五メートルの相対距離から一挙に突進攻撃を仕掛ける。 隻腕となった捕捉目標は即座に状況を解析したらしく、突進攻撃を仕掛けるマユに対して機動を停止した。ヴァルキリー・フェイバーの高い射撃管制能力の前にあっては、相手の有効戦術圏で戦闘機動を繰り返す事に然したる意味はないものと判断したのだろう。 背部搭載式の収束光発振装置の長大な砲身を前方へ展開、自ら半固定砲台と化す。旧世代技術を搭載されたアレらが優れた戦闘能力を保持している事は公然の事実であり、そこから捕捉目標が何を狙っているかをマユは迅速に把握した。 「撃たせないわよっ──」 マユは精緻極まる操縦技術を持って、両腕部に携える得物の照準を目標の脚部に定めた。 発振装置から圧倒的高出力の収束光が照射される刹那、ヴァルキリー・フェイバーの撃ち放った二発のAPFSDS弾が捕捉目標の右脚部膝間接を正確に撃ち貫く。機体姿勢を不意に崩された捕捉目標は、照射した収束光で大地に全く無意味な焦熱痕を新たに作り出す。 捕捉目標が機体制御態勢を最適化する前に決定打を与えるべく、マユはブースタペダルを踏み込んで機体速度を押し上げた。間断なく追加攻撃を放ち、左前脚関節部も粉砕する。 完全に機動力を失った捕捉目標が、無様にもその場で前のめりに倒壊した。 相対距離を瞬く間に詰めた機体を捕捉目標の眼前に立たせると、卑しく頭を垂れる捕捉目標の後頭部に砲口を押し付けた。 再び、悲鳴染みた機械音を再び耳にし、 「耳障りなのよ。少しは命乞いでもしたらどうなの──?」 悪態に対し、無様な格好で足を捥がれた甲殻虫のように蠢くパルヴァライザーは、変わらず耳障りな音しか返さない。 マユはあからさまに舌を打ち、躊躇いなく引き金を引いた。 目を瞑っていても当たる極至近距離から撃ち出したAPFSDS弾が頭部を砕き、その際に飛び散った破砕片がヴァルキリー・フェイバーの外部装甲板を細かく打つ。得物を離すと、埃でも払うかのように右腕部のターレットを一度素早く旋回させた。 他人に特別秘匿する事もなく、マユ・キリシマは旧世代兵器という害悪を心底、憎悪していた。 五年前に突如として地上世界に出現し、世界の全てを戦火に包み込んだそれらを。自分が願った小さな幸福すらも奪っていった、知りもしない遥かな過去からの訪問者達を。 その訪問者達の象徴的存在として世界情勢を席巻した兵隊蟻──パルヴァライザーと呼称される害悪を自らの手で排除し続けるべく、多くの人命が失われた兵器災害以降も、マユは戦場に残る事を選択した。 戦塵渦巻く荒野の一風景に成り果てた残骸を捨て置き、ヴァルキリー・フェイバーを次なる目標を捕捉すべく移動させる。既に周辺戦闘は収束に向かっており、レーダー上に友軍信号を発しない動体反応──つまり、敵性動体の個体数は明らかに現象していた。 既に第二陣戦力も外周部戦域の境界線を割って、深く進攻してきている。しかし、それでも他の鴉どもに得物を横取りされる訳にはいかない。 手近な敵性動体を捕捉した瞬間、耳を劈くような砲声が戦域を突き抜けた。寸秒の差もなく、捕捉したばかりだった目標が爆炎の中に掻き消え、そこを中心に巨大な噴煙が発生する。 黄塵交じりの爆風が機体を揺らす中、マユは捕捉目標を吹き飛ばした元凶へと、カメラアイを向けた。 そこには、第二陣主戦力に先行して後方から急速接近してくるエア・クッション型強襲艦艇の機影があった。 「援護射撃のつもりっ? 邪魔なだけよ──!」 思わぬ増援戦力の介入にマユは苛立つ。その継続意識の散漫が、急速接近してきていた敵性動体反応に対する反応を遅らせた。 『敵性動体、至近距離に接近しています。応対機動の展開を推奨します──』 「しまった──」 戦術支援AIの音声報告によって弾かれるように動き、慌ててブースタペダルを踏み込む。 後背より斬りかかってきたパルヴァライザーのレーザーブレードを紙一重で回避、しかし、左上腕部装甲に軽度の焦熱性損害が与えられる。中間距離からの射撃戦闘を旨とするヴァルキリー・フェイバーに背後から忍び寄り、あまつさえ機体に傷をつけたそのパルヴァライザーを殺意を湛えた双眸で睨みすえ、マユ・キリシマは咆哮する。 「──人間を、ナメるな!」 残余推力で後退する機体へ強引に制動を掛け、極密着状態に踏みとどまる。奇異なる眼光を宿したカメラアイを捉え、操縦把付随のトリガーを全力で引き絞った。 速射型滑腔砲の砲口から放たれた弾幕が捕捉目標の全身に喰らいつき、装甲各部を引き裂く。機体姿勢を崩したパルヴァライザーが堪らず回避機動に移り、マユは制圧射撃を継続しつつ追撃をかける。 目標の腕部一体型兵装内の攻性熱源反応を搭載センサー群が捉え、マユは条件反射でブースタペダルを瞬間的に踏みつけた。急激な軌道転換による重力負荷が、鍛え上げられた身体を軋ませる。 捕捉目標の腕部一体型兵装から照射された高出力の収束光がヴァルキリー・フェイバーの左肩部装甲を広範囲に渡って焼却、機体損害状況が警告音を伴ってHMD画面に出力される。 『機体左肩部に中度の焦熱性損害、機体損耗率上昇──』 戦術支援AIの損害報告を聞き流し、激しく流動する視界の中で眼前の目標のみを見据える。回避機動から間髪入れずブースタの推進方向を正面へ転換、噴射炎を吐き出す。立て続けの機動戦闘による重力負荷が彼女の身体を固く縛り付け、感覚神経の一部を酷く痺れさせる。しかしマユはそれに構わず、捕捉目標であるパルヴァライザーに自ら肉薄していった。 「この鉄屑が、ちょっとはヤルじゃないの──でも、これで終わり!」 再度、二基の得物による高密度の弾幕を見舞う。先程までの集中掃射によって甚大な損害を被り、機体機動力を低下させていた目標は有効な回避機動を取ることも出来ず、撃ち放ったAPFSDS弾の殆どを被弾した。 目標のパルヴァライザーが崩落し、破損した機体内部から漏出した可燃液体が発火、瞬く間に炎上を始める。青い炎がパルヴァライザーを舐め回し、その中で命乞いのような哀れな機械音を立てる。 マユは荒く息をつきつつ、笑った。 「五月蝿いのよ、あなた──」 その動体反応もレーダー上のただの熱源に呑み込まれ、マユは肩の力を抜いた。 施設内部の制圧戦闘を請け負う第二陣主戦力の群列が砂埃を高く上げながら施設外周部に接近する様子を、マユは近くから傍観していた。先ほど無駄としか言い様のない艦砲支援を喰らわしてくれた艦艇は施設外周部戦域の境界線を割った辺りで待機し、周囲に多数のミラージュ社供出部隊が展開している。 安全の確度をとってから、施設へ進駐するという訳ね──。 第二陣主戦力に先行して特殊工作用MTが数機、自機の傍を一陣の突風と共に過ぎ、高出力で後続から突出したACがそれに続いていく。そしてその若干後方、多数の主戦力を従えるように一機のACが接近してくる。 マユはそのACに目を留めた。 濃蒼色を基調としたその中量級二脚機は汎用性を重視した兵装を搭載し、作戦の性質を深く吟味してきたのだろうとマユは察する。 特に際立った箇所のある機体に見えた訳でもなかったが、目を留めたのには他に理由があった。 此方への接近機動は相当に洗練された練達者のソレであり、友軍ながらそこに僅かな隙を見出す事も難しい。後後方に追従する第二陣主戦力のAC達も腕が悪い訳ではないが、あのACを前に立たせては有象無象の背景にしか、マユには捉えられなかった。 施設隔壁へ直進していたそのACの頭部が動き、マユはヴァルキリー・フェイバーのカメラアイを介して視線を重ねた。心持ちぎくりとした瞬間、直進機動を取っていたそのACが不意に進路転回を施し、此方へ突進してくる。右腕部に携える短機関砲を弾き上げ、正対から叩きつけられる殺意に背筋に戦慄が走るのを自覚した。 誰何の叫びは愚か明確な意図すらも忘れ、自らの得物を跳ね上げる。 僅か一秒足らずの間に互いの殺意が交錯、マユが引き金を絞ろうとした、正にその時だった。 『避けろ、貫かれるぞ──!』 開放状態の作戦回線に飛び込んできたのは、警告の声だった。 直前とは別の戦慄が全身を駆け抜ける。急速接近してくるACの搭乗者が発した警告の元凶が、自身の背後にいるのを察知、マユは進路を何処に選ぶかも判断せずただブースタペダルを踏み込んで機体を弾いた。 その僅かコンマ数秒後、高出力の収束照射光が機体の脇を疾り抜け、黄塵にまみれる荒野の上空へ一筋の軌跡を引く。 有視界の端に、収束光を放った元凶を見咎める。先ほど排除した筈のパルヴァライザー──。 隙を狙っていたというの──。 そこからの濃蒼色のACの行動は恐ろしく早かった。己が反転攻撃に転ずるより遥かに早く動き、左腕に携えたレーザーブレードの刀身を現出させ、突進機動からそのままに振り払う。敵機の腕部一体型兵装を斬り飛ばし、通り抜け様に機体を反転。側頭部に短機関砲の砲口を突きつけ、高速徹甲弾を撃ち込んだ。僅か発で頭部を粉砕されたパルヴァライザーが再度炎の海の中に沈み込んでゆく。 瀕死であったとはいえ数秒足らずで敵を無力化したACは、マユが呆気にとられている間に、元の進路へと急速に戻っていく。それを見送る傍ら、先方から再び無線が飛ばされてきた。 『──怪我はなかったか?』 「え、ええ──此方は大丈夫。えと、貴方、所属はっ──?」 礼を述べる事すらも忘れて、反射的にその問いを投げかけていた。一拍の間を置き、 『駆け出しの新人だ。次に機会があれば宜しく──』 何か返さねばと思ったがマユは終ぞ何を言う事も出来ず、その間に濃蒼色のACは後続の第二陣主戦力が到着する前に、所定軌道へと再び合流していった。 「──アレで新人?……参っちゃうわね」 後背で炎に包まれた鉄屑が繰り返す爆散の音響を聞き流しつつ、マユは小さく嘆息する。 性質の悪い冗談かどうかは兎も角として、相当に腕の立つレイヴンだという事は目の当たりにしてしまった。 直前の見立て通りとは、お世辞にも言えない。レイヴンとして中堅格に入ろうかというマユですらあのレイヴンの実戦行動力を浅く見積もっていた。 衝撃的、且つ鮮烈なものとして脳裏に残った記憶に、無意識の内に指が震えていた事にマユはこの時、気づけなかった。 しかし、それにしても──。 「今時、あんな奇特な子も、いるものなのね──」 無線を介して耳にした声音から、恐らくあのACの搭乗者は自分より一回り程の離れた男の子だろうという事は、直ぐに察しがついた。語調は戦士としての緊張感に満ちていたが、それくらいは誰でもわかる。 若年レイヴンは少数ではあるが、今時は然程珍しくもない。 マユにとって何よりも斬新だったのは、自由傭兵を名乗る鴉が自身に加勢したという事実だった。 破格の報酬と自身の確実な生存の為には共喰いをも厭わないのが、自分達〝鴉〟だ──。 今作戦の報酬は完全歩合制に基づいており、少しでもまともな神経を残しているレイヴンだったなら、恐らくあの場で私を見殺しにしていたかもしれない。そしてその後、背後で瀕死状態にあったパルヴァライザーをゆっくりと始末したことだろう。 駆け出しという言葉を間に受けるなら、先ほどの少年の行為は新参であるが故か、或いは本人の気質に基づいたものかもしれない。 真実のほどは最早分からないが、少なくともマユ・キリシマは悪い印象を抱いてはいなかった。 寸での所で自身の命を拾い上げたあの少年に対し、多少なりとも感ずる所があったからだろう。 そうでなければ或いは、比較して正対の戦士と戦火を交えた過去が、そう思わせているのかもしれない。 戦術支援AIに機体稼動状況を解析させ、戦域環境情報を含む諸情報をHMD画面へ瞬く間に出力する。そこで機体磨耗率に大きな変動がないことを確認、マユはブースタ・ペダルを踏み込んだ。 ──よし、まだ戦える。 施設外周部戦域の武力制圧が第一陣主戦力の担当野だったが、その後については自己判断のもと第二陣主戦力と合流、施設内部の制圧作戦に参加可能という旨が個別ブリーフィングで示されていた。 すぐ傍で業火に焼かれて炭化していく怨嗟の残骸を見下ろし、マユは吐き捨てる。 「アンタ達には、絶対負けない……」 既に施設隔壁間近に迫っている第二陣主戦力の最後尾を捕捉。後方ノズルから最大出力の噴射炎を吐き出し、ヴァルキリー・フェイバーの機体を施設隔壁へと向けた。 →Next… ② コメントフォーム 名前 コメント
https://w.atwiki.jp/auroot/pages/27.html
root後に使えるアプリ MarketEnabler https //market.android.com/details?id=com.notenking.mf hl=ja キャリアや国で制限のあるアプリをAndroidマーケットでダウンロードできるようになるアプリ。 国を偽装したい場合 アプリ起動後、上タブ「settings list」をタップ。 左側に国名が表示されているのでリストの中から選ぶ。 決定は 長押し → 「fake this provider now」 キャリアを偽装したい場合。 アプリ起動後、上タブ「set custom」をタップ 偽装したいキャリアの番号を入力。 ・docomo 44010 ・au 44070 ・SoftBank 44020 AdFree Android https //market.android.com/details?id=com.bigtincan.android.adfree 無料アプリなどに表示される広告を削除するアプリ。 アプリを起動してDownload Install Hostsをタップするだけ Swapper for Root https //market.android.com/details?id=org.azasoft.free.swapper SWAP領域を作成して端末を高速化するアプリ 使い方 アプリを起動後「Active Swap on Boot」にチェックを入れます。 必要ならSwap File Sizeの値を変更します。 「Save」をタップします。 SuperUserリクエストがポップアップするので許可で終了