java - 适用于 Android 的平台签名 OTA 更新程序应用程序
问题描述
尝试构建一个用于更新从源代码构建的 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 权限被拒绝
解决方案
推荐阅读
- reactjs - Next.js 添加 slug/params 以清理 URL
- java - 如何使用 OnTouch 移动事件将 Android Studio 中的 ImageView 旋转到中心点?
- php - 使用服务器端时搜索和分页不起作用
- jquery - 如何获取按钮的onClick行的索引?
- python - 如何使用 Pandas 获得日期时间的累计值?
- java - 错误:未能读取输入对象(不是模板?):将 YAML 转换为 JSON 时出错:yaml:在此上下文中不允许映射值
- python - Django 在查询结果中加入多个模型
- sql - SQL - 在其后的行中选择具有特定列值的行
- python - Flask POST Redirect:地址栏中显示的参数
- google-cloud-dataflow - 可以在 Apache Beam 中使用 for 循环进行步进顺序吗