`
Danker.Dai
  • 浏览: 67311 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

自动修改android模拟器的imei的小程序

 
阅读更多

该程序实现一下功能,

  1,修改android模拟器的imei,

  2,自动启动android模拟器

  3,运行开机启动程序,ps:这个开机启动程序apk就没放出来了。

  4,停止android模拟器;

  重复1,2,3过程

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
     while(true){//

         eidtEmulator();//修改imei


         Runtime rt = Runtime.getRuntime();  
         String command = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator -avd AVD-10";   
         rt.exec(command);  // 运行android模拟器
         System.out.println("success run");

         Thread.sleep(2*60*1000);//  等待2分钟后,停止android模拟器
         if(findRunningWindowsProcess("emulator-arm.exe")){
               killRunningWindowsProcess("emulator-arm.exe");
        }
   }
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  } 
 }
 
 public static void eidtEmulator() throws Exception{
     String oldFilePath = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator-arm.exe ";
     String newFilePath = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator-arm1.exe";
     FileInputStream in = new FileInputStream(oldFilePath);
     FileOutputStream out = new FileOutputStream(newFilePath);
     byte bytes[] = new byte[1];
     byte gsnbytes[] = new byte[3];
     byte imeiBytes[] = new byte[15];
     int count;
     while ((count = in.read(bytes)) != -1) {
           out.write(bytes);
           if (bytes[0] == 0x43) {// if is char 'C'
                    count = in.read(gsnbytes);
                    if (count == -1) {
                         break;
                    }
                    out.write(gsnbytes);
                    if (gsnbytes[0] == 0x47 && gsnbytes[1] == 0x53 && gsnbytes[2] == 0x4E) {//if is char 'GSN'
                         count = in.read(bytes);//read char '.'
                         if (count == -1) {
                                break;
                          }
                          out.write(bytes);
                          count = in.read(imeiBytes);//read old imei
                         if (count == -1) {
                                 break;
                          }
                          byte[] imeis = getIMEIBytes();
                          out.write(imeis);//write new imei;
                     }
               }

        }
  in.close();
  out.close();
  File oldFile = new File(oldFilePath);
  oldFile.delete();
  File newFile = new File(newFilePath);
  newFile.renameTo(oldFile);
  

 }

 

 

 public static byte[] getIMEIBytes() {//随即生成15位imei号
       StringBuffer bff = new StringBuffer();
       byte imeiBytes[] = new byte[15];
       for(int i=0;i<imeiBytes.length;i++){
                int num = (int) Math.round(Math.random()*8);
                bff.append(num);
                imeiBytes[i] = Byte.parseByte("3"+num, 16);
         }
      //  printArray(imeiBytes);
       System.err.println("start imei: "+bff.toString());
       return imeiBytes;
 }

 

 public static void printArray(byte bytes[]) {
  StringBuffer buff = new StringBuffer();
  for (byte b : bytes) {
   buff.append(String.format("%02X", b) + " ");
  }
   System.out.println(buff.toString());
 }
 
 public static boolean killRunningWindowsProcess(String processName){  
        try {  
            Runtime.getRuntime().exec("taskkill /IM " + processName);  
            System.out.println("kill process successful");  
//            System.out.println("Process " + processName + " was killed. Mission completed.");  
            return true;  
        } catch (Exception ex) {  
            ex.printStackTrace();  
            System.out.println("kill process fail");  
            System.out.println("Misson failed.");  
            return false;  
        }  
    }  
 public static boolean findRunningWindowsProcess(String processName) {  
        BufferedReader bufferedReader = null;  
        Process proc = null;  
        try {  
            proc = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq " + processName + "\"");  
            bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));  
            String line;  
            while ((line = bufferedReader.readLine()) != null) {  
                if (line.contains(processName)) {  
                    return true;  
                }  
            }  
            return false;  
        } catch (Exception ex) {  
            ex.printStackTrace();  
            return false;  
        } finally {  
            if (bufferedReader != null) {  
                try {  
                    bufferedReader.close();  
                } catch (Exception ex) {  
                }  
            }  
            if (proc != null) {  
                try {  
                    proc.destroy();  
                } catch (Exception ex) {  
                }  
            }  
        }  
    }  

}

4
0
分享到:
评论
3 楼 u010484673 2014-04-10  
你好,我按照这段代码运行了,可是在打开的模拟器上查询到的imei号依旧没改变,不知道楼主修改imei号后,有没有手动查询模拟器上的imei号是否是真的变了呢?
2 楼 萧_瑟 2013-10-08  
你好,请问如何直接修改真机上面的imei呢?
String oldFilePath = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator-arm.exe ";
     String newFilePath = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator-arm1.exe";
这段代码指的是PC上面虚拟机的路径。
如果要直接改真机上面的该怎么做呢?
1 楼 彩虹神 2012-02-02  
很强大的代码

相关推荐

Global site tag (gtag.js) - Google Analytics