我们使用Android Studio 运行或测试我们的app  它使用一个默认的debug.keystore进行签名。

这个默认签名(keystore)是不需要密码的,它的默认位置在 $HOME/.android/debug.keystore,如果不存在Android studio会自动创建它。

例如我的debug.keystore就在C:\Users\Administrator\.android\debug.keystore。再我们正式发布项目的时候是不能使用debug.keystore的。

官方地址: https://developer.android.com/studio/publish/app-signing.html

下面我们来介绍如何使用Android Studio创建一个新的keystore,并发布我们的apk

第一步: Build --->> Generate Signed APK

第二步:Create New

第三步:填写相关信息,里面内容什么含义自行Google

第四步:输入密码

第五步:选择发布app的路径默认即可 选择release方式发布

OK,发布成功,可以到文件夹下面找到发布的apk


下面我们来配置如何在debug的时候使用我们自定义的keystore。

第一步:还是要新建一个keystore,就用上面的也可以。

第二步:在项目上右键 Open Module Settings.然后看图就可以了,选择路径,把密码填上,该填的都填好。

第三步:分别选择debug和release 都设置为刚才填进去的keystore。

点击OK即可,然后查看APP的配置文件应该是这样的。

[html] view plaincopy
  1. android {
  2. signingConfigs {
  3. android_studio_app {
  4. keyAlias 'androidstudioapp'
  5. keyPassword 'mypassword'
  6. storeFile file('D:/Android/keystore/android_studio_app.jks')
  7. storePassword 'mypassword'
  8. }
  9. }
  10. compileSdkVersion 23
  11. buildToolsVersion "23.0.1"
  12. defaultConfig {
  13. applicationId "com.example.administrator.myapplication"
  14. minSdkVersion 15
  15. targetSdkVersion 23
  16. versionCode 1
  17. versionName "1.0"
  18. }
  19. buildTypes {
  20. release {
  21. minifyEnabled false
  22. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  23. signingConfig signingConfigs.android_studio_app
  24. }
  25. debug {
  26. signingConfig signingConfigs.android_studio_app
  27. }
  28. }
  29. }

下面讲解如何测试apk是否使用了我们创建的keystore

第一步: keytool -list -v -keystore  xxx.keystore

通过工具查看sha1的值.,例如 5C:93:68:2C:E3:2B:00:F1:D6:11:0F:46:08:93:32:1D:FD:6E:60:CC

第二步:在APP内部通过代码的方式获取sha1 两者一比较即可。

[cpp] view plaincopy
  1. import android.content.pm.PackageInfo;
  2. import android.content.pm.PackageManager;
  3. import android.content.pm.Signature;
  4. import java.io.ByteArrayInputStream;
  5. import java.io.InputStream;
  6. import java.security.MessageDigest;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.security.cert.CertificateEncodingException;
  9. import java.security.cert.CertificateFactory;
  10. import java.security.cert.X509Certificate;
