背景

  • Platform: IMX6Q
  • OS: Android5.1
  • Kernel: 3.14.52

android5.1第三方APP对SD卡没有写权限:

http://blog.csdn.net/peng_cao/article/details/50508700
在Android kk版本之后(4.4, 5.0, 5.1, 6.0…);一般的应用程序(APP)是无法访问(读/写)外置SD卡的;仅仅只有系统级别的并且使用系统签名的APP可以访问外置SD卡
AndroidManifest.xml中添加android.permission.WRITE_MEDIA_STORAGE
Android.mk中添加LOCAL_CERTIFICATE := platform
不要在AndroidManifest.xml中添加share System UID 添加android.sharedUserId="android.uid.system"
第三方APP只能访问外置SD卡的应用程序目录,例如:*Android/data/com.example.foo/
系统APP只有使用了系统签名(platform certification)并且在AndroidManifest.xml声明了权限;才可以访问外置SD卡。
详细信息请参考(需要访问 android.com)Android Storage
主要问题点:
WRITE_EXTERNAL_STORAGE权限是用来控制对主外置存储的写入的,APP是无法获得外置SD卡的写入权限的,除去SD卡中的APP目录(*Android/data/com.example.foo/),这样可以确保APP在卸载的时候可以删除对应目录
解决APP访问外置SD卡的方案:
修改/frameworks/base/data/etc/platform.xml

<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
    <group gid="sdcard_rw" />
    <group gid="media_rw" /> // Add this line ,the WRITE_MEDIA_STORAGE permission to the WRITE_EXTERNAL_STORAGE permission, so apps do not experience the described problem.
</permission>

AndroidManifest.xml中加入android.permission.WRITE_MEDIA_STORAGE
注意:
此修改可能导致CTS无法通过
#remount,rw /dev/block/mmcblk2p1 /mnt/media_rw/extsd/