anchor.diff:        target: argResults['target'],
         flxPath: argResults['flx'],
         aotPath: argResults['aot-path'],
  -      extraFiles: extraFiles,
  +      addFiles: argResults['add-file'],
         keystore: (argResults['keystore'] ?? '').isEmpty ? null : new ApkKeystoreInfo(
           keystore: argResults['keystore'],
           password: argResults['keystore-password'],
  
positive.code: 
    @override
    Future<int> runInProject() async {
      // Validate that we can find an android sdk.
      if (androidSdk == null) {
        printError('No Android SDK found. Try setting the ANDROID_HOME environment variable.');
        return 1;
      }
  
      List<String> validationResult = androidSdk.validateSdkWellFormed();
      if (validationResult.isNotEmpty) {
        validationResult.forEach(printError);
        printError('Try re-installing or updating your Android SDK.');
        return 1;
      }
  
      BuildMode mode = getBuildMode();
  
      Map<String, File> extraFiles = <String, File>{};
      for (String addFile in argResults['add-file']) {
        List<String> keyValue = addFile.split('=');
        if (keyValue.length != 2) {
          printError('add-file option must have the format <path/in/APK>=<local/file/path>');
          return 1;
        }
        extraFiles[keyValue.first] = new File(keyValue.last);
      }
  
      if (FileSystemEntity.isDirectorySync(_kDefaultAssetsPath)) {
        Directory assetsDir = new Directory(_kDefaultAssetsPath);
        for (FileSystemEntity entity in assetsDir.listSync(recursive: true)) {
          if (entity is File) {
            String targetPath = entity.path.substring(assetsDir.path.length);
            extraFiles["assets/$targetPath"] = entity;
          }
        };
      }
  
      // TODO(devoncarew): This command should take an arg for the output type (arm / x64).
  
      return await buildAndroid(
        TargetPlatform.android_arm,
        mode,
        force: true,
        manifest: argResults['manifest'],
        resources: argResults['resources'],
  
negative.code: }
  
  // Returns true if the apk is out of date and needs to be rebuilt.
  bool _needsRebuild(String apkPath, String manifest, Map<String, File> extraFiles) {
    FileStat apkStat = FileStat.statSync(apkPath);
    // Note: This list of dependencies is imperfect, but will do for now. We
    // purposely don't include the .dart files, because we can load those
    // over the network without needing to rebuild (at least on Android).
    List<String> dependencies = <String>[
      manifest,
      _kFlutterManifestPath,
      _kPackagesStatusPath
    ];
    dependencies.addAll(extraFiles.values.map((File file) => file.path));
    Iterable<FileStat> dependenciesStat =
      dependencies.map((String path) => FileStat.statSync(path));
  
    if (apkStat.type == FileSystemEntityType.NOT_FOUND)
      return true;
  