uses-permission-sdk-23はないやろと思った件
Android M Preview版のドキュメントで<uses-permission-sdk-m>というのがあり、最後までドキュメントから消えなかったのですが、Android 6.0としてリリースされた時にPreviewの説明ページと共になくなりました。良かった、良かったと思っていたら、<uses-permission-sdk-23>という物がこっそりと入っていました。http://developer.android.com/intl/ja/guide/topics/manifest/uses-permission-sdk23-element.html
<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" />
<uses-permission>は、マニフェスト内でパミッションを利用宣言するに使われます。
<uses-permission-sdk-23>は、一言で言うとAPI Level23(Android 6.0)以上で有効になるパミッションを利用宣言する時に使用します。23未満だと、そんな単語しらないという事でシステムで無視されます。
Android M Previewの時にあった、<uses-permission-sdk-m>が名前変わっただけで残っていました。
翻訳
指定した特定のパミッションを、アプリケーションがSDKバージョン23以上のデバイスで動いている時に取得したい時に宣言します。アプリケーションがSDKバージョン22以下のデバイスで動いている時はパミッションは取得しません。このエレメントは、アプリケーションをアップデートする時に、新しい機能があり追加のパミッションが必要な時に便利です。
ユーザがsdkバージョン22以下のデバイス上で、アプリケーションを更新した場合、システムは更新中に、利用宣言された全てのパミッションを承認するようにユーザに要求します。
新機能がまだまだマイナーな機能である場合、あなたは、SDKバージョン22以下のデバイスでこれらの機能を無効にする事ができ、ユーザはアプリケーションのアップグレード時に追加のパミッションを許可する必要がありません。
<uses-permission>の代わりに<uses-permission-sdk-23>を使用する事で、インストール時ではなくアプリが動いている時にパミッションを取得するランタイムパミッションモデルをサポートしているデバイスでアプリケーションが動いている時だけパミッションを要求する事ができます。
パミッションのもっと細かい情報については、introductionの中のPermissionセクションや、System Permissions APIガイドを参照してください。プラットフォームで定義されたパミッションリストは、android,Manifest.permissionで参照できます。
その他
<uses-permission>と同じように、maxSdkVersionを指定できますから、SDKバージョン23から25までパミッションを取得するとか指定できます。しかし、本当にこれ使うのでしょうかいまいちピントきません。今までユーザーにパミションの強要をしてきているわけで、今更あまり使わない機能のパミッションを、古いモデルで動かすときは、要求を出さないようにしようと凄い親切な事言われてもピンときません。
仕様を複雑にしているだけのような気もしますが、どなたか有用な使い方ありましたら教えてください。(文句ばかりですいません)
追記(2015/11/04)
以前は「uses-permission-sdk23はないやろと思った件」 という記事タイトルだったのですが、「uses-permission-sdk-23はないやろと思った件」に変更しました。
※sdkの前にハイフンがあるかないかの違いです。
GoogleのAndroid Devサイトの方で、sdk23とハイフンなしで記載されていたのですが、しれっと修正されていたのに気が付きました。
ハイフンなしだと、知らないタグ扱いされますので、プログラム上で無視されるので注意してください。