Android获取应用签名(开发版SHA1和发布版SHA1)

原文链接:https://blog.csdn.net/ShenQiXiaYang/article/details/83416232

当我们需要接入百度地图等一系列需要开发版SHA1和发布版SHA1才能创建完成应用的时候,如果找不到开发版SHA1和发布版SHA1是不是很苦恼,所以我们今天来快速查找开发版SHA1和发布版SHA1。
首先是开发版SHA1的获取,打开Android Studio,左上角偏下位置。
QQ图片20191018085552.png
点击Gradle,出现如图的页面:
QQ图片20191018085603.png
选择点击signingReport,出现下图所示的页面:
QQ图片20191018085607.png
SHA1: D8:84:F1:E1:BF:28:D9:CF:FC:AF:ED:84:3B:3D:F9:94:F0:85:E4:AD
这个就是我们的开发版SHA1。

那我们的发布版SHA1是什么呢?首先我们要在某应用市场发布我们的App的时候,需要对App进行签名,那么签名的时候就需要.jks文件。
那我的.jks文件是什么呢?如下图所示:
QQ图片20191018085616.png
有了这个.jks文件,那我们如何获取到发布版的SHA1呢?

第一种方法是使用AS获取:
看看我们的Android Studio的最底部的底部选项卡。(右下角,如下图所示:)
QQ图片20191018085620.png
点击打开倒数第二个选项卡,Terminal。出现如下图所示的页面:
QQ图片20191018085624.png
我们输入命令行keytool -list -v -keystore F:\yang.jks,出现如下图所示的页面:
QQ图片20191018085627.png
然后输入我们密钥库的口令(密钥库的口令就是我们的.jks文件的password)
键入我们的密钥库口令,然后就可以得到我们的发布版的SHA1了。如下图所示:
QQ图片20191018085630.png
可以看到我们的发布版SHA1是
SHA1: 02:6B:07:04:0F:CC:81:EE:15:7C:2B:3B:EE:F6:9A:9E:5A:D0:C0:33。

第二种方法是使用cmd获取:
QQ图片20191018085634.png
键入我们的密钥库口令。结果如下图所示:
QQ图片20191018085637.png
从上图中,可以看到我们的发布版的SHA1。

如此,本篇文章结束。

Android Studio 3.5:格式化Xml布局错乱解决方法

具体解决方法如下:

Settings–>Editor–> Code Style–>XML
点击右上角的Set from->Predefined Style选择Android后点击OK保存.

QQ图片20190911101712.png

Chrome V69 显示完整URL的方法

Chrome V69 显示完整URL的方法:地址栏输入:chrome://flags 按如图设置即可。
https://superuser.com/questions/1333575/chrome-address-bar-no-longer-shows-protocol-or-www-subdomain

方法出处:
开源中国某哥们的动弹
https://my.oschina.net/vabright/tweet/18012007

解决LNMP环境下WordPress后台缺少"WP-ADMIN"路径

LNMP一键安装包也是老左比较喜欢使用的环境之一,昨天帮助一个网友搭建LNMP环境后发现登陆WP后台之后点击左侧的菜单发现直接跳转404错误,开始还以为数据库问题,视线朝上一看原来在地址栏中的路径缺少"wp-admin"路径。应该是wordpress重定向丢失。解决方法很简单,我们在/usr/local/nginx/conf/wordpress.conf文件进行修改。

location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.

) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.

) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

绿色部分为需要添加进去的,添加完毕后,重启lnmp就可以解决缺少wp-admin路径问题

/root/lnmp restart

出处: http://www.laozuo.org/649.html | 老左博客

USB调试不能弹出授权窗口 unauthorized 的解决办法

在首次使用adb connect,然后adb shell的时候,常常需要点击弹出的对话框,否则出现

error: device unauthorized. Please check the confirmation dialog on your device.
这种情况在没有显示屏的时候或者多人连接时不太方便。这时候想默认授权而不用点击对话框想要去除弹框。
先了解它的工作原理,以下来自
-------------------------------------以下为转载--------------------------------------------------------------------------------------------
http://blog.csdn.net/sowhat_ah/article/details/43307907

工作原理是什么?

原来在我们的PC机(以windows为例)上启动了adb.exe进程时,adb会在本地生成一对密钥adbkey(私钥)与adbkey.pub(公钥);

根据弹框提示“The computer's RSA key fingerprint is:xxxx”,可以看出是一对RSA算法的密钥,其中公钥是用来发送给手机的;

当你执行“adb shell”时,adb.exe会将当前PC的公钥(或者公钥的hash值)(fingerprint)发送给android设备;这时,如果android上已经保存了这台PC的公钥,则匹配出对应的公钥进行认证,建立adb连接;如果android上没有保存这台PC的公钥,则会弹出提示框,让你确认是否允许这台机器进行adb连接,当你点击了允许授权之后,android就会保存了这台PC的adbkey.pub(公钥);

当然手机厂商也有可能会内置一些adbkey.pub(公钥);

那么问题来了,这些密钥在PC与Android上分别存储在哪里?

首先PC上,以Windows7为例,当你首次启动adb.exe时,会在C盘的当前用户的目录下生成一个".android"目录,其中adbkey与adbkey.pub就在这个目录下;(adb.exe会在启动时读取这两个文件(没有就重新生成),所以如果你要是删除或者修改了这两个文件之后,必须要关闭adb.exe进程,重启之后才能生效;)

其次Android上,PC的公钥被保存在一个文件中"/data/misc/adb/adb_keys";

在知道了adb这种认证的原理之后,你可以在不希望自己android设备授权任何PC设备进行adb链接时,清除"/data/misc/adb/adb_keys"文件;

也可以在没有屏幕的情况下,让已经认证过的PC将你PC上的adbkey.pub中的公钥导入到android中的"/data/misc/adb/adb_keys"文件中,或者将已经认证过的PC机上的adbkey与adbkey.pub拷贝到本机上覆盖你自己的adbkey与adbkey.pub,然后重启adb.exe,即可执行adb命令;

-------------------------------------------------------以上为转载---------------------------------------------------------------------------------------------------------------

因此,方法一、 根据转载的文章。在机器上建立/data/misc/adb/adb_keys 以及 在PC上建立adbkey.pub。

方法二、修改framework的代码,这里重点要说的方法,经过实验成功。

修改文件 UsbDebuggingActivity.java

  @Override
    public void onReceive(Context content, Intent intent) {
        String action = intent.getAction();
        if (!UsbManager.ACTION_USB_STATE.equals(action)) {
            return;
        }


        //: usb show UI
        //boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
        boolean connected  = false;   //给connect赋值,关掉UI
        if (!connected) {
            mActivity.finish();
        }
   //allowUsbDebugging
   try {
   IBinder b = ServiceManager.getService(USB_SERVICE);     
      IUsbManager service = IUsbManager.Stub.asInterface(b);
   service.allowUsbDebugging(true, mKey);
        } catch (Exception e) {
        Log.e(TAG, "Unable to notify Usb service", e);
    }
   //<<end

    }
}