Flutter中Android APP打包签名(MacOS+AS版)

APP签名的目的的确保APP的安装包来自于原创作者,且APP没有被篡改。

具体步骤如下:

1、生成签名文件(*.jks,如有现成的文件请忽略),打开“终端”,直接输入如下命令:

keytool -genkey -v -keystore ~/asign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias asign

其中,asign.jks为文件名。这里最好修改下文件名,因为使用了重复的.jks在生成apk时会报错;
validity 10000中的10000是有效天数,可修改;
alias asign中的asign为别名,可修改;

然后输入口令等几项内容,最后确认无误后在[否]: 后面输入“Y”回车即可。

生成后会提示:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore asign.jks -destkeystore asign.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

请继续复制其内容在终端中执行:

keytool -importkeystore -srckeystore asign.jks -destkeystore asign.jks -deststoretype pkcs12

执行后会提示:
已将 "asign.jks" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "asign.jks.old" 进行了备份。

查看生成的jks文件:

keytool -list -v -keystore asign.jks

2、引入签名文件
在项目目录/android/app下创建key文件夹,将生成的asign.jks文件Copy/Drag到该目录下。


签名目录结构.png

3、在flutter项目目录android下创建文件key.properties,并添加以下内容:

storePassword=**
keyPassword=**
keyAlias=asign
storeFile=key/asign.jks

注:如果密码及keyAlias和签名文件中的一致时,可能会报如下错:

* What went wrong:                                                                                                 
Execution failed for task ':app:lintVitalRelease'.                                                                 
> Could not resolve all files for configuration ':app:lintClassPath'.  后面省略

4、在Gradle中配置签名文件
打开/android/app/build.gradle文件,添加以下内容:

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

添加:

signingConfigs {
        release {
            keyAlias keystoreProperties["keyAlias"]
            keyPassword keystoreProperties["storePassword"]
            storeFile file(keystoreProperties["storeFile"])
            storePassword keystoreProperties["keyPassword"]
        }
}

并将buildTypes修改为:

buildTypes {
        release {
            // 其中release为signingConfigs中的release,可修改。
            signingConfig signingConfigs.release
        }
    }

将lintOptions修改为:

lintOptions {
        disable 'InvalidPackage' //系统已默认配置
        checkReleaseBuilds false
        abortOnError false
}

5、在Android Studio项目下的终端(也可以先cd到当前目录,然后在系统的终端中执行)中,执行打包命令:

flutter build apk

打包好的apk位于/build/app/outputs目录中。


APK目录结构.png

你可能感兴趣的:(Flutter中Android APP打包签名(MacOS+AS版))