小编tmt*_*ark的帖子

Dagger 2 Singleton组件取决于Singleton

我在这里遇到了一个奇怪的问题,我不太清楚为什么我正在做的事情是不允许的.我有以下模块:

@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

我理解为什么视 …

java android dependency-injection dagger-2

13
推荐指数
1
解决办法
3970
查看次数

多个模块的单元测试配置

在Android Studio中,创建一个运行特定模块的单元测试的配置非常容易.但有没有办法创建一个运行所有模块的单元测试的配置?

我的特定项目有多个模块(例如"主"模块和"库"模块).我目前有两种配置:主机测试和库单元测试.这样可行,但让单元测试运行我的所有测试都很好.

从命令行,这是微不足道的 - 只需运行./gradlew testDebug,一切都很开心.但我似乎无法从Android Studio中弄明白.我在这里错过了什么?

编辑: cricket-007指出Android Studio中的gradle命令栏可以让你运行testDebug命令.这可行,但不像真正的配置那样功能齐全.实际上,问题是如何创建一个配置单元测试,它运行所有模块的所有单元测试.

android unit-testing android-studio

13
推荐指数
1
解决办法
1289
查看次数

带有URL的Firebase崩溃日志

我们目前在我们的应用中使用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字节正文)

有没有办法我们至少可以禁用某些域?它可以准确地追踪出现问题的难度,并且没有为我能看到的用户提供任何有意义的保护.

android firebase firebase-crash-reporting

13
推荐指数
1
解决办法
687
查看次数

Android共享在test和androidTest之间生成代码

我正在尝试在单元测试和仪器测试之间共享一些代码.我在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至少更容易忽略此错误吗?

android unit-testing android-studio

7
推荐指数
0
解决办法
294
查看次数

LeakCanary似乎检测到泄漏,即使该类被排除在外

我对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)

android leakcanary

7
推荐指数
1
解决办法
1566
查看次数

如何检测Firebase测试实验室中的运行情况

我最近发现了一个问题,我的应用在Firebase中的设置.我们已配置启动前报告,这意味着测试实验室设备正在为我们的分析贡献大量匿名会话.

有没有办法检测设备是否正在运行这些测试?例如,对于测试实验室中的测试,isUserAMonkeyisRunningInTestHarness会返回true吗?如果是这样,这将允许我调整我的分析/等的配置.

android firebase firebase-test-lab

7
推荐指数
1
解决办法
781
查看次数