此篇文章基于一些特殊场景,如三方分享的时候,微信需要release包才能进行分享;
当然诸如此类的三方框架不在少数,故此我借鉴了网上多篇同此需求的文章,加以总结与实践有了此篇Blog,末尾也包含了一些我遇到的坑~
优先掌握:
查看是否配置Signing属性
方式一 :项目 - 右键 - Open-Moudle-Settings
方式二:Ctrl+Shift+Alt+S
如Signing没有配置过,那么就如下图
配置方式有俩种
其均与signingConfigs 与 buildTypes 配置属性有关
方式一 : 在配置文件中,让 signingConfigs 只配置 release 包属性 ,然后通过步骤2 把release的属性设置到debug 包内 ,实现的最终效果与方式二相同
方式二 : 在配置文件中, signingConfigs 同时配置 release 包与debug 包 属性 ,同时buildTypes进行下文注释下的配置属性~
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//以下俩行记得添加!
debuggable true
signingConfig signingConfigs.release
}
//以下配置记得添加!
debug {
signingConfig signingConfigs.release
}
}
使用流程
方式一
步骤 1.在build.gradle(app)内添加 signingConfigs 属性
请将signingConfigs 放在最前方,不然buildTypes会因读取不到signingConfigs 报错!!! 因为系统默认会从从头到尾优先读取配置,同时记得配置buildTypes - - ~
android {
signingConfigs {
release {
keyAlias '别名'
keyPassword 'key 密码'
storePassword 'store 密码'
storeFile file('key存储的具体地址')
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
场景模拟,讲解 :
步骤 2.在Build Types下把debug Type默认的Signing Config 选取为 release,同时 第一个选项 Debuggable 设置为 true!!!
方式二
所有配置全部在build.gradle(app) 下完成( 完整代码):
android {
signingConfigs {
release {
keyAlias '别名'
keyPassword 'key 密码'
storePassword 'store 密码'
storeFile file('key存储的具体地址')
}
debug{
keyAlias '别名'
keyPassword 'key 密码'
storePassword 'store 密码'
storeFile file('key存储的具体地址')
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//以下俩行记得添加!
debuggable true
signingConfig signingConfigs.release
}
//以下配置记得添加!
debug {
signingConfig signingConfigs.release
}
}
/**
*补充知识
*debuggable这个构建类型是否应该生成可调试的apk
*debug "debug"类型的构建类型
*signingConfig signingConfigs.release 设置默认调用上方我们刚配置的signingConfigs.release
*/
}
错误锦集(可忽略,均为个人想法):
错误1 :AndroidMainfest加入了debug签名的信息
错误2:意为防止被他人反编译后,暴露key.store,所以在gradle.propertles中新增key.store属性,但最后发现根本读取不到此处配置的数据!(后续如有发现,在补不足之处)
gradle.properties(Project Properties)添入配置:
//签名别名
RELEASE_KEY_ALIAS=签名别名
//签名密码
RELEASE_KEY_PASSWORD=签名密码
//store密码
RELEASE_STORE_PASSWORD=store密码
//签名文件地址
RELEASE_STORE_FILE=key存储的具体地址
注意:因为读取不到属性,所以查看Signing配置是 Unrecognized value (无法识别)
错误3(疑惑)gradle.propertles的属性通过网上查找的方法,有错误报出(后续如有发现,在补不足之处):
//这里的release 可与 config互换名称,保留其一既可
config{
Properties properties = new Properties();
//获取别名且进行赋值
def key_Alias = properties.getProperty('RELEASE_KEY_ALIAS')
keyAlias key_Alias
//获取key密码且进行赋值
def key_Password = properties.getProperty('RELEASE_KEY_PASSWORD')
keyPassword key_Password
//获取store密码且进行赋值
def store_Password = properties.getProperty('RELEASE_KEY_PASSWORD')
storePassword store_Password
//方式1(获取key的存储位置)且进行赋值
def sdkDir = properties.getProperty('RELEASE_STORE_FILE')
storeFile sdkDir
//方式2(读取文件)且进行赋值
// def sdkDir = properties.getProperty('RELEASE_STORE_FILE')
// storeFile file(sdkDir)
}
借鉴文章:
Android Studio 下debug情况下直接使用release的签名
Android Studio 教你在debug调试模式下使用正式签名
Android local.properties 文件读取