GitHub地址
打包过程视频预览
对于macOS用户使用flutter build apk
打包可为曲折,官方只给出了Android正常的配置流程,但是macOS用户是不行滴---需要申请系统的访问权限授权
-
简略的Android Studio配置(默认你的签名文件已经设置完成)
防止key.properties文件
配置gradle
-
配置脚本执行是申请macOS的系统权限参考文章
-
打开keychain app, 选中密码,点击底部toolbar的+
-
设置对应的信息
密钥项目名称:随意填写,就是一个名称
账户名称:可以打开终端输入```whoami```可以查看对应用户
-
gradle配脚本
def getPassword(String currentUser, String keyChain) { def stdout = new ByteArrayOutputStream() def stderr = new ByteArrayOutputStream() exec { commandLine 'security', '-q', 'find-generic-password', '-a', currentUser, '-s', keyChain, '-w' standardOutput = stdout errorOutput = stderr ignoreExitValue true } //noinspection GroovyAssignabilityCheck stdout.toString().trim() } def getWhoami(){ def stdout = new ByteArrayOutputStream() def stderr = new ByteArrayOutputStream() exec { commandLine 'whoami' standardOutput = stdout errorOutput = stderr ignoreExitValue true } //noinspection GroovyAssignabilityCheck stdout.toString().trim() } //def pass = getPassword("YOUR_USER_NAME","android_keystore") //终端中 whoami 查看YOUR_USER_NAME android_keystore你在密钥串中设置的名称 def pass = getPassword(getWhoami(),"les01_flutter")
-
最终配置
def getPassword(String currentUser, String keyChain) {
def stdout = new ByteArrayOutputStream()
def stderr = new ByteArrayOutputStream()
exec {
commandLine 'security', '-q', 'find-generic-password', '-a', currentUser, '-s', keyChain, '-w'
standardOutput = stdout
errorOutput = stderr
ignoreExitValue true
}
//noinspection GroovyAssignabilityCheck
stdout.toString().trim()
}
def getWhoami(){
def stdout = new ByteArrayOutputStream()
def stderr = new ByteArrayOutputStream()
exec {
commandLine 'whoami'
standardOutput = stdout
errorOutput = stderr
ignoreExitValue true
}
//noinspection GroovyAssignabilityCheck
stdout.toString().trim()
}
//def pass = getPassword("YOUR_USER_NAME","android_keystore") //终端中 whoami 查看YOUR_USER_NAME android_keystore你在密钥串中设置的名称
def pass = getPassword(getWhoami(),"les01_flutter")
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
compileSdkVersion 27
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.xiangshike.les01hello"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
storeFile file(keystoreProperties['storeFile'])
/*
//windows用户
keyPassword keystoreProperties['keyPassword']
storePassword keystoreProperties['storePassword']
*/
storePassword pass // Change this
keyPassword keystoreProperties['keyPassword'] // Change this
}
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
// signingConfig signingConfigs.debug
signingConfig signingConfigs.release
}
}
}
打包:
flutter build apk --debug