小编Joh*_*lly的帖子

更新到AS 3.0 Canary 6后,transformClassesWithDesugar构建错误

我更新到Android Studio 3.0 Canary 6,现在我遇到了以下错误(已经在Canary 5上).我搜索过人们看到类似的问题但到目前为止没有运气.其他人看到这样的东西?(注意fwiw该项目包括一些Kotlin代码)

Exception in thread "main" java.lang.IllegalArgumentException
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
    at com.google.devtools.build.android.desugar.DefaultMethodClassFixer$DefaultMethodFinder.visit(DefaultMethodClassFixer.java:295)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at com.google.devtools.build.android.desugar.DefaultMethodClassFixer.defaultMethodsDefined(DefaultMethodClassFixer.java:173)
    at com.google.devtools.build.android.desugar.DefaultMethodClassFixer.visitEnd(DefaultMethodClassFixer.java:75)
    at org.objectweb.asm.ClassVisitor.visitEnd(Unknown Source)
    at com.google.devtools.build.android.desugar.InterfaceDesugaring.visitEnd(InterfaceDesugaring.java:77)
    at org.objectweb.asm.ClassVisitor.visitEnd(Unknown Source)
    at com.google.devtools.build.android.desugar.LambdaDesugaring.visitEnd(LambdaDesugaring.java:137)
    at org.objectweb.asm.ClassVisitor.visitEnd(Unknown Source)
    at org.objectweb.asm.ClassVisitor.visitEnd(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at com.google.devtools.build.android.desugar.Desugar.desugarClassesInInput(Desugar.java:368)
    at com.google.devtools.build.android.desugar.Desugar.desugarOneInput(Desugar.java:297)
    at com.google.devtools.build.android.desugar.Desugar.desugar(Desugar.java:251)
    at com.google.devtools.build.android.desugar.Desugar.main(Desugar.java:543)


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDesugarForCustomDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio

26
推荐指数
5
解决办法
2万
查看次数

Jetpack Compose:从协程中使用 lambda 调用函数时出现后端内部错误

有点奇怪,但在使用 Jetpack Compose 时收到“后端内部错误”错误,结果发现它是通过调用从协程中获取 lambda 的函数触发的。

重现起来非常容易......已将其范围缩小到以下步骤:

使用“空撰写活动”模板创建新项目。更新到 dev07(以前的版本也有问题)并添加以下内容build.gradle

composeOptions {
    kotlinCompilerExtensionVersion = "0.1.0-dev07"
}
Run Code Online (Sandbox Code Playgroud)

添加以下内容到MyActivity.kt

fun someFun(success: (String) -> Unit) {
}
Run Code Online (Sandbox Code Playgroud)

然后更新onCreate为以下内容:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    lifecycleScope.launch {
        someFun {
        }
    }
    setContent {
        MaterialTheme {
            Greeting("Android")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

构建项目,然后您会看到以下错误:

e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation
Element is unknownThe root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:42)
    at org.jetbrains.kotlin.codegen.CompilationErrorHandler.lambda$static$0(CompilationErrorHandler.java:35)
    at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:114)
Run Code Online (Sandbox Code Playgroud)

请注意,您还需要添加以下依赖项build.gradle

implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

16
推荐指数
2
解决办法
8867
查看次数

ClassNotFoundException: kotlin.KotlinNothingValueException using Android Studio 4.2 Canary 8 with build.gradle.kts

After updating to Android Studio 4.2 Canary 8 and now getting following error when I do gradle sync. It seems like it's related to using root level build.gradle.kts .....if I switch back to using build.gradle then issue is "fixed"

java.lang.NoClassDefFoundError: kotlin/KotlinNothingValueException
    at com.android.build.gradle.options.BooleanOption.parse(BooleanOption.kt:427)
    at com.android.build.gradle.options.BooleanOption.parse(BooleanOption.kt:28)
    at com.android.build.gradle.options.ProjectOptions$OptionValue.lambda$setValueForUseAtConfiguration$0(ProjectOptions.java:365)
    at org.gradle.api.internal.provider.DefaultProvider.calculateOwnValue(DefaultProvider.java:66)
    at org.gradle.api.internal.provider.AbstractMinimalProvider.getOrNull(AbstractMinimalProvider.java:93)
    at com.android.build.gradle.options.ProjectOptions$OptionValue.getValueForUseAtConfiguration(ProjectOptions.java:345)
    at com.android.build.gradle.options.ProjectOptions$OptionValue.access$000(ProjectOptions.java:331)
    at com.android.build.gradle.options.ProjectOptions.get(ProjectOptions.java:186)
    at com.android.build.gradle.options.SyncOptions.getModelQueryMode(SyncOptions.java:41)
    at com.android.build.gradle.internal.plugins.BasePlugin.createProjectServices(BasePlugin.java:868)
    at com.android.build.gradle.internal.plugins.BasePlugin.basePluginApply(BasePlugin.java:262)
    at com.android.build.gradle.internal.plugins.BasePlugin.lambda$apply$0(BasePlugin.java:246)
    at com.android.build.gradle.internal.crash.CrashReporting.runAction(crash_reporting.kt:27)
    at com.android.build.gradle.internal.plugins.BasePlugin.apply(BasePlugin.java:244)
    at com.android.build.gradle.internal.plugins.BasePlugin.apply(BasePlugin.java:136)
    at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
    at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
    at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
    at org.gradle.api.internal.plugins.DefaultPluginManager.access$100(DefaultPluginManager.java:51)
    at …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin android-studio

14
推荐指数
1
解决办法
2991
查看次数

将ProGuard映射文件上载到Firebase

我正在尝试最近发布的功能,该功能允许使用gradle任务将ProGuard映射文件上传到Firebase(https://firebase.google.com/docs/crash/android).以下是我正在运行的任务.

./gradlew -PFirebaseServiceAccountFilePath=xxxxx.json :app:firebaseUploadReleaseProguardMapping
Run Code Online (Sandbox Code Playgroud)

但是,它似乎没有识别服务帐户文件.有没有人有幸得到这个工作?我也尝试过FirebaseServiceAccountFilePath在gradle.properties中定义.

* What went wrong:
Execution failed for task ':app:firebaseUploadReleaseProguardMapping'.
> Service account file path has not been defined! Service accounts are used to authorize your mapping file uploads.  Learn more at
  https://firebase.google.com/docs/crash/android.
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-crash-reporting

12
推荐指数
2
解决办法
3102
查看次数

迁移到AndroidX后,"转换失败"错误

我正在使用Android Studio 3.2 Canary 14,我正在尝试迁移现有项目以供使用AndroidX.它来自https://developer.android.com/topic/libraries/support-library/androidx-rn,我必须设置android.enableJetifier=true(这是在我选择"Refactor to AndroidX .."选项时自动完成的).我还将目标API级别更新为28.还有其他人看到此问题吗?

无法使用Jetifier转换'/Users/jooreill/.gradle/caches/modules-2/files-2.1/com.google.firebase/firebase-perf/15.0.0/6e68f6e44b0c9d91756f903547ee3853349ae666/firebase-perf-15.0.0.aar' .原因:null.(有关更多详细信息,请使用--stacktrace运行.)要禁用Jetifier,请在gradle.properties文件中设置android.enableJetifier = false.

运行"清理"时发生上述错误.一般情况下,如果执行gradle同步,我会收到多个错误:

无法解析':app-instant @ debug/compileClasspath'的依赖关系:无法使用transform JetifyTransform转换文件'play-services-measurement-base-15.0.2.aar'以匹配属性{artifactType = jetified-aar}

android android-studio android-gradle-plugin

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

使用基本模块中的导航组件进行Gradle同步错误

使用导航组件alpha09并添加apply plugin: "androidx.navigation.safeargs"到基本模块的顶部build.gradle但在执行gradle sync时遇到跟随错误.我正在使用Android Studio 3.4 Canary 9(但使用3.3 RC3也有同样的问题)

看起来相似的修复程序包含在alpha09中 - https://issuetracker.google.com/issues/119662045

Caused by: kotlin.TypeCastException: null cannot be cast to non-null type org.gradle.api.resources.TextResource
    at androidx.navigation.safeargs.gradle.SafeArgsPlugin.setApplicationId(SafeArgsPlugin.kt:87)
    at androidx.navigation.safeargs.gradle.SafeArgsPlugin.access$setApplicationId(SafeArgsPlugin.kt:39)
    at androidx.navigation.safeargs.gradle.SafeArgsPlugin$apply$1$task$1.execute(SafeArgsPlugin.kt:63)
    at androidx.navigation.safeargs.gradle.SafeArgsPlugin$apply$1$task$1.execute(SafeArgsPlugin.kt:39)
    at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:360)
    at androidx.navigation.safeargs.gradle.SafeArgsPlugin$apply$1.invoke(SafeArgsPlugin.kt:59)
    at androidx.navigation.safeargs.gradle.SafeArgsPlugin$apply$1.invoke(SafeArgsPlugin.kt:39)
    at androidx.navigation.safeargs.gradle.SafeArgsPluginKt$sam$org_gradle_api_Action$0.execute(SafeArgsPlugin.kt)
    at org.gradle.internal.ImmutableActionSet$SingletonSet.execute(ImmutableActionSet.java:225)
    at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:247)
    at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:236)
    at com.android.build.gradle.LibraryExtension.addVariant(LibraryExtension.java:93)
    at com.android.build.gradle.FeatureExtension.addVariant(FeatureExtension.java:121)
    at com.android.build.gradle.internal.ApiObjectFactory.create(ApiObjectFactory.java:134)
