第一篇博客:将用户程序转为系统程序

第一篇博客:将用户程序转为系统程序

时光飞逝,大三因为喜欢玩手机软件开始接触安卓,到现在即将毕业,自己也在试用期中,觉得是时候慢慢把学到的,用到的东西记录下来,也方便以后项目需要用到进行查找,第一篇来讲讲本地应用转为系统应用(前提是得Root,搞机的无视此提醒)。

转成系统应用原理是使用Java的Runtime.getRuntime().exec(“linux指令”)实现转换,首先将/system/目录挂载为可读写,然后获取本地应用的安装路径,设置安装路径为/system/app/xx.apk,执行cat将本地应用文件写到系统应用文件夹,然后修改xx.apk的权限即可。

``` // 执行root指令的方法 public static boolean RootCommand(String command) { Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { Log.d("*** DEBUG ***", "ROOT REE" + e.getMessage()); return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } } Log.d("*** DEBUG ***", "Root SUC "); return true; } try { // 获取应用安装的路径  String sourceDir = context.getPackageManager() .getPackageInfo(context.getPackageName(), 0).applicationInfo.sourceDir; // 安装目标路径 String sourceTarget = "/system/app/" + Constant.APP_NAME+ ".apk"; // 挂载系统应用文件夹可读写,写入 String apkRoot = "mount -o remount,rw /system" + "\n"+ "cat " + sourceDir + " > " + sourceTarget; // 执行指令 RootCmd.RootCommand(apkRoot); // 修改权限 String apkRoot1 = "chmod 644 " + sourceTarget; // 执行指令 RootCmd.RootCommand(apkRoot1); // 转换后先验证是否转换成功,成功则弹出提示窗 File file = new File(sourceTarget); if (file.exists()) { RootCmd.showRebootDialog(context); } else { ToastUtil.toast(context, "未转换成功,是否没有ROOT或授权该应用"); } } catch (Exception e) { e.printStackTrace(); }

在弄毕设的时候做的是程序锁,为防止卸载做了这个功能,在网上找了很多例子都是写到/system/app/文件夹后app是错误的,这个是自己调试修改代码修改成功的,在原生系统,MIUI,FIUI,IUNI系统均可以转成系统应用。

你可能感兴趣的:(软件,指令,应用)