我在这里遇到了一个奇怪的问题,我不太清楚为什么我正在做的事情是不允许的.我有以下模块:
@Module
public final class AppModule {
private Context mContext;
@Provides
@Singleton
@AppContext
public Context provideContext() { return mContext; }
}
@Module
public final class NetModule {
@Provides
@Singleton
public OkHttpClient provideOkHttp() {
return new OkHttpClient.Builder().build();
}
}
Run Code Online (Sandbox Code Playgroud)
由于各种原因,我不希望将这两个模块放在同一个组件中(主要是由于我的项目结构).所以我尝试创建以下组件:
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@AppContext Context appContext();
}
@Singleton
@Component(dependencies = AppComponent.class, modules = NetModule.class)
public interface NetComponent {
Retrofit retrofit();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,我收到以下错误消息:
Error:(12, 1) error: This @Singleton component cannot depend on scoped components:
@Singleton com.myapp.service.dagger.AppComponent
我理解为什么视 …
在Android Studio中,创建一个运行特定模块的单元测试的配置非常容易.但有没有办法创建一个运行所有模块的单元测试的配置?
我的特定项目有多个模块(例如"主"模块和"库"模块).我目前有两种配置:主机测试和库单元测试.这样可行,但让单元测试运行我的所有测试都很好.
从命令行,这是微不足道的 - 只需运行./gradlew testDebug,一切都很开心.但我似乎无法从Android Studio中弄明白.我在这里错过了什么?
编辑: cricket-007指出Android Studio中的gradle命令栏可以让你运行testDebug命令.这可行,但不像真正的配置那样功能齐全.实际上,问题是如何创建一个配置单元测试,它运行所有模块的所有单元测试.
我们目前在我们的应用中使用Firebase崩溃报告 - 我们注意到一些奇怪的事情.为了帮助我们调试任何崩溃,我们使用FirebaseCrash.log添加有关服务器请求/响应的信息.
但最近,我们注意到日志正在被编辑.从我们可以看出,这发生在服务器端,给我们留下如下所示的日志:
7:51:11.914 AM gmp_nav20_crash < - 201
https://[REDACTED_DOMAIN_NAME][REDACTED_URL_BASIC](287ms,身长未知)7:51:11.626 AM gmp_nav20_crash - > POST
https://[REDACTED_DOMAIN_NAME][REDACTED_URL_BASIC]http/1.1(67字节正文)
有没有办法我们至少可以禁用某些域?它可以准确地追踪出现问题的难度,并且没有为我能看到的用户提供任何有意义的保护.
我正在尝试在单元测试和仪器测试之间共享一些代码.我在build.gradle中实现了类似下面的内容:
sourceSets {
String sharedTestDir = 'src/sharedTest/java'
test {
java.srcDir sharedTestDir
}
androidTest {
java.srcDir sharedTestDir
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于普通代码.但是,从注释生成的代码似乎只会在Android Studio中产生问题.(代码运行正常,但它在Android Studio中产生红色波形)基本上,Android Studio似乎无法找到生成在src/sharedTest中的代码的生成类 - 即使实际构建很好.
如果它有用,生成的类来自Dagger(因为我在两种类型的测试之间共享一个组件/模块).我有一个自定义的Application对象,它位于sharedTest中,这是我注意到Android Studio错误的地方:
createApplicationComponent() {
return DaggerMockApplicationComponent.create();
}
Run Code Online (Sandbox Code Playgroud)
我还在test和androidTest中添加了apt命令:
dependencies {
testApt 'com.google.dagger:dagger-compiler:2.7'
androidTestApt 'com.google.dagger:dagger-compiler:2.7'
}
Run Code Online (Sandbox Code Playgroud)
我在这里对源集的理解中显然遗漏了一些东西.有没有更简洁的方法来共享测试和androidTest之间的代码?有没有办法让Android Studio看到这个生成的代码?或者,最糟糕的情况是,我可以让Android Studio至少更容易忽略此错误吗?
我对LeakCanary的行为感到有些困惑,我希望SO能帮助我.我已将LeakCanary添加到我的应用程序中,而且我看到一个弹出窗口声称有泄漏.
这肯定看起来像这里提到的InputMethodManager:https://github.com/square/leakcanary/issues/322
看起来LeakCanary将其标记为排除,但仍显示弹出窗口.有什么我不明白的吗?(如果有帮助,我可以包含我的排除代码,但......)
以下是泄漏活动的屏幕截图:
这是修剪过的logcat输出:
12-13 15:08:26.868 D/LeakCanary( 1642): In com.blueapron.blueapron.debug:0.0.0-123-g5c653b9-debug:135000.
12-13 15:08:26.868 D/LeakCanary( 1642): * EXCLUDED LEAK.
12-13 15:08:26.868 D/LeakCanary( 1642): * com.blueapron.mobile.ui.MainActivity has leaked:
12-13 15:08:26.868 D/LeakCanary( 1642): * GC ROOT android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper.mParentInputMethodManager , matching exclusion any subclass of android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
12-13 15:08:26.869 D/LeakCanary( 1642): * references android.view.inputmethod.InputMethodManager.mNextServedView , matching exclusion field android.view.inputmethod.InputMethodManager#mNextServedView
12-13 15:08:26.869 D/LeakCanary( 1642): * references android.support.v7.widget.RecyclerView.mContext
12-13 15:08:26.869 D/LeakCanary( 1642): * leaks com.blueapron.mobile.ui.MainActivity instance
12-13 15:08:26.869 D/LeakCanary( 1642): * Retaining: 6.0 KB.
12-13 …Run Code Online (Sandbox Code Playgroud) 我最近发现了一个问题,我的应用在Firebase中的设置.我们已配置启动前报告,这意味着测试实验室设备正在为我们的分析贡献大量匿名会话.
有没有办法检测设备是否正在运行这些测试?例如,对于测试实验室中的测试,isUserAMonkey或isRunningInTestHarness会返回true吗?如果是这样,这将允许我调整我的分析/等的配置.