秘钥丢失或泄漏:
1.无法发布已有应用的更新,签名文件不同导致无法覆盖安装
2,被人重新打包,添加私活,偷偷获取用户数据等
从编译文件中移除签名信息
android 保障密钥的安全 keystore.properties - Welcome My Blog! - OSCHINA - 中文开源技术交流社区
关于签名文件的知识总结 - zhangmiao14 - 博客园
在您创建签名配置时,Android Studio 会以纯文本形式将您的签名信息添加到模块的 build.gradle 文件中。如果您通过团队协作开发项目或者要将您的代码开源,那么您应该将此敏感信息从编译文件中移出,以免被其他人轻易获取。为此,您应该创建一个单独的属性文件来存储安全信息并在您的编译文件中引用此文件,具体步骤如下所示:
创建一个签名配置,并将其分配到一个或多个编译类型。这些说明假设您已经按照上面配置编译流程以自动为应用签名部分所述,为发布版本类型配置了一个签名配置。 在项目的根目录下创建一个名为 keystore.properties 的文件。此文件应该包含您的签名信息,具体代码如下所示:
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation
demo:
storePassword=sdfsdf
keyPassword=fsdfsdf
keyAlias=fsdfdsf
storeFile=../../mykey.jks
debugstorePassword=dfsf
debugkeyPassword=sdfdf
debugkeyAlias=fsdf
debugstoreFile=dfsf
在模块的 build.gradle 文件中,在 android {} 块的前面添加用于加载 keystore.properties 文件的代码。
...
// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("keystore.properties")
// Initialize a new Properties() object called keystoreProperties.
def keystoreProperties = new Properties()
// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
...
}
注意:您可以选择将 keystore.properties 文件存储在其他位置(例如,存储在模块文件夹中而不是项目的根文件夹中,或者如果您使用持续集成工具,也可以存储在编译服务器上)。在这种情况下,您应该修改上面的代码,以使用实际的 keystore.properties 文件的位置正确初始化 keystorePropertiesFile。
您可以使用语法 keystoreProperties['propertyName'] 引用存储在 keystoreProperties 中的属性。修改模块的 build.gradle 文件的 signingConfigs 块,以便使用此语法引用存储在 keystoreProperties 中的签名信息。
android {
signingConfigs {
config {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
...
}
demo:
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
debug {
keyAlias keystoreProperties['debugkeyAlias']
keyPassword keystoreProperties['debugkeyPassword']
storeFile file(keystoreProperties['debugstoreFile'])
storePassword keystoreProperties['debugstorePassword']
}
}
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
zipAlignEnabled true
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
打开 Build Variants 工具窗口,并确保已选择发布版本类型。 选择 Build > Build Bundle(s) / APK(s) 下的选项,编译您的发布版本的 APK 或 app bundle。您应该会在模块的 build/outputs/ 目录中看到相应编译输出。
由于您的编译文件不再包含敏感信息,您现在可以将其包含在源代码控制系统中或者上传到共享的代码库。请务必保障 keystore.properties 文件的安全。您可能需要将其从您的源代码控制系统中移除