setup method

Future<void> setup()

Configures application signing for the current project.

Implementation

Future<void> setup() async {
  LoggerService.section('Android Signing Setup');

  final alias = PromptService.ask('Keystore alias', defaultValue: 'fkit.jks');

  final storePassword =
      PromptService.ask('Store password', defaultValue: 'Fkit@1215');

  final keyPassword =
      PromptService.ask('Key password', defaultValue: 'Fkit@1215');

  final company =
      PromptService.ask('Company/Organization', defaultValue: 'Fkit');

  final keystoreName = '$alias-keystore.jks';

  final keystorePath = 'android/app/$keystoreName';

  final keyPropertiesPath = 'android/key.properties';

  final keystoreFile = File(keystorePath);

  if (keystoreFile.existsSync()) {
    final overwrite =
        PromptService.confirm('Keystore already exists. Overwrite?');

    if (!overwrite) {
      LoggerService.warning('Operation cancelled.');

      return;
    }

    keystoreFile.deleteSync();
  }

  LoggerService.command('Generating keystore...');

  await CommandExecutor.run('keytool', [
    '-genkey',
    '-v',
    '-keystore',
    keystorePath,
    '-keyalg',
    'RSA',
    '-keysize',
    '2048',
    '-validity',
    '10000',
    '-alias',
    alias,
    '-storepass',
    storePassword,
    '-keypass',
    keyPassword,
    '-dname',
    'CN=$company, OU=Mobile, O=$company, L=Mumbai, S=Maharashtra, C=IN',
  ]);

  LoggerService.success('Keystore generated');

  final keyProperties = '''
storePassword=$storePassword
keyPassword=$keyPassword
keyAlias=$alias
storeFile=$keystoreName
''';

  await File(keyPropertiesPath).writeAsString(keyProperties);

  LoggerService.success('key.properties created');

  await _updateGitignore();

  LoggerService.success('.gitignore updated');

  LoggerService.blank();

  LoggerService.info('Keystore: $keystorePath');

  LoggerService.info('Properties: $keyPropertiesPath');

  LoggerService.blank();

  LoggerService.warning('Next step:');

  LoggerService.info('Configure signingConfigs in Gradle.');
}