源碼及安裝文件下載方式一: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; } }