隨筆-348  評論-598  文章-0  trackbacks-0
          之前寫了一片文章介紹了應用內外的簽名比較(在Android系統外部和內部讀取Android應用的簽名),發現在某些機器上,讀取安裝包的簽名有的時候為空,所以找了其他辦法。
              public static String getPathWithPackageName(Context paramContext,
                      String paramString) {
                  PackageManager pm = paramContext.getPackageManager();
                  try {
                      PackageInfo pi = pm.getPackageInfo(paramString, 1);
                      System.out.println(pi.applicationInfo.publicSourceDir);
                      return pi.applicationInfo.publicSourceDir;
                  } catch (PackageManager.NameNotFoundException localNameNotFoundException) {

                  }
                  return null;
              }

              public static String getFileSignatureMd5(String filePath) {
                  try {
                      JarFile jarFile = new JarFile(filePath);
                      JarEntry jarEntry = jarFile.getJarEntry("AndroidManifest.xml");
                      if (jarEntry != null) {
                          try {
                              Certificate[] certs = jarEntry.getCertificates();
                              byte[] certBytes = certs[0].getEncoded();
                              String main = StringUtilities
                                      .bytesToHexString(CryptoUtilities
                                              .encryptByMD5(certBytes));
                              System.out.println("new to Char " + main.length() + " apk:"
                                      + main);
                              return main;
                          } catch (CertificateEncodingException localCertificateEncodingException) {

                          }
                      }
                  } catch (IOException e) {
                      e.printStackTrace();
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
                  return null;
              }

              Handler handler3;

              /** Called when the activity is first created. */
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
                  String installedPath = getPathWithPackageName(this,
                          "cn.emagsoftware.gamehall");
                  System.out.println("installedPath=" + installedPath);
                  String installedSig = getFileSignatureMd5(installedPath);
                  System.out.println("installedSig=" + installedSig);

                  String apk = "/sdcard/1.apk";
                  String remoteSig = getFileSignatureMd5(apk);
                  System.out.println("remoteSig=" + remoteSig);
                  System.out.println(installedSig.equals(remoteSig));
              }










          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2012-07-04 21:18 TiGERTiAN 閱讀(1682) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 定边县| 邵武市| 舞钢市| 哈密市| 墨玉县| 浦东新区| 新平| 赤城县| 丰镇市| 闽清县| 阳朔县| 祁东县| 九江市| 全椒县| 襄汾县| 丘北县| 古丈县| 丽水市| 运城市| 乌什县| 西平县| 静乐县| 紫阳县| 乐清市| 云林县| 隆回县| 游戏| 荥经县| 达日县| 孝义市| 雷州市| 伊宁市| 阿拉善盟| 揭阳市| 屯昌县| 恭城| 阳泉市| 杭锦后旗| 徐州市| 四平市| 蓬溪县|