批量安装apk到/system/app下2014.10.22

批量安装必须获取root权限后


String paramString = "adb push SVRadio.apk /system/app" +"\n"+  //
	          // "adb push SVSetUp.apk /system/app" +"\n"+
	             "adb shell" +"\n"+
	             "su" +"\n"+         //<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">切换到 root 用户</span>
		     "mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system" +"\n"+ //<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">让分区可写</span>
		     "cat /sdcard/SVRadio.apk > /system/app/SVRadio.apk" +"\n"+  //<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">// 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on '/sdcard/NetWork.apk' - Cross-device link。   </span>
		  // "cat /sdcard/SVSetUp.apk > /system/app/SVSetUp.apk" +"\n"+
		     "mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system" +"\n"+  //<span style="color: rgb(51, 51, 51); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; line-height: 24px; background-color: rgb(245, 245, 245);">// 还原分区属性,只读。</span>        
		     "exit" +"\n"+
		     "exit";


		    if(RootCmd.haveRoot()){
			 if(RootCmd.execRootCmdSilent(paramString)==-1){
			       Toast.makeText(MainActivity.this, "安装不成功", Toast.LENGTH_LONG).show();
			   }else{
			       Toast.makeText(MainActivity.this, "安装成功", Toast.LENGTH_LONG).show();
				   String paramString2= "adb root" +"\n"+
			               "adb shell" +"\n"+
			               "su" +"\n"+
			                "mount -o remount rw /system"+"\n"+
			                "chmod 777 /system/app/SVRadio.apk"+"\n"+ 
			             // "chmod 777 /system/app/SVSetUp.apk"+"\n"+ 
			                "exit" +"\n"+
			                "exit";
			       if(RootCmd.execRootCmdSilent(paramString2)==-1){
			    	   Toast.makeText(MainActivity.this, "授权不成功", Toast.LENGTH_LONG).show();
			       }
			       else
			       {
			    	   Toast.makeText(MainActivity.this, "授权成功可重启", Toast.LENGTH_LONG).show();
			       }
//			
			   }
			}else{
			   Toast.makeText(MainActivity.this, "没有root权限", Toast.LENGTH_LONG).show();
			}


<pre name="code" class="java">import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public final class RootCmd {
	// 执行linux命令并且输出结果
	protected static String execRootCmd(String paramString) {
		String result = "result : ";
		try {
			Process localProcess = Runtime.getRuntime().exec("su ");// 经过Root处理的android系统即有su命令
			OutputStream localOutputStream = localProcess.getOutputStream();
			DataOutputStream localDataOutputStream = new DataOutputStream(
					localOutputStream);
			InputStream localInputStream = localProcess.getInputStream();
			DataInputStream localDataInputStream = new DataInputStream(
					localInputStream);
			String str1 = String.valueOf(paramString);
			String str2 = str1 + "\n";
			localDataOutputStream.writeBytes(str2);
			localDataOutputStream.flush();
			String str3 = null;
//			while ((str3 = localDataInputStream.readLine()) != null) {
//				Log.d("result", str3);
//			}
			localDataOutputStream.writeBytes("exit\n");
			localDataOutputStream.flush();
			localProcess.waitFor();
			return result;
		} catch (Exception localException) {
			localException.printStackTrace();
			return result;
		}
	}

	// 执行linux命令但不关注结果输出
	protected static int execRootCmdSilent(String paramString) {
		try {
			Process localProcess = Runtime.getRuntime().exec("su");
			Object localObject = localProcess.getOutputStream();
			DataOutputStream localDataOutputStream = new DataOutputStream(
					(OutputStream) localObject);
			String str = String.valueOf(paramString);
			localObject = str + "\n";
			localDataOutputStream.writeBytes((String) localObject);
			localDataOutputStream.flush();
			localDataOutputStream.writeBytes("exit\n");
			localDataOutputStream.flush();
			localProcess.waitFor();
			int result = localProcess.exitValue();
			return (Integer) result;
		} catch (Exception localException) {
			localException.printStackTrace();
			return -1;
		}
	}

	// 判断机器Android是否已经root,即是否获取root权限
	protected static boolean haveRoot() {

		int i = execRootCmdSilent("echo test"); // 通过执行测试命令来检测
		if (i != -1) {
			return true;
		}
		return false;
	}

}



                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自动驾驶学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值