关于签名错误"INSTALL_PARSE_FAILED_NO_CERTIFICATES"的踩坑之旅
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于签名错误"INSTALL_PARSE_FAILED_NO_CERTIFICATES"的踩坑之旅相关的知识,希望对你有一定的参考价值。
参考技术A上一把都还调试安装正常,添加库,修改gradle文件,然后签名验证失败,出现如下错误:
分析:初步判断和签名方式有关,但是一般未指定keyStore文件,调试状态下默认使用系统盘下Users\\xxx.android\\debug.keystore,而且在修改gradle文件里面仅仅是添加依赖,并未修改相关签名配置;
分析:很多兄弟说到Android7.0后使用新的签名方式,打包以防万一,两种方式都勾选,然后一拍脑袋手动配置debug的签名,并指明两种签名方式均可用。为什么无效呢?进源码一看:(原来这两个值默认就是true,根本不用设置)
分析:到这里确实产生困惑了,按理说Android6手机不行,高于6就正常,确实应该和签名方式有关啊,束手无策...
分析:原来和添加的依赖包有关,回头一看只是添加了Mqtt相关依赖,并未有多余动作,猛然想起高版本手机貌似抛出过异常,当时一心解决签名问题,忽略了,回头看看:
分析:这个非常见异常,赶紧去查了查:
原因为maven打包之后由于重复引用某些依赖导致生成了一些.RSA、.DSA和.SF等文件,运行jar时会抛出该异常 ,多数解决方案都是删除Jar中的这些文件,于是修改打包配置:
1、V1(JAR)签名需要对apk内所有文件进行签名,V2方案是针对APK整体文件进行签名;同理安装校验签名,V1需要对所有文件进行hash校验,V2只需要校验一次。
2、V1只保证了Apk压缩包内每个文件的完整性,不能保证整个包的完整性,V2两者均能保证。
3、有较多文件的工程,V2在打包、安装解析两个过程中明显快于V1
打字稿错误:此表达式不可调用。类型 'typeof import("koa-session")' 没有调用签名
【中文标题】打字稿错误:此表达式不可调用。类型 \'typeof import("koa-session")\' 没有调用签名【英文标题】:Typescript error: This expression is not callable. Type 'typeof import("koa-session")' has no call signatures打字稿错误:此表达式不可调用。类型 'typeof import("koa-session")' 没有调用签名 【发布时间】:2020-09-09 21:06:57 【问题描述】:部分解决:
github上有一个老问题,这里稍微描述一下这个问题。当您在全局范围内声明一个模块时,它会重写整个导出模块的类型。当您在模块中声明模块时,它会合并。为什么?我不知道
https://github.com/microsoft/TypeScript/issues/17736#issuecomment-344353174
我想通过接口合并来扩展第三方模块的类型。一切正常,但是当我发表评论时
export ;
在 types.d.ts 我遇到以下错误:
此表达式不可调用。输入'typeof import("koa-session")' 没有呼叫签名
你能解释一下为什么会这样吗?
您可以在此处查看工作代码: https://codesandbox.io/s/typescript-node-nocfq?file=/src/types.d.ts
【问题讨论】:
【参考方案1】:TypeScript github 上已解决了类似问题。不幸的是,我现在知道任何其他可以描述它的文档页面。
注释掉export
会将types.d.ts
文件从模块 变成脚本。来自TypeScript handbook:
在 TypeScript 中,就像在 ECMAScript 2015 中一样,任何包含***导入或导出的文件都被视为一个模块。相反,没有任何***导入或导出声明的文件被视为脚本,其内容在全局范围内可用(因此也可用于模块)。
由于没有 export 语句(也没有 import 语句)的文件不是一个模块,而是一个脚本,它没有关于任何模块的信息,并且确实会忽略存在“koa-session”定义的事实。
您可以在您的沙盒中尝试此操作 - 在 types.d.ts
中添加任何*** import
或 export
(它可以完全未使用)将修复 This expression is not callable
错误。
【讨论】:
感谢您的回答。但这并没有描述我的问题。我使用声明模块“koa-session”,从逻辑上讲,它应该在模块和全局范围内工作。但它的行为不同。我已经发现,在全局范围内使用模块“koa-session”会重写任何模块的导出类型。为什么?我不知道,它没有在任何地方描述 因为没有 export 语句(也没有 import 语句)的文件不是一个模块,而是一个脚本,它没有关于任何模块的信息,并且确实会忽略“koa”的现有定义这一事实-会议”。除了这个 github 线程之外,我不知道任何文档(抱歉,那里发生了很多事情,请选择相关的部分)github.com/microsoft/TypeScript/issues/… 感谢您的链接。这似乎是我所期望的。它甚至解释了为什么应该省略命名空间。您能否附加此链接并相应地格式化您的问题?我会接受它并奖励你的赏金【参考方案2】:如果要增强接口并进行接口合并,则需要导入接口。你正在做的是完全重写它。
import Session from "koa-session";
declare module "koa-session"
interface Session
user:
id: number;
username: string;
;
只要这样做,您就会随心所欲地增强界面。
【讨论】:
根据文档,由于声明合并,我无法重写它。此外,当我只添加“export ”时,它会正确合并。我假设当您导入任何内容时也会发生同样的情况,而不仅仅是会话 能否提供一个文档链接,上面说 Typescript 允许重写而不是合并? 我也不需要解决方案。我需要解释以上是关于关于签名错误"INSTALL_PARSE_FAILED_NO_CERTIFICATES"的踩坑之旅的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 中与 REST Api 进行会话时出现 QuickBlox“意外签名”错误
为啥 TypeScript 声称它“无法调用类型缺少调用签名的表达式”?