隨筆-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 閱讀(1689) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 柳河县| 开阳县| 宁远县| 方山县| 郁南县| 泾川县| 保康县| 河北省| 镇康县| 如东县| 青岛市| 科技| 双城市| 公安县| 平乐县| 深圳市| 沐川县| 永平县| 大竹县| 牟定县| 祁阳县| 呼玛县| 开化县| 临城县| 巴林左旗| 牙克石市| 孙吴县| 宣化县| 禄丰县| 崇明县| 竹北市| 武汉市| 宜兰县| 长泰县| 同心县| 阿拉善右旗| 高雄市| 利辛县| 阿坝县| 思茅市| 普格县|