[java] view plaincopy
  1. //这个是获取SHA1的方法
  2. public static String getCertificateSHA1Fingerprint(Context context) {
  3. //获取包管理器
  4. PackageManager pm = context.getPackageManager();
  5. //获取当前要获取SHA1值的包名,也可以用其他的包名,但需要注意,
  6. //在用其他包名的前提是,此方法传递的参数Context应该是对应包的上下文。
  7. String packageName = context.getPackageName();
  8. //返回包括在包中的签名信息
  9. int flags = PackageManager.GET_SIGNATURES;
  10. PackageInfo packageInfo = null;
  11. try {
  12. //获得包的所有内容信息类
  13. packageInfo = pm.getPackageInfo(packageName, flags);
  14. } catch (PackageManager.NameNotFoundException e) {
  15. e.printStackTrace();
  16. }
  17. //签名信息
  18. Signature[] signatures = packageInfo.signatures;
  19. byte[] cert = signatures[0].toByteArray();
  20. //将签名转换为字节数组流
  21. InputStream input = new ByteArrayInputStream(cert);
  22. //证书工厂类,这个类实现了出厂合格证算法的功能
  23. CertificateFactory cf = null;
  24. try {
  25. cf = CertificateFactory.getInstance("X509");
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. //X509证书,X.509是一种非常通用的证书格式
  30. X509Certificate c = null;
  31. try {
  32. c = (X509Certificate) cf.generateCertificate(input);
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. String hexString = null;
  37. try {
  38. //加密算法的类,这里的参数可以使MD4,MD5等加密算法
  39. MessageDigest md = MessageDigest.getInstance("SHA1");
  40. //获得公钥
  41. byte[] publicKey = md.digest(c.getEncoded());
  42. //字节到十六进制的格式转换
  43. hexString = byte2HexFormatted(publicKey);
  44. } catch (NoSuchAlgorithmException e1) {
  45. e1.printStackTrace();
  46. } catch (CertificateEncodingException e) {
  47. e.printStackTrace();
  48. }
  49. return hexString;
  50. }
  51. //这里是将获取到得编码进行16进制转换
  52. private static String byte2HexFormatted(byte[] arr) {
  53. StringBuilder str = new StringBuilder(arr.length * 2);
  54. for (int i = 0; i < arr.length; i++) {
  55. String h = Integer.toHexString(arr[i]);
  56. int l = h.length();
  57. if (l == 1)
  58. h = "0" + h;
  59. if (l > 2)
  60. h = h.substring(l - 2, l);
  61. str.append(h.toUpperCase());
  62. if (i < (arr.length - 1))
  63. str.append(':');
  64. }
  65. return str.toString();
  66. }

Android Studio 默认keystore 以及自定义keystore相关推荐

  1. android studio密钥库口令,Android应用开发Android Studio签名打包及根据keystore密钥获取SHA1安全码...

    本文将带你了解Android应用开发Android Studio签名打包及根据keystore密钥获取SHA1安全码,希望本文对大家学Android有所帮助. " 一.签名打包两种方式 1. ...

  2. 修改Android Studio默认配置路径

    前言:由于Android studio默认会在C盘保存配置(如:.android..AndroidStudio3.5..gradle),久而久之C盘占用越来越多,导致电脑卡顿. 解决: 一..andr ...

  3. 解决Android Studio默认AppTheme 没有lable标签,不显示等问题

    解决Android Studio默认AppTheme 没有lable标签,不显示等问题 参考文章: (1)解决Android Studio默认AppTheme 没有lable标签,不显示等问题 (2) ...

  4. Android Studio 默认安装路径,SDK默认安装路径

    Android Studio 默认安装路径:C:\Program Files\Android\Android Studio SDK 默认安装路径:C:\Users\计算机用户名\AppData\Loc ...

  5. android studio 获取sha1keytool -list -v -keystore E:\PGY\keyStore\chunni.jks

    android studio 获取sha1值的方法 keytool -list -v -keystore E:\PGY\keyStore\xxxx.jks

  6. Android Studio 默认配置路径修改

    前言 Android Studio 安装完成后,默认会在 C 盘对应用户目录下生成存储和缓存目录文件,我们需要迁移文件并配置索引路径,使 AS 到新目录读取我们的配置 .android:我们在 AVD ...

  7. 修改Android Studio默认的gradle配置文件

    每次用Android Studio 新建项目时,默认的依赖库都是google().jcenter(),在国内速度非常慢,有时候慢得不能忍受.多次百度.谷歌后,终于找到一个办法,贴出来和大家共享: 1. ...

  8. Android Studio 模板用法与自定义模板

    本文gif图比较多,可能会导致页面加载缓慢,请大家耐心等待 今天我们来学习下Android Studio这款软件的一些秘密,这些就是Template,就是我们输出一些特定的字符就可以实现自动编写一大堆 ...

  9. Android Studio默认编译出Release版本apk

    在我们打包是进行Make Project,默认编译出来的是Debug包. 在Android Studio的左下角,有一个Build Variants,如图下: 这样Make Project编出来的所有 ...

最新文章

  1. php源码中如何添加滚动公告,如何给WordPress网站添加滚动公告?
  2. Spring 2.5 基于注解驱动的 Spring MVC
  3. 从二分类到多分类的迁移策略
  4. 各种编译环境中如何为C++添加命令行参数(Command-line parameter)
  5. 基于Laravel+VueJS实战开发WebAPP
  6. chmod 777命令_Linux shell命令总结
  7. autojs之百度地图定位
  8. Cocos Creator | 碰撞检测优化-四叉树
  9. 程序员坐牢了,会被安排去写代码吗?
  10. Ubuntu18.04 谷歌浏览器安装商店助手
  11. php 知乎源代码,PHP最新仿知乎问答社区源码下载带行业打赏问答支持文章、话题、第三方登录、文章和问题打赏...
  12. FTP服务简介与配置
  13. win10升级系统版本的步骤,win10电脑如何升级系统版本
  14. 魅族16无信号服务器,魅族16信号差的解决办法
  15. Reactor模式--VS--Proactor模式
  16. 《A Graduate Course in Applied Cryptography》Chapter 13 Digital Signatures(2)
  17. ByteBuff常用方法,使用
  18. 数据库中的除运算一点就通
  19. vue 移动端 div背景图片 pc端显示 移动端不显示
  20. 丛林战争项目十之数据库查询

热门文章

  1. 内外兼修 华润啤酒的“有为”哲学
  2. 小妙招,教你从旅行网上下载各种美图和视频!
  3. 万字长文带你轻松了解LSTM全貌
  4. Abaqus RVE单元 周期性边界施加(PBC) 前处理(一) 单元重新编号及Equation方程建立
  5. C语言实现定积分的计算
  6. 红米k30pro工程包工厂包
  7. 客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
  8. 服务器 z盘 映射,小脚本:在终端上映射网络驱动器Z盘
  9. ionicapp开场动画_动画开场类型
  10. VB中关于UBOUND和LBOUND含义