スポンサーリンク

Android4.4KitKat で,SDカードへ書き込みできない問題の解説および対策の方法。root権限で設定を編集すると回避可能


Android4.4(KitKat)で,SDカードへの書き込みができなくなる件について,詳細および対策方法のまとめ。

  • 「内部ストレージ」は今までどおり書き込み可能。(端末内にある,インストールしたアプリ本体の置き場)
  • また,SDカード上の「アプリのパッケージ固有フォルダ内」も,書き込み可能。(プライマリ外部ストレージと,一部のセカンダリ外部ストレージ)
  • それ以外(一般的な外部ストレージ)は,書き込みが不可能になった。

この変更の目的は,セキュリティの向上ということだ。


SDカード書き込みをできなくする方針:

KitKat端末では今後アプリからMicro SDカードへの書き込みができくなる模様 | juggly.cn
http://juggly.cn/archives/106598.html

  • このような方針とした理由については、 Androidは外部ストレージに保存されたデータを保護するための機能として、最小限のシステムコードしか持っていませんので外部ストレージに機密データを格納しないでください。具体的にコンフィグファイルやログファイルです。
  • このように書き込みを制限することで、アプリがアンインストールされるときにシステムがファイルをクリーンアップできようになります。


技術的に詳しい情報:

Sony Xperia Z2 レビュー : マイクロSD問題について: SAPO NO BLOG
http://saponoblog.seesaa.net/article/...

  • (1)Android OS の『メインストレージ』あるいは『内部ストレージ』・・・アプリ内部情報
    • アプリおよびアプリに強く紐付けられた情報の置き場所
    • AndroidOS のシステム本体や,インストールしたアプリの本体が配置される
    • 個々のアプリ毎の固有データを保存するディレクトリ(通常は"data/"配下)があり、サンドボックス化されている。アプリ固有に保存するものとして,例えばログイン用パスワードデータのようなものは,他アプリからのアクセスを禁止するためにこのローカルディレクトリ内に保存
  • (2)『サブストレージ』や『外部ストレージ』と呼ぶ場所・・・公開情報
    • 汎用データとして読み書きする情報(音楽や動画とかそのほか諸々)の置き場所。色々なアプリから自由にアクセスできる公開データの置き場
    • スマホなどではmicroSD の物理メディアを差して実装してあったために『外部ストレージ=マイクロSD』というのが定番になってしまった。そのためにマウントされたディレクトリ名も"sdcard"が一般化してしまった
    • “端末内部にあるが外部ストレージ”は『プライマリ外部ストレージ』
    • SDカードを簡単に抜き差しできる SDカード・スロットは,厳密には『セカンダリ外部ストレージ』と呼ぶ。ファイラーで見ると "sdcard1" とか表示されることが多い
    • “KitKat でのSDカード問題”と漠然と呼ばれている件は、より正確な表現をすると“『セカンダリ外部ストレージ』への書き込みはアプリ固有のパッケージディレクトリを除き不可能”
  • (1)の「アプリ内部情報(内部ストレージ)」と(2)の「公開情報(外部ストレージ)」は,別々のストレージ領域を使うことを前提にシステムが設計されている


SDカード上で普通のアプリが書き込みが可能なのは,

「そのアプリ固有のパッケージディレクトリ」のみ。

Android 4.4以降のSDカード書き込みについて | FAIRWAY Engineer Blog
http://dev.blog.fairway.ne.jp/android...

  • 全くSDカードに書き込めないというわけではありません。 全く書き込めなければSDカード対応という存在意義がなくなってしまいますよね。 下記パスにならアプリ側から書き込みが可能なようです。 [SDカードのroot]/Android/data/[パッケージ名]/[ここから書き込みできます]


AndroidはKitKat以降アプリからSDカードへの書き込み不可に? - 真実の楽譜(フルスコア)
http://truthfullscore.hatenablog.com/...

  • 完全に書き込みができないのではなく、 SD内のアプリケーションのパッケージ固有ディレクトリ[SD\Android\data\パッケージ名\] なら保存できるってのが正確な仕様


