java-Android中用于调试构建的备用应用程序子类
作者:互联网
为了限制调试代码进入版本APK,我尝试使用DebugMyApplication子类进行调试版本,但使用发行版中的常规MyApplication类.
是否可以在Debug vs Release版本中使用备用Application子类?我试过了:
>在src / debug的根目录中定义一个AndroidManifest.xml文件,并带有< application>元件. Gradle警告我,Main清单具有X,而库具有Y,并且未使用DebugMyApplication.
>将应用程序子类的完全限定名称声明为可以在我的调试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 /调试/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 / 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演讲中介绍了这项技术
标签:dagger,android-gradle,java,android 来源: https://codeday.me/bug/20191029/1962959.html