https://www.jianshu.com/p/eed784d8963f
我是根据这个文章来做的,但是中间的一些细节需要跟服务器沟通,比如你下载下来的安装包是否需要解压,里面包含一些什么文件等,遇到一个坑,就是系统更新完成以后你下载到你手机里面得路径会有你问题,在网上刷到一个帖子说
https://www.jianshu.com/p/6d1bb51b0343
下面评论
这个最后的路径是让你加上/data/media/0/+"自己的文件夹路径"
比如我的/data/media/0/cache/20200106/update.zip
然后就调用
RecoverySystem.installPackage方法就行了,手机就会自动重启就完了
后续更新
这里需要获取到系统版本号但是因为各种原因获取不到,https://blog.csdn.net/wechel24/article/details/84349398可以参考这个文章里面
通过反射来获取,输入你需要得名字就可以获得
//反射机制通过SystemProperties获取系统版本号 private static Class<?> mClassType = null; private static Method mGetIntMethod = null; private void init() { try { if (mClassType == null) { mClassType = Class.forName("android.os.SystemProperties"); //通过Class.forname获取该Class对象; mGetIntMethod = mClassType.getDeclaredMethod("getInt", String.class, int.class); } } catch (Exception e) { e.printStackTrace(); } } private int getInt(String key, int def) { init(); int value = def; try { Integer v = (Integer) mGetIntMethod.invoke(mClassType, key, def); value = v.intValue(); } catch (Exception e) { e.printStackTrace(); } return value; } private int getSdkVersion() { return getInt("ro.product.firmware", -1); }
最后一个方法中getint里面加入你需要的就可以 了
前提,你可以用adb shell getprop命令获取到系统安装的包名