Run Code Online (Sandbox Code Playgroud)

android kotlin android-architecture-navigation

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

模拟返回Kotlin Coroutines Deferred类型的方法的返回值

我正在使用Kotlin Coroutines,特别是使用Retrofit CoroutineCallAdapterFactory.我正在尝试对一个类进行单元测试,然后使用Retrofit接口(GalwayBusService下面).

interface GalwayBusService {

    @GET("/routes/{route_id}.json")
    fun getStops(@Path("route_id") routeId: String) : Deferred<GetStopsResponse>

}
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我有

val galwayBusService = mock()

然后尝试类似下面的内容来模拟调用该方法时返回的内容.但问题是getStops返回一个Deferred值.是否有任何特定的方法建议用于模拟这样的API?

`when`(galwayBusService.getBusStops()).thenReturn(busStopsResponse)
Run Code Online (Sandbox Code Playgroud)

android mockito kotlin retrofit kotlinx.coroutines

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

在单元测试中调用Dispatchers.setMain()时出错

已开始尝试在JUnit单元测试中使用kotlinx-coroutines-test(https://github.com/Kotlin/kotlinx.coroutines/blob/master/core/kotlinx-coroutines-test/README.md)但在我调用时遇到以下错误Dispatchers.setMain()

java.lang.IllegalArgumentException: TestMainDispatcher is not set as main dispatcher, have Main[missing, cause=java.lang.AbstractMethodError: kotlinx.coroutines.test.internal.TestMainDispatcherFactory.createDispatcher()Lkotlinx/coroutines/MainCoroutineDispatcher;] instead.

    at kotlinx.coroutines.test.TestDispatchers.setMain(TestDispatchers.kt:22)
Run Code Online (Sandbox Code Playgroud)

我试过打电话Dispatchers.setMain(Dispatchers.Unconfined)也传入了val mainThreadSurrogate = newSingleThreadContext("UI thread").看起来似乎问题不是传递价值,而是mainDispatcher在接下来的测试中绊倒

public fun Dispatchers.setMain(dispatcher: CoroutineDispatcher) {
    require(dispatcher !is TestMainDispatcher) { "Dispatchers.setMain(Dispatchers.Main) is prohibited, probably Dispatchers.resetMain() should be used instead" }
    val mainDispatcher = Dispatchers.Main
    require(mainDispatcher is TestMainDispatcher) { "TestMainDispatcher is not set as main dispatcher, have $mainDispatcher instead." }
    mainDispatcher.setDispatcher(dispatcher)
}
Run Code Online (Sandbox Code Playgroud)

android coroutine kotlin kotlinx.coroutines

7
推荐指数
2
解决办法
1897
查看次数

使用Android Studio 3.2 Canary 17时出现kotlin-android错误

刚刚更新到Android Studio 3.2 Canary 17,现在收到以下错误:

配置项目':some_module`时出现问题.'kotlin-android'希望将一个Android Gradle插件应用于该项目:

    * android
    * com.android.application
    * android-library
    * com.android.library
    * com.android.test
    * com.android.feature
    * com.android.dynamic-feature
Run Code Online (Sandbox Code Playgroud)

build.gradle模块包括:

apply plugin: 'com.android.feature'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
Run Code Online (Sandbox Code Playgroud)

该项目包括混合物组成几个模块com.android.application,com.android.featurecom.android.instantapp

android android-studio android-studio-3.2

6
推荐指数
1
解决办法
479
查看次数

有条件地在 Android 清单文件中包含元数据

有没有办法meta-data根据 Gradle 中设置的值有条件地在 Android 清单文件中包含元素。我能够执行以下操作(resValue用于设置<some_value>in build.gradle),但无法找到包含/排除完整meta-data元素的方法。

    <meta-data
        android:name="<some_setting>"
        android:value="@string/<some_value>" />
Run Code Online (Sandbox Code Playgroud)

android gradle

5
推荐指数
1
解决办法
593
查看次数