Android 获取应用数字签名

来源:互联网 发布:java游戏编程书 编辑:程序博客网 时间:2024/06/05 19:15

刚接触Android时一直以为应用的签名就是apk签名文件,后来工作中遇到客户需要应用的签名并给出了示例,并非apk签名文件中的内容。当时一脸懵逼呀。

后通过网络查找终于查到一个与众不同的文章,现记录如下:

源码及安装文件下载方式一:GetAppSignature.zip

说明:应用程序的签名被封装在 packageInfo 中,所以我们要获得应用程序的签名就需要获得 PackageManager 来获得包含有签名信息的 packageInfo,再通过 packageInfo 获得 Signature 数组,循环遍历将签名进行拼接。

代码运行效果:


packagecn.sunzn.getappsignature;

importandroid.app.Activity;
importandroid.content.pm.PackageInfo;
importandroid.content.pm.PackageManager;
importandroid.content.pm.PackageManager.NameNotFoundException;
importandroid.content.pm.Signature;
importandroid.os.Bundle;
importandroid.text.TextUtils;
importandroid.view.Menu;
importandroid.view.View;
importandroid.widget.EditText;
importandroid.widget.TextView;
importandroid.widget.Toast;

public class MainActivityextends Activity {

private EditTextet_pkgname;
   private TextView tv_signature;
   private PackageManager manager;
   private PackageInfo packageInfo;
   private Signature[] signatures;
   private StringBuilder builder;
   private String signature;

public void onCreate(BundlesavedInstanceState) {
       super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
       et_pkgname = (EditText)findViewById(R.id.et_pkgname);
       tv_signature = (TextView)findViewById(R.id.tv_signature);
       manager =getPackageManager();
       builder = newStringBuilder();
   }

public voidgetSignature(View view) {
       String pkgname =et_pkgname.getText().toString();
       boolean isEmpty = TextUtils.isEmpty(pkgname);
       if (isEmpty) {
           Toast.makeText(this,"应用程序的包名不能为空!", Toast.LENGTH_SHORT);
       } else {
           try {
               /** 通过包管理器获得指定包名包含签名的包信息 **/
               packageInfo =manager.getPackageInfo(pkgname, PackageManager.GET_SIGNATURES);
               /******* 通过返回的包信息获得签名数组 *******/
               signatures =packageInfo.signatures;
               /******* 循环遍历签名数组拼接应用签名 *******/
               for (Signature signature :signatures) {
                  builder.append(signature.toCharsString());
               }
               /************** 得到应用签名 **************/
               signature =builder.toString();
              tv_signature.setText(signature);
           } catch(NameNotFoundException e) {
              e.printStackTrace();
           }
       }
   }

public booleanonCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_main, menu);
       returntrue;
   }


来自<http://www.cnblogs.com/sunzn/archive/2013/01/27/2878422.html


0 0
原创粉丝点击