script to create a new flutter app with release setup

* needs default organisation and default key.properties
This commit is contained in:
gutmet 2020-05-19 23:30:00 +02:00
parent 12688648d4
commit f4e85c0990

295
createFlutter Executable file
View File

@ -0,0 +1,295 @@
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "USAGE: $0 PACKAGE_NAME DESCRIPTION"
exit 1
fi
PROJECT_HOME=~/AndroidStudioProjects
ORG_PATH="$PROJECT_HOME/defaultOrg"
KEY_PROPERTIES_PATH="$PROJECT_HOME/defaultKeyProperties"
packageName="$1"
description="$2"
echo "Package Name: $packageName"
echo "Description: $description"
if [[ -f "$ORG_PATH" ]]; then
org=`cat "$PROJECT_HOME/defaultOrg"`
else
echo "Could not find file with default org in $ORG_PATH"
exit 1
fi
if [[ -f "$KEY_PROPERTIES_PATH" ]]; then
keyProperties=`cat "$PROJECT_HOME/defaultKeyProperties"`
else
echo "Could not find file with default key properties in $KEY_PROPERTIES_PATH"
exit 1
fi
flutter create --org "$org" "$packageName" || exit 1
cd "$packageName"
#########################
#### create .gitignore ##
#########################
cat > .gitignore <<EOF
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.packages
.pub-cache/
.pub/
/build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
EOF
git init
##################################
## generate empty launcher icon ##
##################################
convert -size 2048x2048 xc:white LauncherIcon.png
############################
## overwrite pubspec.yaml ##
############################
cat > pubspec.yaml <<EOF
name: $packageName
description: $description
version: 1.0.0+1
environment:
sdk: ">=2.2.2 <3.0.0"
dependencies:
flutter:
sdk: flutter
intl: ^0.15.7
shared_preferences: ^0.5.4+8
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter_launcher_icons: "^0.7.3"
flutter_icons:
image_path: "LauncherIcon.png"
android: true
ios: true
flutter:
uses-material-design: true
EOF
#########################################
## generate key.properties for signing ##
#########################################
cat > android/key.properties <<EOF
$keyProperties
EOF
############################
## overwrite build.gradle ##
############################
cat > android/app/build.gradle <<EOF
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply from: "\$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "$org.$packageName"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
EOF
#####################
## empty README.md ##
#####################
cat > README.md <<EOF
# $packageName
$description
EOF
#####################
## create Makefile ##
#####################
cat > Makefile <<EOF
.PHONY: clean all launcherIcon
all: launcherIcon
flutter pub get
flutter build appbundle
clean:
flutter clean
launcherIcon:
flutter pub get
flutter pub run "flutter_launcher_icons:main"
EOF
################
## test build ##
################
make clean launcherIcon all
make clean