gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:48 25 4
gpt4 key购买 nike

为了限制调试代码进入我的发布 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com