generator-android-mvp-starter
Version:
An MVP Boilerplate to save me having to create the same project over from scratch every time! :)
121 lines (108 loc) • 4.47 kB
JavaScript
'use strict';
const Generator = require('yeoman-generator');
const mkdirp = require('mkdirp');
const yosay = require('yosay');
const chalk = require('chalk');
module.exports = Generator.extend({
initializing: function () {
this.props = {};
},
prompting: function () {
this.log(yosay(
'Welcome to ' + chalk.red('Android Starter') + ' generator!'
));
const prompts = [
{
name: 'name',
message: 'What are you calling your app?',
store: true,
default: this.appname // Default to current folder name
},
{
name: 'package',
message: 'What package will you be publishing the app under?'
},
{
type: 'list',
name: 'language',
message: 'What language would you like to use? ',
choices: [
{
value: 'kotlin',
name: 'Kotlin'
},
{
value: 'java',
name: 'Java'
}
],
default: 0
},
{
name: 'targetSdk',
message: 'What Android SDK will you be targeting?',
store: true,
default: 26 // Android 8.0 (O(7.1+))
},
{
name: 'minSdk',
message: 'What is the minimum Android SDK you wish to support?',
store: true,
default: 19 // Android 4.0 (Ice Cream Sandwich)
}];
return this.prompt(prompts).then(props => {
this.props.appPackage = props.package;
this.props.language = props.language;
this.appName = props.name;
this.appPackage = props.package;
this.androidTargetSdkVersion = props.targetSdk;
this.androidMinSdkVersion = props.minSdk;
});
},
writing: function () {
var packageDir = this.props.appPackage.replace(/\./g, '/');
var appFolder;
if (this.props.language === 'java') {
appFolder = 'template-java';
} else {
appFolder = 'template-kotlin';
}
mkdirp('app');
mkdirp('app/src/main/assets');
mkdirp('app/src/main/java/' + packageDir);
mkdirp('app/src/androidTest/java/' + packageDir);
mkdirp('app/src/commonTest/java/' + packageDir);
mkdirp('app/src/debug');
mkdirp('app/src/release');
mkdirp('app/src/test/resources');
mkdirp('app/src/test/java/' + packageDir);
var appPath = this.sourceRoot() + '/' + appFolder + '/';
this.fs.copy(appPath + 'gitignore', '.gitignore');
this.fs.copy(appPath + 'build.gradle', 'build.gradle');
this.fs.copy(appPath + 'gradle.properties', 'gradle.properties');
this.fs.copy(appPath + 'gradlew', 'gradlew');
this.fs.copy(appPath + 'gradlew.bat', 'gradlew.bat');
this.fs.copy(appPath + 'settings.gradle', 'settings.gradle');
this.fs.copy(appPath + 'app/gitignore', 'app/.gitignore');
this.fs.copy(appPath + 'app/lint.xml', 'app/lint.xml');
this.fs.copy(appPath + 'app/dependencies.gradle', 'app/dependencies.gradle');
this.fs.copy(appPath + 'app/proguard-rules.pro', 'app/proguard-rules.pro');
if (this.props.language === 'java') {
this.fs.copy(appPath + 'config', 'config');
}
this.fs.copy(appPath + 'gradle', 'gradle');
this.fs.copy(appPath + 'app/src/main/res', 'app/src/main/res');
this.fs.copy(appPath + 'app/src/test/resources', 'app/src/test/resources');
this.fs.copyTpl(appPath + 'README.md', 'README.md', this.props);
this.fs.copyTpl(appPath + 'app/build.gradle', 'app/build.gradle', this.props);
this.fs.copyTpl(appPath + 'app/src/androidTest/java/io/mvpstarter/sample', 'app/src/androidTest/java/' + packageDir, this.props);
this.fs.copyTpl(appPath + 'app/src/commonTest/java/io/mvpstarter/sample', 'app/src/commonTest/java/' + packageDir, this.props);
this.fs.copyTpl(appPath + 'app/src/debug/AndroidManifest.xml', 'app/src/debug/AndroidManifest.xml', this.props);
this.fs.copyTpl(appPath + 'app/src/debug/res', 'app/src/debug/res', this.props);
this.fs.copyTpl(appPath + 'app/src/main/AndroidManifest.xml', 'app/src/main/AndroidManifest.xml', this.props);
this.fs.copyTpl(appPath + 'app/src/main/java/io/mvpstarter/sample', 'app/src/main/java/' + packageDir, this.props);
this.fs.copyTpl(appPath + 'app/src/main/res/layout', 'app/src/main/res/layout', this.props);
this.fs.copyTpl(appPath + 'app/src/release/res', 'app/src/release/res', this.props);
this.fs.copyTpl(appPath + 'app/src/test/java/io/mvpstarter/sample', 'app/src/test/java/' + packageDir, this.props);
}
});