サードパーティーのアプリは,ファイラーとして,もはや使えない。

アストロ・ファイルマネージャとかも絶望的だ。


ただし,端末にプリインストールされている「File Commander」のようなアプリからは

SDカード上のファイル操作が可能。

Android 4.4の書き込み制限 | スマートフォンはgooスマホ部
http://sp.oshiete.goo.ne.jp/qa/view/6...

  • OS 4.4にすると、Playストアからダウンロードしたファイルマネージャー系アプリでSDカードへの書き込みが出来なくなります。 これは「Yahoo!ファイルマネージャー」だけでなく、他のファイルマネージャー系アプリでも書き込みが出来ません。
  • SDカードへの移動・名称変更・フォルダ生成を行う際には、端末に元々入っている「File Commander」アプリを利用してください。


SDカード上へのアプリのインストールといった使い方も制限されてしまった。


なので,以前の

「SDカードを思いっきり使うから内蔵ストレージは小さくてもいい」

という発想が通用しなくなった。


内蔵ストレージが小さければ,スマホ代金が安く上げられる,という技がこれまでは使えたのだが。

ソニーの薄型軽量タブレット「Xperia Z2」がNexus 7を猛追!? - 「Android 4.4」の挙動の違いに戸惑い!? 日経トレンディネット
http://trendy.nikkeibp.co.jp/article/...

  • microSDカードにデータを保存することはできるが、アプリをインストールすることはできない。
  • 以前のバージョンのAndroid OSでも外部メモリーカードへのアプリのインストールには多くの制限があったので、仕方のない変更

しかし「内蔵メモリーの容量を抑えて安く入手し、外部メモリーをうまく活用する」といった使い方には限界がある


では,どうやって対処できるか?


この「SDカードに自由に書き込めない」という欠点は,

設定ファイルのXMLを編集すると,回避できる。


root権限があればこの編集が可能。

Android 4.4でのSDカードへの書き込み制限を回避する方法 AndroPlus
http://androplus.org/Entry/148/

  • ユーザー側からすれば、使い慣れたアプリでSDカードへ書き込めないのはとても不便です。
  • この書き込み制限は/system/etc/permissions/platform.xmlの表記が変わっただけなので、これを編集すればこれまで通りに使えるようになります。 ※要root


価格.com - 『Kitkat 4.4.2 SDカード問題』 サムスン GALAXY Note 3 SC-01F docomo のクチコミ掲示板
http://bbs.kakaku.com/bbs/J0000010690...

  • root取得済み端末の場合 /system/etc/permissions/platform.xmlファイルのWRITE_EXTERNAL_STORAGEパーミッションに1行追加することにより解決する。
  • 非root端末の場合 Kitkat 4.4.2へのアップデートを行わないように。


Android4.4 KitKatでのSDカードの書き込み制限を無効にしよう!Xposedモジュールでやってみた。【要root】 | ぺっぱーろぐ!
http://pepper-nxt.blogspot.jp/2014/06...

  • root権限があれば/system/etc/permissions/にある「platform.xml」の書き換えだけで制限を無くすことができます


あるいは,別の対策として,「SDカードのスロットがある端末をそもそも使わない」という手もある。Nexusみたいに。


または,SDカードを引っこ抜いて,カードなしで使うという人もいる。


ほかの手は,4.4.2へのアップデートを行なわないでおく,とか,

ダウングレードして4.3にする手もある。

Android 4.4 (KitKat)の甘い罠にはまった件: See_You_Laterのブログ Part 2
http://see-ya-ater2.cocolog-nifty.com...

  • 外部ストレージの無いNexus7(2013/2012モデル)


Android 4.4はSDカード無しで使う - ヲレサイト
http://woresite.jp/2014/08/20/054317....

  • SDカードがいなければ、アプリが作成する一時ファイルなんかの場所は,自動的に内部ストレージ(RAM)に切り替わってちゃんと動作するようになっただよ。