尝试构建一个用于更新从源代码构建的 android OS 的应用程序。即使在使用平台密钥对应用程序进行签名后,该方法RecoverySystem.installPackage(context,file)
在应用于放置在“/data/cache”中的更新文件时也会出现错误,即应用程序不允许写入 /cache。此外,尝试访问 /cache 分区时会引发 SElinux 错误。
该应用程序拥有必要的权限android.permission.RECOVERY
,android.permission.REBOOT
并且android.permission.ACCESS_CACHE_FILESYSTEM
浏览源代码,这些行
...
FileWriter uncryptFile = new FileWriter(UNCRYPT_PACKAGE_FILE);
try {
uncryptFile.write(filename + "\n");
} finally {
uncryptFile.close();
}
...
在 RecoverySystem.installPackage() 触发错误。(http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/os/RecoverySystem.java#562)
即使显示错误,设备仍会重新启动以应用更新,但恢复显示“无命令”屏幕很可能是因为没有命令写入 /cache/recovery
操作系统构建是用户构建,因此没有植根。
我错过了什么吗?平台签名的应用程序是否有其他方法可以为用户构建安装固件更新?
类似:Android开发RecoverySystem.installPackage() 无法写入/cache/recovery/command 权限被拒绝