Android 打包(构建)api不显示备案所需的MD5如何处理?

大部分的时候开发app都是给自己用,在手机上安装就可以了。

但是如果你想把你的apk上传到各大市场去,给别人使用,那么在中国大陆你的app就一定要备案。

在备案的过程中有一项就是填写你的MD5指纹,具体是什么,大家可以去搜索下,这里不过多的阐述了。

如果Android Studio是老版本的话,在构建apk的时候会让你选择是否使用版本1和版本2进行签名,如下:

但是如果是比较新的版本Android Studio是没有选择的,如下图所示:

而且我们通过新版本的Android Studio创建的密钥也没有MD5,

原因是Google公司觉得MD5不安全,所以隐藏了,所以一般你去看指纹的话只有SHA1和SHA256的信息。

但是备案需要,我们可以通过其他方式可以获取。

  • 第一步:手动或者自动获取Key文件
keytool -genkeypair -v -keystore my-app-release.jks -keyalg RSA -keysize 2048 -validity 36500 -alias app-release-key

my-app-release.jks:名称,app-release-key:别名,自己自定义就可以了。

  • 生成文件证书(为了获取md5)
keytool -exportcert -keystore my-app-release.jks -alias app-release-key -file cert.cer
  • 显示(备案)md5
certutil -hashfile cert.cer MD5
  • 生成(备案)公钥
certutil -encode cert.cer cert_base64.txt

这样基本上能解决新版本Android Studio不显示md5的情况了。

JavaScript 中 箭头函数(Arrow Function)的语法差异.

bug重现

在项目调试的时候,发现javascript在过滤数组的时候,发现竟然为空数组。

var ages = [32, 33, 16, 40]; //想要获取除了第二个元素外的所有元素
//第一种写法:
var a = ages.filter((_, index) => index !== 1);

//第二种写法:
var a = ages.filter((_, index) => { index !== 1 });

这两种写法,就因为有一个{}导致结果完全不一样,第一种写法能够返回预想中的效果。

第二种写法就会返回一个空的数组。

原因

  • 第一种写法,没有{},那么他就不是一个代码块,等于直接返回 index !== 1 的元素。
  • 第二种写法,因为有{},那么就是一个代码块,而我们没有给return,那么就返回一个undefined。

修改:

如果我们硬性要求添加{},那么我们就应该添加一个return

var a = ages.filter((_, index) => { return index !== 1 });