これまでアプリがカメラやカレンダー、地理情報、マイク、通話機能、センサー、SMSなどにアクセスする権限に関する注意は、インストール/アップデート時にのみ表示されていましたが、これからはその権限を必要とする機能の初回実行時に許可を求められるようになります。ユーザーは、アプリごとに個別に機能ごとの権限を付与したり取り消したりすることができるようになります。
これにより、開発者はアプリが権限を与えられているかどうかを実行時にチェックすることが必要になりました。権限の許可を確認する場合はContext.checkSelfPermission()を、許可を要求する場合はActivity.requestPermission()を呼び出します。
この変更による影響はパーミッションを使用する全てのアプリに影響します。パーミッションに関する詳細情報は『Permissions | Android Developers』を、アプリへの影響を評価する方法は『Testing Guide | Android Developers』のTesting Permissionsを参照してください。
一定期間のスクリーンオフが続くと、システムはDoze(居眠り)モードに入ります。Dozeモードは以下のような制限があります。
デバイスがDozeモードから抜けると、保留されていた同期とジョブが実行されます。Android MでDozeモードを評価したい場合、以下のコマンドを実行することで可能です。
$ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step $ adb shell dumpsys deviceidle -h
デバイスを操作していない状態であれば、「アプリはアイドル状態である」と判断できます。以下の状態ではない限り、アプリは一定期間後にアイドル状態になります。
デバイスを充電していない場合、アプリはアイドル状態となります。ネットワークアクセスが無効になっている場合は、同期およびジョブが中断されます。充電中の場合は、アプリはネットワークアクセスが許可され、保留された全ての同期とジョブを実行できます。デバイスが長時間アイドル状態の場合、アイドル状態のアプリは1日1回、ネットワークアクセスが許可されます。
Android MでApp standbyモードを評価したい場合は、以下のコマンドを実行することで可能です。
$ adb shell dumpsys battery unplug $ adb shell am set-idle <packageName> true $ adb shell am set-idle <packageName> false $ adb shell am get-idle <packageName>
Android Mでは、ユーザーが直感的かつ迅速に共有を行うためのAPIが追加されました。アプリのActivity内でダイレクトシェアするターゲットを定義できます。これらのダイレクトシェアターゲットは[共有]メニューでユーザーに公開されています。この機能により、ユーザーは連絡先などのターゲットに対しコンテンツをシェアできます。
例えば、ダイレクトシェアターゲットは特定の友人やコミュニティにコンテンツをダイレクトシェアするため、他のSNSアプリのアクティビティなどを起動することがあります。
ダイレクトシェアターゲットを有効にするには、android.service.chooser.ChooserTargetServiceのサブクラスを定義しなければなりません。そしてマニフェストにChooserTargetServiceを宣言します。その宣言内でBIND_CHOOSER_TARGET_SERVICE権限とインテントフィルターSERVICE_INTERFACEを指定します。
以下例は、ChooserTargetServiceをどのように宣言するかを示したマニフェストの一部です。
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
公開するActivityごとに<meta-data>を定義して「"android.service.chooser.chooser_target_service"」の値にChooserTargetServiceを指定します。
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
Android 5.0で正式に導入された新しい実行エンジン「ART(Android RunTime)」ですが、Android Mでいくつか変更点があります。
まず、適切なアクセスルールに基づくnewInstance()が実装されました。この変更により、以前のバージョンでDalvikが誤ったアクセスルールに基づいてチェックしていた問題が修正されます。
アプリがnewInstance()を使用してアクセスチェックを無効にしたい場合、setAccessible()にtrueを渡して呼び出します。
アプリがappcompatライブラリ(※)V7またはRecyclerViewライブラリV7を使用している場合、これらのライブラリを最新バージョンに置き換える必要があります。それ以外の場合は、対象のクラスのコンストラクターにアクセスできるようにXMLから参照するカスタムクラスが更新されていることを確認します。
※appcompatはAndroidでActionBarを表示するためのライブラリです。
またAndroid Mでは、ダイナミックリンカーの動作を更新します。ダイナミックリンカーはライブラリのsonameとそのパスとの差異を理解し、sonameによる検索が実装されました。ロードされたときに不正なDT_NEEDEDエントリ(ビルドマシンのファイルシステムの場合は、通常絶対パス)を持っている場合、以前動作していたアプリが失敗することがあります。
さらにAndroid Mでは、dlopen(3)のRTLD_LOCALフラグが正しく実装されました。dlopen(3)で明示的にRTLD_LOCALを除外していない場合、RTLD_LOCALはデフォルトであることに注意してください。RTLD_LOCALを使用すると、シンボルはdlopen(3)以降でロードされたライブラリが利用されることはありません。
Copyright © ITmedia, Inc. All Rights Reserved.