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) 从最近开始,(我认为是因为我将代码转换为 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 推荐的?
when在 kotlin 中,如果我们在枚举上使用块,同时耗尽所有枚举值但不添加else,我们会收到此警告:“在 Java 中,枚举参数可以为 null,但在不包含 null 分支时为穷举”。
然后,Android Studio 建议将抑制标志添加@Suppress("WHEN_ENUM_CAN_BE_NULL_IN_JAVA")到语句、函数、类或文件范围。
有什么办法可以将其添加到项目范围中吗?由于我的项目是 100% Kotlin,我不需要此警告,并且希望全局禁用它。
我有一个小型库,我使用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) 我一直在到处阅读您现在可以使用活动/片段构造函数来定义 AndroidX 的布局 ID,但没有人回答我的问题。
如果您在 Activity 的 onCreate 或 Fragment 的 onCreateView 中还有其他事情要做怎么办?你还能使用这个新的构造函数吗?
android ×5
kotlin ×2
android-10.0 ×1
android-lint ×1
androidx ×1
bigdecimal ×1
build.gradle ×1
gradle ×1
maven ×1
robolectric ×1