Android里的应用签名

记一次版本检测更新的bug

最近在做Android上的版本自动检测与更新功能,所有功能都没问题了,结果在新的apk文件覆盖安装环节出错了:
(版本检测与更新功能:版本信息及apk放在ftp服务上,客户端检测→发现新版本→下载apk文件→安装apk)


华为P30,Android 10

查了一下,原因是新旧版本的apk文件签名不同,有人给出的解决办法是彻底卸载旧版应用再重新安装。显然,在版本更新这里不适用。

我思考了一下,新版apk是我自己用AS生成的,签名文件也是我自己生成的。而旧版apk是由AS编译完直接安装的,那问题应该就在这里了,AS编译完直接安装的肯定没用我的签名文件...

找到问题了,卸载、安装生成的apk(不由AS安装了)、调试版本更新功能,成功。

这还不是最好的解决办法,继续往下看↓

另外说一句,调试尽量使用真机,因为模拟器只告诉了我“安装包解析失败”,是不是一脸懵逼?

应用签名的意义与使用

每个应用都应该有一个唯一的标志来标明身份,包名显然不合适,太可能完全一样了,所以应用签名就负担起了身份证的作用。有了这张身份证,就可以防止别人冒充你的应用,比如把它覆盖掉窃取用户信息,想想都危险...当然,我觉得你也要保护好自己的签名文件和密码~

那么,AS在debug时是谁给它签名的呢?

AS有一个默认的签名文件,位置:C:\Users\用户.android\debug.keystore(win10)

可以看到,AS debug时有自己的默认签名方式,既然跟我们生成apk使用的签名文件不同,自然无法实现版本更新。要彻底解决这个问题,让我们在开发阶段也可以愉快的测试版本更新功能,那就试试把AS debug的签名文件也搞成我们自己的就行了,大家保持一致,愉快更新~

来解决第一节的问题:
办法比较简单,网络上大多是这样做的:
(来个链接,讲的清晰的嘞:https://www.teachcourse.cn/2053.html)
1、首先要有一个签名文件,没有的话用AS自己生成一个;
2、在AS Build→Edit Build Types中打开Signing标签,尴尬,我的3.4.1版本并没有Signing,遍寻无果,不着急,继续往下看;
3、配置完Signing之后,在app模块下的build.gradle文件生成配置信息,像这样:

借链接内的图

4、完成。

既然最终目的是在build.gradle文件生成配置信息,那我们直接添加就好了。

先有一个签名文件,我的是YXDFQD3.jks,然后打开app模块下的build.gradle,添加如下内容:

android{
    ...

    //signingConfigs标签用于配置自定义签名文件
    signingConfigs {
        //使用YXDFQD3.jks签名的配置(YXDFQD3.jks:生成apk时使用的签名文件)
        Testconfig {
            keyAlias 'key0'
            keyPassword 'liuyubo'
            storeFile file('F:\\Project\\Android_Studio\\YXDTerminalManager\\YXDFQD3.jks')
            storePassword 'liuyubo'
        }
    }
    //指定AS debug时的签名配置(默认使用C:\Users\用户\.android\debug.keystore),解决AS debug版与生成apk版本签名不一致造成的更新安装失败问题
    buildTypes {
        release {
            minifyEnabled false //是否混淆
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.Testconfig
        }
        debug {
            signingConfig signingConfigs.Testconfig
        }
    }
    ...
}

然后同步、编译再安装,AS环境下也会使用我们指定的签名文件了。保持一致~

but!
居然安装失败,错误信息提示:新旧版本签名不一致???明明已经卸载了呀,毛都没有怎么不一致。
不要焦急,碰到这种莫名其妙的问题,试试clean project,事实上我还重启了手机~

Done!

后记

今天的收获呢

1、明白了签名的意义,唯一标志应用,算安全机制的一部分;
2、知道了AS debug模式下默认使用debug.keystore签名;
3、signingConfigs标签可以让我们自定义签名方法,替换默认签名,在版本更新这个应用场景里就很适合。

应用发布还是应该学一学,也许能了解更多关于签名或者其它知识,虽然我从事的b2b模式目前还没遇到过应用商店发布的需求,我们都是直接给用户apk,或者放在服务器上做个扫码下载(这是我马上准备做的功能,try~)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容