// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package multidex004.fakelibrary;

import multidex004.fakeframeworks.Application;
import multidex004.fakeframeworks.Context;

/**
 * Minimal MultiDex capable application. To use the legacy multidex library there is 3 possibility:
 *
 * <ul>
 *   <li>Declare this class as the application in your AndroidManifest.xml.
 *   <li>Have your {@link Application} extends this class.
 *   <li>Have your {@link Application} override attachBaseContext starting with<br>
 *       <code>
 * protected void attachBaseContext(Context base) {<br>
 * super.attachBaseContext(base);<br>
 * MultiDex.install(this);
 * </code>
 *       <ul>
 */
public class MultiDexApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
  }
}
