幸福没有标准 發表於 2020-3-31 13:42:00

Android 获取开发&测试 SHA1值

<p>以前都是直接安装一个开发者助手获取的,但是呢,开发者助手也有bug啊,应用宝下载安装,在我的红米手机上发现打不开,于是我又去酷安网下载了一个,可以打开了,但是有问题,没法获取到完整的root权限,检测不准确,当前应用根本看不到东西,于是只能另想办法了,老套路就是百度,然后照着搞,发现很多都是直接 keytool 命令,但是我这里报 'keytool' 不是内部或外部命令 也不是可运行的程序,这个不是什么大问题,网上很多解决方案,但是本人比较懒,太麻烦的操作一般懒得做,但是又没办法,所以搜集了一下各路解决方案,总结了一下快速直接且方便的方案,记录下来,以后可以直接用</p>
<p>首先获取测试版的SHA1值,就很简单,一般最简单的就是在AndroidStudio上,右边菜单,点击,点击signingReport就行了,如下图</p>
<p><img src="https://img2020.cnblogs.com/blog/583064/202003/583064-20200331133118777-1386100883.png"></p>
<p>&nbsp;</p>
<p>as直接就给你打印出来了,很方便,但是如果要获取签名的SHA1值呢,看到上面的路径了吗,其实就是用keytool命令然后附带上我们的jks就行了,这个方法测试正式都通用,有的可能直接敲命令就行了,但是肯定很多人也跟我一样,提示不是内部或外部命令,有的时候很久没搞过就会忘记,虽然百度一下的事,但是也浪费自己的时间,所以还是整理一下好,如下图</p>
<p><img src="https://img2020.cnblogs.com/blog/583064/202003/583064-20200331133820284-623099235.png"></p>
<p>&nbsp;</p>
<p>进入到jdk路径里,在使用命令就行了,测试的jks路径就是&nbsp;C:\Users\LiuZhen\.android\debug.keystore</p>
<p>还有一个办法就是用代码去获取了,不过个人还是觉得一步到位的好,下面是获取代码,在高德那复制的</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String sHA1(){
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            PackageInfo info </span>=<span style="color: rgba(0, 0, 0, 1)"> getPackageManager().getPackageInfo(
                  getPackageName(), PackageManager.GET_SIGNATURES);
            </span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] cert = info.signatures.toByteArray();
            MessageDigest md </span>= MessageDigest.getInstance("SHA1"<span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 0, 255, 1)">byte</span>[] publicKey =<span style="color: rgba(0, 0, 0, 1)"> md.digest(cert);
            StringBuffer hexString </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StringBuffer();
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; publicKey.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
                String appendString </span>= Integer.toHexString(0xFF &amp;<span style="color: rgba(0, 0, 0, 1)"> publicKey)
                        .toUpperCase(Locale.US);
                </span><span style="color: rgba(0, 0, 255, 1)">if</span> (appendString.length() == 1<span style="color: rgba(0, 0, 0, 1)">)
                  hexString.append(</span>"0"<span style="color: rgba(0, 0, 0, 1)">);
                hexString.append(appendString);
                hexString.append(</span>":"<span style="color: rgba(0, 0, 0, 1)">);
            }
            String result </span>=<span style="color: rgba(0, 0, 0, 1)"> hexString.toString();
            </span><span style="color: rgba(0, 0, 255, 1)">return</span> result.substring(0, result.length()-1<span style="color: rgba(0, 0, 0, 1)">);
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (NoSuchAlgorithmException e) {
            e.printStackTrace();
      }
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    }</span></pre>
</div>
<p>&nbsp;不过有一部分项目是配置的包名,配置文件中切换测试正式,所以此时这些方法可能并不能保证是正式还是测试,所以我一般为了准确性,都是用命令去获取的</p>
<p>直接进入到 cd "C:\Program Files\Android\Android Studio\jre\bin" 目录,然后&nbsp;keytool -list -v -keystore c:/xxx.jks 也就是你的正式签名和测试签名,这样就可以保证不会弄混</p>
<p><img src="https://img2020.cnblogs.com/blog/583064/202006/583064-20200617110716978-1585074538.png"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/LiuZhen/p/12604657.html
頁: [1]
查看完整版本: Android 获取开发&测试 SHA1值