源码及安装文件下载方式一: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;
}
}