预置SDcard资源
来源:互联网 发布:小众音乐软件 编辑:程序博客网 时间:2024/05/19 02:30
此方法是将需要预置到手机中的媒体文件,包括音频视频等,预置到SDcard中。并实现用户可以手动删除,在恢复出厂设置的时候可以恢复。同样这一套机制也可以用来预置应用的配置文件等其他需要存放在data分区下的数据,实现原理就是恢复出厂设置只会清除data分区下的数据,在手机第一次开机或者恢复出厂设置的时候重新依靠脚本把提前预置到system分区下的文件拷贝到data区。
1.在系统device/project/copyfile/system/bin下添加.sh文件,内容如下:
#!/system/bin/sh #android里添加.sh文件必须要添加的第一行,要不系统不会识别 setprop persist.vold.sdcard.copy 0 #需要提前预置一个busybox,android源码里不支持tar命令 /system/xbin/busybox tar -xvf /system/preinstall/text/text.tar -C /data/media/ sync setprop persist.vold.sdcard.copy 1
2.把想要预置的东西,用在linux下用tar命令打包,放到目录device/project/copyfile/system/preinstall下
3.在init.rc下添加一个服务testserveice,代码如下:
#注意格式,顶格写,m=1之间不能加空格 on property:persist.vold.sdcard.copy.run=1 #注意格式,前面四个空格 start huaweicopy on property:persist.vold.sdcard.copy.run=0 stop huaweicopy service huaweicopy /system/xbin/busybox sh /system/bin/huawei.sh // 添加/system/bin/logwrapper可以打印log class main user media_rw #这里user和group都是用的media_rw,因为我们拷贝到的地方是/data/media下面 group media_rw #开启了MTK_SHARED_SDCARD之后,内置卡其实就是data/media disabled oneshot # end add by
4.在system/vold/Volume.cpp下添加代码,主要目的是在系统启动时,mountSD卡之后才执行我们的.sh,代码如下:
PS:调试时候用到的命令
adb shell下可以行的命令getprop用来获取手机里存在的,setprop persist.vold.sdcard.copy.run 1手动设置变量;
void Volume::setState(int state, bool isFat32) { char msg[255]; int oldState = mState; if (oldState == state) { return; } if ((oldState == Volume::State_Pending) && (state != Volume::State_Idle)) { mRetryMount = false; } mPreState = oldState; mState = state; SLOGD("Volume %s state changing %d (%s) -> %d (%s), isFat32(%d)", mLabel, oldState, stateToStr(oldState), mState, stateToStr(mState), isFat32); snprintf(msg, sizeof(msg), "Volume %s %s state changed from %d (%s) to %d (%s) %d", getLabel(), getFuseMountpoint(), oldState, stateToStr(oldState), mState, stateToStr(mState), isFat32); if (!strcmp(stateToStr(mState) ,"Mounted")) { /* code */ char internalcontent[PROPERTY_VALUE_MAX]; //主要用来实现启动脚本的代码 SLOGD("@@@@@@@@@@@@@@@@@@@@@@@@"); memset(internalcontent,0,PROPERTY_VALUE_MAX); property_get("persist..vold.sdcard.copy",internalcontent,"0"); if (strcmp(internalcontent, "0")==0) { property_set("persist.vold.sdcard.copy.run", "1"); } }
PS:调试时候用到的命令
adb shell下可以行的命令getprop用来获取手机里存在的,setprop persist.vold.sdcard.copy.run 1手动设置变量;
1 0
- 预置SDcard资源
- 预置APK文件到sdcard下
- android preinstall 预置应用及资源
- VideoView 加载本地(非SDCARD)资源
- sdcard
- sdcard
- Android sdcard创建文件夹及写入工程目录视频资源
- Android实现将Drawable资源ID存储到Sdcard上
- Android 对于第三方预置可卸载的apk,如何客制化其在主题中的资源?
- 当有内置SD卡,且不打开shared sdcard功能的情况下,需要在SD卡中预置一些客户资源。
- 预置APK
- 预置联系人
- 预置apk
- 预置分频器
- 预置宏
- 预置体解除预置体属性 预置体应用
- 关于Android读取不同位置(drawable,asset,SDCard)的图片资源的总结
- 关于Android读取不同位置(drawable,asset,SDCard)的图片资源的总结
- Anroid开发之Xml的解析
- 【Android】信鸽推送通知栏点击之重复打开APP&重复从Laucher主入口启动问题
- Android 开发中遇到Read-only file system问题解决方案
- 在oracle sql 中处理日期大全
- NodeJS和Socket.IO搭建聊天室应用
- 预置SDcard资源
- Gradle依赖的统一管理
- SAP HR的使用心得
- Spring整合CXF,发布RSETful 风格WebService
- [平常积累]
- Qt 拖放
- 上一篇的运行结果图片
- 使用 LINQPad 将linq转换为 lambda表达式 或者 SQL语句
- 全国软件3.考察团组成