跟着导师第一次做一个使用人数达到4位数的软件,软件提供了更新,结果在更新的时候发现,有的人显示的是已安装了存在签名冲突的同名数据包,不能安装。查了下发现是keystore的问题。(直接用apk文件夹下的debug版本的apk放在服务器给他们安装和更新的)
keystore不设置的话默认使用的是C:\Users\Fly\.android下面的debug.keystore,每台电脑的都不一样,所以导致了无法安装的情况。
如何生成自己的keystore呢?这个需要用到keytool这个东西。
首先cmd进入到F:\Java\jdk1.8\bin,keytool就在这个文件夹下。
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
-alias android.keystore 生成的keystore别名
-keyalg RSA 加密和数字签名的算法
-validity 1000 有效天数
F:\Java\jdk1.8\bin>keytool -genkey -alias whu.keystore -keyalg RSA -validity 200
00 -keystore whu.keystore
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: Wang
您的组织单位名称是什么?
[Unknown]: whu
您的组织名称是什么?
[Unknown]: whu
您所在的城市或区域名称是什么?
[Unknown]: 武汉市
您所在的省/市/自治区名称是什么?
[Unknown]: 湖北省
该单位的双字母国家/地区代码是什么?
[Unknown]: 86
CN=Wang, OU=whu, O=whu, L=武汉市, ST=湖北省, C=86是否正确?
如果没有错误就可以在bin目录下发现多了一个whu.keystore的文件。
如何查看keystore的内容呢呢?
依然用keystool那个工具,keytool -list -v -keystore whu.keystore
注:默认的debug.keystore的密码是android
如何在Android Studio中设置keystore呢?
在build.gradle的Android节点下加一段话:
signingConfigs{ debug{ storeFile file("C:\\Users\\Fly\\.android\\whu.keystore") storePassword "flyzy2005" keyAlias "whu.keystore" keyPassword "flyzy2005" } }
也可以这样设置:
signingConfigs {
release {
storeFile file("xxxxxxxxStore")
storePassword "xxxxxxxx"
keyAlias "timehut team"
keyPassword "xxxxxxxx"
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
}
}
这样编译出来的debug版本直接用的是正式签名。
如何在Android Studio中设置app的签名呢?
Build->Generate Signed APK,
选择刚才的那个keystore,然后输入名字密码,点Finish就可以在Gragle Console里面看到是否生成了relese版本的apk了。
一定要注意签名!!!!不然更新真的是问题!!!!!