隨筆-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
          主站蜘蛛池模板: 四会市| 正定县| 广河县| 高平市| 阿巴嘎旗| 潼关县| 灵璧县| 遵义县| 思茅市| 桐庐县| 罗江县| 运城市| 长海县| 富锦市| 静乐县| 桦甸市| 科技| 香格里拉县| 大洼县| 河西区| 绥江县| 阳江市| 庐江县| 镇原县| 神农架林区| 井冈山市| 西乌| 彭州市| 阜新市| 泸西县| 乌拉特后旗| 盐津县| 武陟县| 本溪| 枣庄市| 利川市| 女性| 西城区| 北京市| 中阳县| 通山县|