Android 使用程式碼進入Recovery模式自動升級指定韌體包
阿新 • • 發佈:2019-02-19
2-29,4年才有一次的日子,小李子終於抱走了Oscar小金人。
進入Recovery並自動升級指定路徑下的升級包,OTA將韌體包下載到指定路徑/sdcard/update.zip,然後執行以下程式碼進入Recovery執行安裝:
private static File RECOVERY_DIR = new File("/cache/recovery"); private static File COMMAND_FILE = new File(RECOVERY_DIR, "command"); private static void recoveryMode(Context context) throws IOException { String arg = "--update_package=/sdcard/update.zip"; RECOVERY_DIR.mkdirs(); FileWriter command = new FileWriter(COMMAND_FILE); try { command.write(arg); // 往/cache/recovery/command中寫入recoveryELF的執行引數。 command.write("\n"); } finally { command.close(); } PowerManager pm = (PowerManager) context .getSystemService(Context.POWER_SERVICE); pm.reboot("recovery"); // 呼叫PowerManager類中的reboot方法 throw new IOException("Reboot failed (no permissions?)"); }
需要宣告REBOOT許可權,需要是system uid才能呼叫該許可權。
<uses-permission android:name="android.permission.REBOOT" />
一般應用沒有許可權,可以在系統應用中開放對應介面,接收到指定廣播後執行以上程式碼。