1.生成.jks或者.keystore文件
.keystore和.jks文件都是用于android签名的,.keystore适用于eclipse签名的,.jks用于androidstudio中使用的
打开终端:
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
生成.jks文件有两种方式,但原理都是一样
在androidstudio中点击Build -> Generate Signed Apk -> create new key store 即可
keytool -genkey -v -keystore release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ucall_release
配置完成所有信息即可,生成.jks文件后,他会提示使用行业标准格式,后面会提示使用下面的命令:
keytool -importkeystore -srckeystore release.jks -destkeystore release.jks -deststoretype pkcs12
在命令行执行即可,则生成了我们需要的.jks文件
2.android studio中的相关
signingConfigs中的配置是主要是为了配置签名包的信息.但是我们的项目是要放到项目托管网站上的话,这样一来项目的签名信息和签名文件就暴露了。所以我们只能本地使用签名文件,配置信息也只能从另一个文件中加载出来。
1.创建signing.properties保存签名信息
在项目的app目录下创建一个signing.properties文件,在里面配置签名信息:
KEYSTORE_FILE = ..\\sign\\release.jks
KEY_ALIAS = ucall_release
KEYSTORE_PWD= fhit123!@#
KEY_PWD= fhit123!@#
DEBUG_KEYSTORE= C\:\\Users\\summer\\.android\\debug.keystore
DEBUG_ALIAS= androiddebugkey
DEBUG_KEYSTORE_PWD= android
DEBUG_KEY_PWD= android
注:KEYSTORE_File和DEBUG_KEYSTORE分别代表正式的签名文件和Debug的签名文件,根据两个文件的路径可以自行更改 ,一般情况下:debug.keystored都位于 C:\Users\summer.android\debug.keystore
2.在app\build.gradle中引入signing.properties文件,并配置signingConfigs
在build.gradle文件中android{}外部添加:
//加载signing.properties文件
Properties props = new Properties()
props.load(project.rootProject.file('app/signing.properties').newDataInputStream())
然后就可以在android{}中配置:
signingConfigs {
release {//发布版本的签名配置
storeFile file(props['KEYSTORE_FILE'])
keyAlias props['KEY_ALIAS']
storePassword props['KEYSTORE_PWD']
keyPassword props['KEY_PWD']
v1SigningEnabled true
v2SigningEnabled true
}
debug {//调试版本的签名配置
storeFile file(props['DEBUG_KEYSTORE'])
keyAlias props['DEBUG_ALIAS']
storePassword props['DEBUG_KEYSTORE_PWD']
keyPassword props['DEBUG_KEY_PWD']
v1SigningEnabled true
v2SigningEnabled true
}
}
3.修改.gitignore
在项目根目录下的.gitignore中将signing.propeties和release.jks文件添加进来,这样就能保证这两个文件不会被上传到项目托管网站上去.
现在需要将签名配置生效,需要在buildTypes中将signingConfigs中的配置引入,故要在module中的build.gradle文件中的android{}中添加以下代码:
buildTypes {
release {
debuggable true
minifyEnabled true //启用Proguard
shrinkResources true //是否清理无用资源,依赖于minifyEnabled
zipAlignEnabled true //是否启用zipAlign压缩
signingConfig signingConfigs.release//引用signingConfigs中release的配置
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
minifyEnabled false //不启用Proguard
shrinkResources false //是否清理无用资源,依赖于minifyEnabled
zipAlignEnabled false //是否启用zipAlign压缩
signingConfig signingConfigs.debug//引用signingConfigs中debug的配置
}
}
这样一来在打包的时候就可以生成我们的签名包了,当然在android{}中还有其他的配置,如productFlavors{},这可以增加生成的apk的多样性,如针对不同的渠道的配置等等,以后会有专门写一篇文章介绍productFlavors的,这里就不展开讲了
我们常用的打包方式是,点击build->generate signed apk的方式,然后再选择一个buildVariant即可。
但是有了gradle工具之后就非常方便了,gradle工具提供了非常便捷的方式,
在Android studio的侧边栏上点击gradle,找到你要进行打包的module,点击Tasks,再点击build,会发现里面会有clean,assembleDebug和assembleRelease等等(如果没有找到,就去Tasks\other里面去找),当然,如果你配置了productFlavors的话,名字就不一样了,格式是assembleXXXDebug或者assembleXXXRelease。首先双击clean,clean完成后,双击你想要的生成版本,比如点击assembleRelease,会在module的build\outputs\apk目录下看到相应的apk文件了
另外,当我们点击运行的按钮时,androidstudio做了什么事呢?
其实,就是通过你选择的一个buildVariant进行构建,在module中的build\outputs\apk目录中生成apk文件,然后通过adb install 命令将该apk安装到设备上
adb install release.apk
另外在使用gradle构建时,可以使使用混淆和build缓存等方式加快构建速度,详情参考链接:
https://mp.weixin.qq.com/s/AyBkfNL_vodQVLgaZOD6kQ