分类归档:Android

修改Android模拟器imei

在…..\android_sdk\tools文件下找到emulator-arm.exe,使用UltraEdit文本编辑器打开,搜索CGSN关键字,把0000000000…改成你自己想要的imei号。保存即可。

用apktool+dex2jar+jd_gui反编译apk文件

这三个软件google一下都可以免费下载使用。
我们可以反编译一些软件来学习人家的架构及界面等。
apktool: 可以解析资源文件,比如布局文件xml等,方便查看。
这个简单,不用介绍。
dex2jar:可以将dex文件转换成jar文件
用法:
1.将apk文件后缀改成rar,然后解压,取出其中的classes.dex,放到任意位置;
2.进入cmd,cd到dex2jar所在文件夹,输入命令dex2jar.bat %classes.dex所在目录%\class.dex
3. 命令完成后在%class.dex所在目录%就会生成jar文件

jd_gui:能够将jar文件反编译成java代码
用法:
打开jd_gui,然后将jar包拖放到主界面,就可以看到源代码了。

一个获取APK的packagename,versionCode,versionName

因为应用经常我这里分析包名,所以写了此bat

使用方法,另存下面的内容为xxx.bat,然后把apk直接拖到此bat上,就会把信息直接赋值到剪切板,直接粘贴就是了

ps:需要android环境支持

 

@echo off
title 获取包名
echo 获取包名
aapt d badging %1 >>qq.txt
findstr "\<package: name=\'*\'\>" qq.txt >>qq2.txt
del qq.txt
CLIP < qq2.txt
del qq2.txt
echo 结束!
#pause
exit

 

自动修改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) {   
                }   
            }   
        }   
    }  
}

 

Android之读取Resource和Assets中的文件

public String getFromRes(String FileName){
     String result = "";
     try{
      InputStream in = getResources().openRawResource(R.raw.test2);//获取资源
      int length = in.available();//获取文字字数
      byte[]buffer = new byte[length];
      in.read(buffer);//读到数组中
            //设置编码
      result = EncodingUtils.getString(buffer, "UTF-8");
     }catch (Exception e) {
  }
  return result;
    }
    public String getFromAssets(String FileName){
     String result = "";
     try{
      InputStream in = getAssets().open(FileName);//获取资源
      int length = in.available();//获取文字字数
      byte[]buffer = new byte[length];
      in.read(buffer);//读到数组中
            //设置编码
      result = EncodingUtils.getString(buffer, "UTF-8");
     }catch (Exception e) {
  }
  return result;
    }

 

ps: 继承 Activity

或者可以使用 context.getAssets().open(FileName);// 获取资源