开机copy 方式,内置apk

本文介绍了一种在Android设备上实现预装应用并允许用户手动删除的方法。通过将预装应用放置在/system/preloadapp目录并在首次开机时执行preloadapp.sh脚本将其复制到/data/app目录来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from:http://blog.chinaunix.net/uid-29535415-id-4168539.html

Android系统量产版本编译都是user版本或者叫release版本,放在system/app目录下的apk是不允许终端用户手动删除的。
要实现能够让手动删除,下面讨论一种方法就是先将预备安装的应用放/system目录下某一个目录中如preloadapp目录,
在首次开机的时候执行一个脚本如preloadapp.sh将该目录的应用拷贝到data/app目录即可

将要预安装的apk放入system/preloadapp目录,第一次开机的时候执行preloadapp.sh脚本
将preloadapp目录的apk拷贝到data/app目录中,然后再开始安装apk,这样安装的apk就能够被手动删除,恢复出厂设置
删除data/app目录的apk,而system/preloadapp目录的apk可以保留。


缺点:同一个apk占用系统两份空间,system/preloadapp 和data/app

1>preload脚本

点击(此处)折叠或打开

=========================================================================
#!/system/xbin/busybox sh
PRELOAD_DEST=/data/app
PRELOAD_FLAG=${PRELOAD_DEST}/.preloadapp
PRELOAD_SOURCE=/system/preloadapp

if [ ! -d ${PRELOAD_DEST} ]
then
mkdir -p ${PRELOAD_DEST}
fi

