解决方法一:
在system/vold 模块里的 Volume.cpp文件
在调用doMount的语句里做一下修改:
doMount(devicePath, path, false, false, false,1000, 1015, 0702, true)
↓
doMount(devicePath, path, false, true, false,1000, 1015, 0002, true)
修改后进行编译生成可执行bin文件,经过测试,直接push这个bin文件到手机中并不能解决这个问题,需要重新编译安卓或者相应的image文件。
解决方法二:
把SD卡操作的功能独立出去,做成一个独立的APK,然后在原项目中调用改功能。
注:网上还写有第三种解决办法,即在Android.mk中添加LOCAL_CERTIFICATE := platform。经测试,这种办法是不成功的。
因为,LOCAL_CERTIFICATE := platform与android:sharedUserId="android.uid.system"是相对应的,必须同时出现。
只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key。在"build\target\product\security"下有platform.pk8和platform.x509.pem两个文件,用这两个key签名后apk才真正可以放入系统进程中。在Android.mk中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。