秘鑰丢失或洩漏:
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 檔案的安全。您可能需要将其從您的源代碼控制系統中移除