if [ ! -f ${PRELOAD_FLAG} ]
then
cp -f ${PRELOAD_SOURCE}/* ${PRELOAD_DEST}
echo "abcd" > ${PRELOAD_FLAG}
fi
=========================================================================


2>首次开机的时候执行脚本

点击(此处)折叠或打开

device/xxx/xxxx/init.xxxx.rc中增加如下代码,让android系统启动的时候执行preloadapp.sh脚本
=========================================================================
service preloadapp /system/bin/logwrapper /system/xbin/preloadapp.sh
user system
class main
disabled
oneshot
=========================================================================

3>需要做preload的apk编译安装路径设置
将所有需要做preload动作的apk可以指定放入system/preloadapp目录即可
<think>我们正在讨论如何将虚拟机中的文件同步到NAS。根据引用内容,用户提到在威联通(QNAP)NAS上可以通过Windows虚拟机、黑群晖或Docker来实现与百度云的同步。但用户当前的问题是将虚拟机中的文件同步到NAS,可能是在虚拟机中运行了一个系统(如Windows)并希望将其中的文件备份到NAS。 根据引用,用户可能是在QNAP NAS上运行了一个Windows虚拟机,现在需要将这个虚拟机内部的文件同步到NAS的其他位置(例如另一个共享文件夹)。或者,用户可能是在其他虚拟化平台(如VMware、VirtualBox)上运行虚拟机,需要将虚拟机内的文件同步到NAS。 这里我们分两种情况讨论: 1. 虚拟机运行在NAS上(如QNAP的Virtualization Station中):此时虚拟机是NAS本机上的一个虚拟机,可以直接利用NAS的文件系统进行同步。 2. 虚拟机运行在外部服务器或PC上:此时需要通过网络将虚拟机内的文件传输到NAS。 由于用户的问题描述中提到了“虚拟机中的文件”,我们假设用户已经有一个虚拟机(无论运行在NAS上还是外部机器上),需要将虚拟机内部的文件同步到NAS。 下面提供几种方法: 方法一:在虚拟机内部安装同步客户端(推荐) - 步骤: 1. 在虚拟机内部安装一个可以访问NAS的客户端,例如使用SMB/NFS协议挂载NAS共享文件夹,或者使用rsync等工具。 2. 在虚拟机内部配置同步任务,将需要同步的文件复制到挂载的NAS共享文件夹中。 方法二:从宿主机同步(适用于虚拟机运行在外部宿主机的情况) - 如果虚拟机运行在外部宿主机上,可以将虚拟机磁盘文件直接同步到NAS(但这样会同步整个磁盘,可能较大),或者使用共享文件夹将宿主机目录作为中介。 方法三:使用快照和导出(适用于虚拟机在NAS上运行的情况) - 如果虚拟机运行在NAS的虚拟化平台上(如QNAP的Virtualization Station),可以直接利用NAS提供的快照和导出功能,将整个虚拟机导出到NAS的另一个位置。 下面我们以方法一(在虚拟机内部操作)为例,详细说明如何将虚拟机中的文件同步到NAS: 步骤1:在虚拟机中挂载NAS共享文件夹 - 如果虚拟机是Windows系统: 1. 打开“文件资源管理器”,点击“此电脑” -> “映射网络驱动器”。 2. 输入NAS的共享文件夹路径(如`\\NAS_IP\共享文件夹名称`),并输入NAS的用户名和密码。 3. 映射完成后,虚拟机的Windows就可以像访问本地磁盘一样访问NAS共享文件夹。 - 如果虚拟机是Linux系统: 1. 创建挂载点:`sudo mkdir /mnt/nas` 2. 挂载共享文件夹(使用CIFS协议): ```bash sudo mount -t cifs //NAS_IP/共享文件夹名称 /mnt/nas -o username=用户名,password=密码 ``` 3. 为了开机自动挂载,可以编辑`/etc/fstab`: ``` //NAS_IP/共享文件夹名称 /mnt/nas cifs username=用户名,password=密码 0 0 ``` 步骤2:在虚拟机内部配置同步 - 手动复制:直接将需要备份的文件复制到挂载的NAS共享文件夹中。 - 使用同步工具:如rsync(Linux)或robocopy(Windows)进行增量同步。 步骤3:设置定时任务(以Linux虚拟机为例) - 创建同步脚本`/opt/sync_to_nas.sh`: ```bash #!/bin/bash rsync -av /path/to/source/dir/ /mnt/nas/destination/ ``` - 赋予执行权限:`chmod +x /opt/sync_to_nas.sh` - 设置cron定时任务(每天凌晨2点同步): ```bash echo "0 2 * * * /opt/sync_to_nas.sh" | sudo tee -a /etc/crontab ``` 注意:如果虚拟机是Windows,可以使用“任务计划程序”来设置定时任务。 方法二:从宿主机同步(以VirtualBox为例) - 步骤: 1. 在宿主机上挂载NAS共享文件夹(方法同上,根据宿主机系统选择)。 2. 配置VirtualBox的共享文件夹,将虚拟机内的源目录共享给宿主机(需要安装VirtualBox增强功能)。 3. 在宿主机上,将共享文件夹内的文件同步到已挂载的NAS共享文件夹。 方法三:使用NAS的虚拟机导出功能(适用于虚拟机运行在NAS上) - 如果虚拟机运行在QNAP的Virtualization Station中: 1. 登录QNAP管理界面,进入Virtualization Station。 2. 选择要备份的虚拟机,点击“导出”按钮。 3. 选择导出位置(NAS上的另一个文件夹),并设置导出选项(如是否包含快照)。 4. 可以设置定时导出任务(通过QNAP的“排程任务”)。 注意:导出整个虚拟机可能会占用大量空间,且时间较长。 总结:根据虚拟机的运行位置和需求,选择合适的方法。如果只需要同步虚拟机内的部分文件,推荐方法一(在虚拟机内部操作)。如果需要备份整个虚拟机,则使用方法三(导出)或方法二(同步虚拟机磁盘文件)。 相关问题: 1. 如何将VirtualBox虚拟机文件定时备份到NAS? 2. 如何在QNAP NAS上设置虚拟机定时导出? 3. 在Windows虚拟机中如何设置定时任务同步文件到NAS? 4. 如何优化大文件从虚拟机同步到NAS的速度? 5. 如何确保虚拟机同步到NAS的数据安全性(加密)? 注意:以上方法中,如果使用SMB/CIFS挂载,需要注意网络连接的稳定性。对于重要数据,建议在同步完成后进行校验。</think>以下是将虚拟机中的文件同步到NAS的完整解决方案,分为本地虚拟机(如VMware/VirtualBox)和NAS内置虚拟机(如QNAP Virtualization Station)两种情况: --- ### 一、本地虚拟机(VMware/VirtualBox)同步方案 #### 方法1:共享文件夹挂载(推荐) 1. **配置宿主机-NAS连接** ```bash # 宿主机挂载NAS共享目录(以NFS为例) sudo mkdir /mnt/nas_backup sudo mount -t nfs NAS_IP:/share/backup /mnt/nas_backup ``` 2. **设置虚拟机共享文件夹** - VMware/VirtualBox:设置 > 共享文件夹 > 添加宿主机目录(如`/mnt/nas_backup`) - 设置自动挂载(重启后生效) 3. **虚拟机内同步文件** - **Windows虚拟机**: ```powershell # PowerShell脚本 sync_to_nas.ps1 robocopy "C:\重要数据" "Z:\vm_backup" /MIR /Z /R:3 /W:5 /LOG:C:\logs\backup.log ``` - `/MIR`:镜像同步(含删除) - 任务计划程序设置每日执行 - **Linux虚拟机**: ```bash # /opt/sync_nas.sh rsync -av --delete /home/user/data/ /mnt/hgfs/nas_backup/vm_data/ ``` 添加cron定时任务: ```cron 0 3 * * * /opt/sync_nas.sh ``` --- #### 方法2:SSH直连同步(免挂载) ```bash # 虚拟机内直接同步到NAS(需安装rsync) rsync -avz -e "ssh -p 22" \ /虚拟机/源目录/ user@NAS_IP:/share/backup/vm_data \ --exclude="*.tmp" ``` **优势**:无需挂载,适合临时备份 --- ### 二、NAS内置虚拟机同步方案(QNAP为例) #### 方法1:Virtualization Station直接导出 1. **登录QNAP管理界面** > **Virtualization Station** 2. 选择虚拟机 > **更多操作** > **导出** 3. 设置导出路径(如`/share/Backup/VM_Backups`) 4. **配置定时任务**: - 控制面板 > **任务计划** > 新增 > **用户脚本** ```bash # 导出脚本 /share/scripts/export_vm.sh /sbin/vm_export 虚拟机ID /share/Backup/VM_Backups ``` - 设置每日执行时间 --- #### 方法2:虚拟机内部同步(推荐) 1. **NAS创建专属备份账号** 控制面板 > **权限** > 创建用户`backup_user`,仅授权备份目录 2. **虚拟机内挂载NAS共享** ```bash # Linux虚拟机挂载命令 mount -t cifs //NAS_IP/VM_Backups /mnt/nas \ -o username=backup_user,password=您的密码 ``` 3. **配置增量同步脚本** ```bash # /opt/qnap_sync.sh rsync -av --partial --progress \ /home/ /mnt/nas/vm-home-$(date +\%Y\%m\%d)/ ``` 4. **设置QNAP任务计划** ```cron # 控制面板 > 任务计划 > 添加Cron任务 0 2 * * * /opt/qnap_sync.sh ``` --- ### 三、Docker容器同步方案 ```dockerfile # Dockerfile 示例 FROM alpine RUN apk add rsync openssh-client COPY sync_script.sh /app/ CMD ["/app/sync_script.sh"] ``` 同步脚本: ```bash #!/bin/bash # sync_script.sh rsync -av /container/data/ backup_user@NAS_IP:/share/container_backup ``` 运行容器(绑定数据卷): ```bash docker run -d \ -v /宿主机/数据卷:/container/data \ --name sync_container \ 你的镜像 ``` --- ### 四、安全增强措施 1. **传输加密** ```bash rsync -av -e "ssh -c aes256-ctr" ... # 使用强加密算法 ``` 2. **备份加密** 同步前用GPG加密: ```bash tar czf - /data | gpg -c > backup_$(date +%F).tar.gz.gpg ``` 3. **权限控制** ```bash chmod 600 /opt/sync_*.sh # 限制脚本权限 ``` --- ### 五、验证与监控 ```bash # 检查同步日志 tail -f /var/log/sync_$(date +%F).log # 验证文件完整性 diff -r /源目录 /mnt/nas/备份目录 | grep "Only in" ``` --- ### 常见问题解决 - **权限拒绝错误**:确保`backup_user`对NAS目录有写入权限 - **连接超时**:在`/etc/ssh/ssh_config`添加: ```conf ServerAliveInterval 60 ``` - **磁盘空间不足**:同步前检查空间: ```bash MIN_SPACE=10 # GB [ $(df -BG /目标目录 | awk 'NR==2{gsub("G","");print $4}') -lt $MIN_SPACE ] && exit 1 ``` > 提示:关键业务数据建议采用 **3-2-1 备份策略**(3份副本,2种介质,1份异地)[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值