Android ダイレクトブートを検知するで書いたんですけど、AndroidN以降から、端末が起動して、ユーザーがロックを外す前は今までアクセスしていたPreferencesファイルにアクセスできません。
今までアクセスしていたPreferencesファイルとは、
getDefaultSharedPreferences(context);
でアクセスしていたアレです。
なので、ユーザーがロックを外す前にPreferencesファイルから読み書きなどしたい場合は、「端末暗号化ストレージ」に保存しなくてはいけません。
今までアクセスしていたPreferencesファイルは、「認証情報暗号化ストレージ」と呼びます。
さてさて、今まで使っていた「認証情報暗号化ストレージ」は、下記のような場所にあります。
パッケージ名は「com.ukiki」だとします。
/data/user/0/com.ukiki/shared_prefs/com.ukiki_preferences.xml
「端末暗号化ストレージ」は下記にあります。〇〇〇は任意の名前です。
/data/user_de/0/com.ukiki/shared_prefs/〇〇〇.xml
具体的に、この「端末暗号化ストレージ」に保存した中身を見たい場合は、下記のようにします。
ADBを使います。
adb shell run-as com.ukiki
cd /data/user_de/0/com.ukikit/shared_prefs
ファイル名に自信がないときは、lsで一覧で確認できます。
ls ukiki.xml
権限を変更してから、/sdcardなどにコピーします。
chmod 777 ukiki.xml
cp /data/user_de/0/com.ukikit/shared_prefs/ukiki.xml /sdcard
一応、/sdcardにコピーされたか確認します。
cd /sdcard ls //あとはファイルの一覧が出てきます。 exit
さて、後はadbでPCにファイルをコピーします。
adb pull /sdcard/ukiki.xml G:\test
はぁー。やっと、これでパソコン上で端末暗号化ストレージに保存したpreferencesファイルが見られるようになりました!
ちなみに、私の愛機 Samusung Galaxy SC-02Hでは
Operation not permitted
となってしまい、この操作はできません(>_<) サムソンではできないらしいです。残念!!! https://stackoverflow.com/questions/37413667/run-as-could-not-set-capabilities-operation-not-permitted