隨筆-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 閱讀(1674) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 鹿邑县| 上蔡县| 将乐县| 定边县| 旺苍县| 连州市| 绥滨县| 玉山县| 惠安县| 错那县| 凉城县| 安丘市| 个旧市| 家居| 印江| 林芝县| 云梦县| 桃源县| 乌苏市| 陆川县| 商河县| 五寨县| 务川| 揭东县| 怀远县| 兴山县| 大渡口区| 当阳市| 汉阴县| 原阳县| 万山特区| 塔河县| 大新县| 读书| 无为县| 万州区| 沁源县| 朝阳县| 滁州市| 枣庄市| 贵溪市|