小编odi*_*ity的帖子

尝试在 Android Studio 中升级到 Kotlin 1.4.10 时出现异常

我正在尝试在我们的 Android 项目中升级到 Kotlin 4.1,但它在 kaptDebugKotlin 步骤中引发了一个模糊的错误。在 kotlin 版本上一切正常1.3.72

我正在使用:

classpath "com.android.tools.build:gradle:4.0.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10"
Run Code Online (Sandbox Code Playgroud)

这是来自的堆栈跟踪 ./gradlew assebleDebug --stacktrace

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptDebugKotlin'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:205)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:203)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:184)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin

14
推荐指数
2
解决办法
3015
查看次数

以编程方式更改约束时,Android MotionLayout 状态不会更新

我有一个非常简单的 MotionLayout,我正在尝试以编程方式更改其中一个约束的可见性,并让视图反映该更改。但是,直到我从当前状态过渡然后再回到它时,更改才会反映出来。你如何让视图根据新的约束立即更新?我试过updateState()rebuildScene()invalidate()但他们都不做任何事情。

这是视图:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
        android:id="@+id/motion_layout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/activity_main"
        app:layoutDescription="@xml/motion_scene"
        tools:context=".MainActivity">

    <TextView
            android:id="@+id/left_to_right_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Left to right"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    <TextView
            android:id="@+id/top_to_bottom_text"
            android:text="Top to bottom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.motion.widget.MotionLayout>
Run Code Online (Sandbox Code Playgroud)

这是运动场景:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto">


    <Transition
            app:constraintSetStart="@id/base"
            app:constraintSetEnd="@id/bottom">
        <OnClick
                app:targetId="@id/top_to_bottom_text">

        </OnClick>

    </Transition>

    <Transition
            app:constraintSetStart="@id/base"
            app:constraintSetEnd="@id/right">
        <OnSwipe
                app:dragDirection="dragRight"
                app:touchAnchorId="@id/left_to_right_text"
                app:touchAnchorSide="right">

        </OnSwipe>

    </Transition>


    <ConstraintSet android:id="@+id/base">

        <Constraint
                android:id="@id/left_to_right_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>

        <Constraint
                android:id="@id/top_to_bottom_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android android-motionlayout

8
推荐指数
1
解决办法
5038
查看次数

将 Ktor 添加到 Kotlin Multiplatform Mobile 导致未解析的参考:HttpClient

我无法让 Ktor 在 KMM 项目中工作,我只是Unresolved reference: HttpClient在尝试引用任何 Ktor 类时收到错误。如果我尝试手动添加 ktor 导入,它会显示Unresolved reference io. 其他依赖项(如Kermit解析良好)似乎只是 Ktor 存在问题。这是我重现的简单步骤:

在此输入图像描述

  1. 在 Android Studio 中(我尝试过 4.1.3 和 4.2 Beta 6),我转到文件 -> 新建 -> KMM 应用程序。

  2. 在共享模块 build.gradle.kts 中,我添加了 ktor 客户端的依赖项:

val commonMain by getting {
        dependencies {
            implementation("io.ktor:ktor-client-core:1.5.2")
        }
     }
Run Code Online (Sandbox Code Playgroud)
  1. 在commonMain 的类中,我尝试创建一个 HttpClient,就像 Ktor 文档https://kotlinlang.org/docs/mobile/use-ktor-for-networking.html#select-an-engineGreeting中所述:
class Greeting {
    val httpClient: HttpClient = HttpClient()

    fun greeting(): String {
        return "Hello, ${Platform().platform}!"
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了Unresolved reference: HttpClient …

android gradle android-studio ktor kmm

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

无法使用 minifyEnabled 运行 Android 仪表化 (UI) 测试

minifyEnabled目前,我的 UI 测试在调试版本设置为 false 时运行良好。然而,我希望能够使用 minifyEnabled 运行我们的 UI 测试,但我收到错误:

java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/LazyKt;
at com.myapp.android.helpers.BaseUITest.<init>(BaseUITest.kt:89)
at com.myapp.android.helpers.BaseLoggedInUITest.<init>(BaseUITest.kt:58)
at com.myapp.android.BookingTest.<init>(BookingTest.kt:25)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
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 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
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 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:392)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)
Caused by: java.lang.ClassNotFoundException: Didn't …
Run Code Online (Sandbox Code Playgroud)

android proguard android-instrumentation

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

Android错误在夜间模式下加载错误的颜色

免责声明:我已经找到了解决此问题的方法,但由于我花了很长时间才弄清楚它为什么会发生,所以我想将问题和答案发布给其他人。

我遇到一个奇怪的问题:在夜间模式下打开应用程序时,某些UI会以正确的夜间模式颜色加载,而某些UI会以正常颜色加载。

android webview android-night-mode

4
推荐指数
1
解决办法
323
查看次数

Flutter CachedNetworkImage 不适用于从 Playstore 下载的应用程序,卡在占位符上

我在我的应用程序中使用 CachedNetworkImage,当我在 Android 上的调试或发布中运行它时它工作正常,但是当我将 aab 上传到 Play 商店并从 Play 商店下载应用程序时,图像只是卡在占位符上.

这是我在应用程序中使用它的方式。请注意,我为占位符和错误使用了 Text 小部件,以便我可以直观地调试发布版本上的任何问题:

child: Stack(
          children: <Widget>[
            url != null
                ? CachedNetworkImage(
              imageUrl: url,
              errorWidget: (context, url, error) => Text("$error"),
              placeholder: (context, url) => Text("Loading $url"),
              imageBuilder: (context, imageProvider) => Container(
                width: double.infinity,
                height: 150,
                decoration: BoxDecoration(
                  image: DecorationImage(image: imageProvider, fit: BoxFit.fitWidth),
                ),
              ),
            )
                : Container(),
Run Code Online (Sandbox Code Playgroud)

它只是停留在占位符上,看起来像这样 它只是停留在占位符上,看起来像这样

我在 pubspec 中使用了最新版本的 cached_network_image:

cached_network_image: ^2.4.1
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我尝试帮助缩小问题范围的方法:

  1. 使用Image.network(url)CachedNetworkImage 代替。当我这样做时,图像加载得很好,所以我知道这不是互联网或 url 的问题。
  2. 使用flutter run --release. 这工作正常,图像加载正确。
  3. 尝试多种设备。我尝试在 Android 8 …

android image-loading flutter

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