为了限制调试代码进入我的发布APK,我试图使用DebugMyApplication
子类进行调试构建,但是发布中的普通MyApplication
类。
是否可以在Debug vs Release版本中使用备用Application
子类?我试过了:
<application>
元素的备用定义在src / debug的根目录中定义AndroidManifest.xml文件。 Gradle警告我,Main清单有X但库有Y,而DebugMyApplication
未使用。<application android:name="@string/xyz"/>
被解释为文字包名称而不是引用。关于我更广泛目标的一些背景知识:
提供备用Dagger模块,该模块提供一些静态模拟的Web服务响应,这些响应在发行版APK中找不到。对我的应用程序的getModuleList()
方法进行子类化并更改模块列表声明似乎是最好的选择。
感谢您的帮助!
答案 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。