小编Ben*_*cri的帖子

Robolectric和Android SDK 29

Robolectric什么时候可以与Android SDK 29兼容?难道我通过改变升级太早targetSdkVersion,并compileSdkVersion以29?

当我运行单元测试时,我得到了这个巨大的堆栈跟踪:

java.lang.IllegalArgumentException: API level 29 is not available

    at org.robolectric.plugins.UnknownSdk.getJarPath(UnknownSdk.java:25)
    at
org.robolectric.internal.AndroidSandbox$SdkSandboxClassLoader.<init>(AndroidSandbox.java:102)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)     at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.robolectric.util.inject.Injector.inject(Injector.java:239)   at
org.robolectric.util.inject.Injector.lambda$memoized$1(Injector.java:221)
    at
org.robolectric.util.inject.Injector$MemoizingProvider.get(Injector.java:485)
    at
org.robolectric.util.inject.Injector.getInstanceInternal(Injector.java:213)
    at
org.robolectric.util.inject.Injector.resolveDependencies(Injector.java:283)
    at org.robolectric.util.inject.Injector.inject(Injector.java:237)   at
org.robolectric.util.inject.Injector.lambda$memoized$1(Injector.java:221)
    at
org.robolectric.util.inject.Injector$MemoizingProvider.get(Injector.java:485)
    at
org.robolectric.util.inject.Injector.getInstanceInternal(Injector.java:213)
    at
org.robolectric.util.inject.Injector.getInstance(Injector.java:197)
    at org.robolectric.util.inject.Injector.access$700(Injector.java:85)
    at
org.robolectric.util.inject.Injector$ScopeBuilderProvider.create(Injector.java:551)
    at
org.robolectric.util.inject.Injector$ScopeBuilderProvider.lambda$get$0(Injector.java:534)
    at com.sun.proxy.$Proxy13.build(Unknown Source)     at
org.robolectric.internal.SandboxManager.getAndroidSandbox(SandboxManager.java:57)
    at
org.robolectric.RobolectricTestRunner.getSandbox(RobolectricTestRunner.java:267)
    at
org.robolectric.RobolectricTestRunner.getSandbox(RobolectricTestRunner.java:63)
    at
org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:215)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)     at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)   at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)     at …
Run Code Online (Sandbox Code Playgroud)

android robolectric android-10.0

11
推荐指数
3
解决办法
1918
查看次数

进行 BigDecimal 比较的正确方法是什么

从最近开始,(我认为是因为我将代码转换为 kotlin,但不确定),Android Studio 在我编写时向我显示警告

if (myValue.compareTo(BigDecimal.ZERO) > 0)
Run Code Online (Sandbox Code Playgroud)

该消息显示“调用可替换为二元运算符”并将我的代码替换为

if (myValue > BigDecimal.ZERO)
Run Code Online (Sandbox Code Playgroud)

我注意到我也使用

if (myValue.compareTo(BigDecimal.ZERO) == 0
Run Code Online (Sandbox Code Playgroud)

但这一次我没有收到任何警告,如果我尝试更换它,它不起作用

if (myValue == BigDecimal.ZERO) // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)

为什么> ZERO有效但无效== ZERO?为什么我在 stackoverflow 上看到的每个线程(例如this)都推荐使用compareTobut > ZEROwork 并且是 Android Studio 推荐的?

android bigdecimal kotlin android-lint android-studio

9
推荐指数
1
解决办法
2940
查看次数

我们可以在全局添加 @Suppress 标志吗?

when在 kotlin 中,如果我们在枚举上使用块,同时耗尽所有枚举值但不添加else,我们会收到此警告:“在 Java 中,枚举参数可以为 null,但在不包含 null 分支时为穷举”。

然后,Android Studio 建议将抑制标志添加@Suppress("WHEN_ENUM_CAN_BE_NULL_IN_JAVA")到语句、函数、类或文件范围。

有什么办法可以将其添加到项目范围中吗?由于我的项目是 100% Kotlin,我不需要此警告,并且希望全局禁用它。

android suppress-warnings kotlin

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

将多模块库发布到maven

我有一个小型库,我使用maven-publishGradle 插件将其发布到 Gitlab Package Registery。

我决定将其分成 2 个模块,一个名为core(发布为com.mycompany.core:core),另一个名为view(发布为com.mycompany.core:view)。由于该view模块依赖于该core模块,所以我将implementation project(":core")其添加到build.gradle

现在,如果我将com.mycompany.core:view:1.0依赖项添加到另一个项目,我会收到错误

无法解析:核心:核心:未指定

现在,如果我替换implementation project(":core")implementation "com.mycompany.core:core:1.0",我什至无法构建我的view模块,因为当然这个版本的core模块尚未发布。

我该如何解决这个依赖问题?

编辑:settings.gradle 内容

include ':core', ':view'
rootProject.name = "Core"
Run Code Online (Sandbox Code Playgroud)

android gradle maven build.gradle

6
推荐指数
0
解决办法
386
查看次数

关于在activity/fragment构造函数中定义资源布局id的问题

我一直在到处阅读您现在可以使用活动/片段构造函数来定义 AndroidX 的布局 ID,但没有人回答我的问题。

如果您在 Activity 的 onCreate 或 Fragment 的 onCreateView 中还有其他事情要做怎么办?你还能使用这个新的构造函数吗?

android android-fragments android-activity androidx

2
推荐指数
1
解决办法
371
查看次数