java - 用于在 Android 中调试构建的替代应用程序子类

标签 java android android-gradle-plugin dagger

为了限制调试代码进入我的发布 APK,我尝试使用 DebugMyApplication调试版本的子类,但正常的 MyApplication发布中的类。

是否可以使用替代品 Application Debug 与 Release 构建中的子类?我试过:

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

关于我更广泛的目标的一些背景:

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

感谢您的帮助!

最佳答案

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

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

src/debug/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/debug/java/mypackage/MockModule.java

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

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

src/release/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/main/java/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);
  }
}

让我知道它是否适合您。

这项技术由 Jake Wharton 在他的 Android Apps with Dagger 中提出。介绍

关于java - 用于在 Android 中调试构建的替代应用程序子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22104862/

相关文章:

java - 代码没有显示错误,但不会发送结果

android-studio - 提供来自项目的依赖项(Gradle)

java - Dagger 1.2.2、Gradle 2.4、Eclipse 4.5.0 Mars 的注释处理失败

java - 使用 Gson 从 java.util.List 恢复 JSON 数组

Java/Kotlin/Android - 格式化时间 (hh :mm:ss) and remove unnecessary zeros from the beginning

java - 无法解析 Intent 中的构造函数

android-studio - gradle将下载的jar放在哪里?

android - 无法从 Gradle 中的 jitpack 添加库

java - 如何循环遍历jtable的所有行

android - 设备调试上的 Galaxy Tab?