Android 編程下獲得應用程序的簽名


源碼及安裝文件下載方式一:GetAppSignature.zip

說明:應用程序的簽名被封裝在 packageInfo 中,所以我們要獲得應用程序的簽名就需要獲得 PackageManager 來獲得包含有簽名信息的 packageInfo,再通過 packageInfo 獲得 Signature 數組,循環遍歷將簽名進行拼接。

代碼運行效果:

package cn.sunzn.getappsignature;

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

public class MainActivity extends Activity {

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

   public void onCreate(Bundle savedInstanceState) {
       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 = new StringBuilder();
   }

   public void getSignature(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 boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.activity_main, menu);
       return true;
   }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM