刚接触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 MainActivity extends 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>