如何将文件下载至系统目录?使用Download Manager指定至system/app路径
下载文件至系统目录及使用Download Manager指定路径到
system/app的方法 首先明确核心限制:system/app是Android的系统核心目录,默认处于只读挂载状态,普通第三方应用根本没权限写入,必须满足以下其中一个条件才能操作:
- 设备已经获取Root权限
- 你的应用拥有系统签名(仅限系统级应用能做到)
一、通用方式:把文件下载到系统目录的步骤
- 先把系统分区重新挂载成可读写模式
- 如果是Root设备,用命令行执行:
mount -o remount,rw /system - 要注意:不同设备的系统分区路径可能不一样,比如有些是
/system_root,得根据自己设备调整
- 如果是Root设备,用命令行执行:
- 先把文件下载到临时目录(比如默认的
Downloads文件夹) - 把下载好的文件移动或复制到
system/app- 命令行示例:
cp /sdcard/Download/your_apk.apk /system/app/your_apk.apk
- 命令行示例:
- 下载完成后记得把系统分区改回只读模式,避免影响系统稳定性:
mount -o remount,ro /system - 最后调整文件权限,保证系统能正常识别这个应用:
chmod 644 /system/app/your_apk.apk chown root:root /system/app/your_apk.apk
二、用Download Manager直接下载到system/app的方法
Download Manager默认只能写入应用有权限访问的目录(比如Downloads、应用私有目录),要直接下到system/app,得结合Root权限或者系统签名:
方法1:Root设备下修改下载路径
- 先完成系统分区的可读写挂载(步骤同上)
- 在代码里调用Download Manager时,直接指定目标路径为
system/app,但应用必须先获取Root权限- Android代码示例:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("你的文件下载链接")); // 指定存储到system/app request.setDestinationUri(Uri.parse("file:///system/app/your_apk.apk")); // 开启下载完成通知 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); long downloadId = manager.enqueue(request); - 注意:这段代码必须在有Root权限的应用里运行,而且要先挂载好可读写的系统分区,不然会直接抛出权限错误
- Android代码示例:
方法2:系统签名应用直接操作
如果你的应用是系统级应用(带系统签名),不用Root就能直接写入system/app,直接用上面的代码指定路径就行,系统应用默认拥有系统目录的写入权限,不需要额外挂载分区
内容的提问来源于stack exchange,提问作者sounds of nature
相关产品推荐
相关产品推荐

