关于APK签名的介绍 - MrWu94/AndroidNote GitHub Wiki

从您的构建文件中移除签署信息

在您创建签署配置时,Android Studio 会以纯文本形式将您的签署信息添加到模块的 build.gradle 文件中。如果您是团队协作开发或者将您的代码开源,那么您应当将此敏感信息从构建文件中移出,以免被其他人轻易获取。为此,您应创建一个单独的属性文件来存储安全信息并按以下步骤操作,在您的构建文件中引用该文件:

创建一个签署配置,并将其分配至一个或多个构建类型。这些说明假设您已经按照上面配置构建流程以自动签署您的 APK 部分所述,为发布构建类型配置了一个签署配置。 在项目的根目录下创建一个名称为 keystore.properties 的文件。此文件应当包含您的签署信息,如下所示:

storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation

在模块的 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['属性名称'] 引用存储在 keystoreProperties 中的属性。修改模块 build.gradle 文件的 signingConfigs 块,以便使用此语法引用存储在 keystoreProperties 中的签署信息。

android {
    signingConfigs {
        config {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
    ...
  }

打开 Build Variants 工具窗口并确保已选择发布构建类型。 点击 Build > Build APK 以构建您的发布构建,并确认 Android Studio 已在模块的 build/outputs/apk/ 目录中创建一个签署的 APK。 由于您的构建文件不再包含敏感信息,您现在可以将其包含在源控制中或者上传到共享的代码库。务必保证 keystore.properties 文件的安全。您可能需要将其从您的源控制系统中移除。

1、什么是数字签名

数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的。

2、为什么要数字签名

最简单直接的回答:系统要求的。

Android系统要求每一个Android应用程序必须要经过数字签名才能