Android M(SDK 23) から permissions の扱いが変わっていますが, N(SDK 24)では permissions の設定がまたさらに変わっているようです.
sdcard からファイルを読みたい.
漢だったら, アプリ開発時には /sdcard からファイルを読み書きしたいですね!
しかし NDK で fopen, ifstream などで /sdcard にアクセスしようとするとファイルが見つからないというエラーが出るようになります(Java レイヤーでもそうですが).
そのため, AndroidManifest.xml で READ_EXTERNAL_STRAGE, WRITE_EXTERNAL_STRAGE の permission を設定する必要があります.
<uses-permission-sdk-m android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission-sdk-m android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
を見ると, uses-permission ではなく uses-permission-sdk-m が推奨のようです.
Android N
Android M では上記の設定で /sdcard からのファイルが読み書きができるようですが, Android N ではこれだけでは不十分で, さらに実行時にユーザに permission の許可を求める必要があります.
でも NDK で C++ でアプリ作っている時に, 上記サンプルのように Java で permission を求めるコード書くのはめんどくさすぎですね...
一旦 apk をインストール後, Android 実機で Settings -> Apps -> YOUR_APP -> Permission で設定できました. これで /sdcard を読み書きできるようになります.
(apk 上書きでアップデートの場合は permission は引き継がれるっぽい)
TODO
- 優秀な Android N 若人を, 合法的なあらゆるどんな手段を使ってでも探し出し, 優秀な Android N 若人が自ら Android 開発の高みを極めてくれるスキームを確立したい