用于Android中调试构建的备用应用程序子类

时间:2014-02-28 20:08:19

标签: java android android-gradle dagger

为了限制调试代码进入我的发布APK,我试图使用DebugMyApplication子类进行调试构建,但是发布中的普通MyApplication类。

是否可以在Debug vs Release版本中使用备用Application子类?我试过了:

  1. 使用<application>元素的备用定义在src / debug的根目录中定义AndroidManifest.xml文件。 Gradle警告我,Main清单有X但库有Y,而DebugMyApplication未使用。
  2. 将Application子类的完全限定名称声明为可在我的调试res文件中单独定义的资源,但<application android:name="@string/xyz"/>被解释为文字包名称而不是引用。

  3. 关于我更广泛目标的一些背景知识:

    提供备用Dagger模块,该模块提供一些静态模拟的Web服务响应,这些响应在发行版APK中找不到。对我的应用程序的getModuleList()方法进行子类化并更改模块列表声明似乎是最好的选择。

    感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我没有应用程序覆盖的答案,但我提出了一个解决方案,以实现更广泛的目标:

|-- src
|   +-- debug
|       +-- java
|           +-- mypackage
|               +-- Modules.java
|               +-- MockModule.java
|   +-- main
|       +-- java
|           +-- mypackage
|               +-- MainModule.java
|   +-- release
|       +-- java
|           +-- mypackage
|               +-- Modules.java

<强> SRC /调试/ JAVA / mypackage的/ Modules.java

public final class Modules {

  public static List<Object> getModules(App application) {
    ArrayList<Object> modules = new ArrayList<Object>();
    modules.add(new MainModule(application));
    modules.add(new MockModule());
    return modules;
  }
}

<强> SRC /调试/ JAVA / mypackage的/ MockModule.java

@Module(
    overrides = true,
    library = true,
    injects = { MainActivity.class })
public class MockModule {

  @Provides MyType buildMock() {
    return //...
  }
}

<强>的src /释放/ JAVA / mypackage的/ Modules.java

public final class Modules {

  public static List<Object> getModules(App application) {
    ArrayList<Object> modules = new ArrayList<Object>();
    modules.add(new MainModule(application));
    return modules;
  }
}

<强>的src /主/爪哇/ mypackage的/ App.java

public class App extends Application {

  private ObjectGraph graph;

  @Override public void onCreate() {
    super.onCreate();

    graph = ObjectGraph.create(Modules.getModules(this).toArray());
  }

  public void inject(Object object) {
    graph.inject(object);
  }
}

让我知道它是否适合你。

杰克沃顿在他的Android Apps with Dagger演讲

中介绍了这种技巧

答案 1 :(得分:1)

您可以通过创建MyDebugApplication类并将其添加到DEBUG源文件夹并设置

来为您的调试类型添加Application子类
<application
    android:name="com.example.MyDebugApplication"
    tools:replace="android:name">
</application>

作为DEBUG源文件夹中AndroidManifest.xml文件中的应用程序标记。

如果您的主源集中已有Application子类MyApplication,则可以使MyDebugApplication扩展MyApplication。