hunk.code_window:   // Package
     shell.sed('-i', `applicationId 'host.exp.exponent'`, `applicationId '${javaPackage}'`, `${shellPath}app/build.gradle`);
     await sedInPlaceAsync('-e', `s/android:name="host.exp.exponent"/android:name="${javaPackage}"/g`, `${shellPath}app/src/main/AndroidManifest.xml`);
     // Remove Exponent build script
     shell.sed('-i', `preBuild.dependsOn generateDynamicMacros`, ``, `${shellPath}app/build.gradle`);
     // change javaMaxHeapSize
     shell.sed('-i', `javaMaxHeapSize "8g"`, `javaMaxHeapSize "6g"`, `${shellPath}app/build.gradle`);
  
hunk.labels: keep keep keep keep add keep keep keep keep keep
hunk.after_edit:   // Versions
     let buildGradleFile = await fs.promise.readFile(`${shellPath}app/build.gradle`, 'utf8');
     let androidVersion = buildGradleFile.match(/versionName '(\S+)'/)[1];
     shell.sed('-i', 'VERSION_NAME = null', `VERSION_NAME = "${androidVersion}"`, `${shellPath}app/src/main/java/host/exp/exponent/Constants.java`);
     await sedInPlaceAsync('-e', `/BEGIN\ VERSIONS/,/END\ VERSIONS/d`, `${shellPath}app/build.gradle`);
     shell.sed('-i', '// ADD VERSIONS HERE', `versionCode ${versionCode}
       versionName '${version}'`, `${shellPath}app/build.gradle`);
  
hunk.file_path: tools-public/android-shell-app.js
hunk.type: add
file: /**
   * Copyright (c) 2015-present, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   */
  
  #import <Foundation/Foundation.h>
  
  #import "ABI5_0_0RCTURLRequestDelegate.h"
  #import "ABI5_0_0RCTURLRequestHandler.h"
  
  typedef void (^ABI5_0_0RCTURLRequestCompletionBlock)(NSURLResponse *response, NSData *data, NSError *error);
  typedef void (^ABI5_0_0RCTURLRequestCancellationBlock)(void);
  typedef void (^ABI5_0_0RCTURLRequestIncrementalDataBlock)(NSData *data);
  typedef void (^ABI5_0_0RCTURLRequestProgressBlock)(int64_t progress, int64_t total);
  typedef void (^ABI5_0_0RCTURLRequestResponseBlock)(NSURLResponse *response);
  
  typedef NS_ENUM(NSInteger, ABI5_0_0RCTNetworkTaskStatus) {
    ABI5_0_0RCTNetworkTaskPending = 0,
    ABI5_0_0RCTNetworkTaskInProgress,
    ABI5_0_0RCTNetworkTaskFinished,
  };
  
  @interface ABI5_0_0RCTNetworkTask : NSObject <ABI5_0_0RCTURLRequestDelegate>
  
  @property (nonatomic, readonly) NSURLRequest *request;
  @property (nonatomic, readonly) NSNumber *requestID;
  @property (nonatomic, readonly, weak) id requestToken;
  @property (nonatomic, readonly) NSURLResponse *response;
  @property (nonatomic, readonly) ABI5_0_0RCTURLRequestCompletionBlock completionBlock;
  
  @property (nonatomic, copy) ABI5_0_0RCTURLRequestProgressBlock downloadProgressBlock;
  @property (nonatomic, copy) ABI5_0_0RCTURLRequestIncrementalDataBlock incrementalDataBlock;
  @property (nonatomic, copy) ABI5_0_0RCTURLRequestResponseBlock responseBlock;
  @property (nonatomic, copy) ABI5_0_0RCTURLRequestProgressBlock uploadProgressBlock;
  
  @property (nonatomic, readonly) ABI5_0_0RCTNetworkTaskStatus status;
  
  - (instancetype)initWithRequest:(NSURLRequest *)request
                          handler:(id<ABI5_0_0RCTURLRequestHandler>)handler
                  completionBlock:(ABI5_0_0RCTURLRequestCompletionBlock)completionBlock NS_DESIGNATED_INITIALIZER;
  
  - (void)start;
  - (void)cancel;
  
  @end
  