标签: kotlin-multiplatform-mobile

适用于 Kotlin 多平台移动设备的 Hamcrest 和 Mockk

我正在尝试在KMMshared项目的模块中编写测试。在共享模块的 build.gradle.kts 文件中,我有以下内容:

sourceSets {
    val commonMain by getting
    val commonTest by getting {
        dependencies {
            implementation(kotlin("test-common"))
            implementation(kotlin("test-annotations-common"))


            //TODO: Hamcrest
            //implementation("junit:junit:4.12")
            //implementation("org.hamcrest:hamcrest-library:1.3")

            //TODO: Mockk
            //implementation("io.mockk:mockk:1.10.4")
        }
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

implementation(kotlin("[library]"))
Run Code Online (Sandbox Code Playgroud)

得到相同的结果:IDE 不再识别测试,我无法运行它们。

kotlin kotlin-multiplatform kotlin-multiplatform-mobile

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

在 Kotlin 多平台项目中与 Compose 共享活动

我在设置驻留在 KMM 项目中的共享代码中并使用 Jetpack Compose 的活动时遇到问题。当 Activity 位于 Android 源(/app)中时,效果很好。但我想发布一个没有任何应用程序的共享(/common)库。

作为一个例子,我分叉了一个很棒的最小 KMM+Compose 项目:https://github.com/cyberhenoch/PeopleInSpace

  • 将撰写活动(SharedActivity)添加到共享代码中
  • 更新了共享代码androidMain中的依赖项

它编译得很好,但在运行时我得到:

进程:com.surrus.peopleinspace,PID:4067 java.lang.NoSuchMethodError:没有静态方法 setContent $default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function0;ILjava/lang/对象;)Landroidx/activity/compose/ComponentActivityKt类中的V;或其超类(“androidx.activity.compose.ComponentActivityKt”的声明出现在 /data/app/com.surrus.peopleinspace-8P35Dcwzn9_G-xN9YdwFrA==/base.apk 中)位于 com.surrus.android.SharedActivity.onCreate(共享活动.kt:12)

我尝试添加此处描述的选项https://developer.android.com/jetpack/compose/setup#configure_gradle但是

  • 并非所有内容都可以添加到公共模块中(kotlinOptions?)
  • 在原来的项目中,它们不是必需的,并且效果非常好
  • 以不同的组合添加其中几个后,它甚至无法编译(例外:java.lang.NoClassDefFoundError:org/jetbrains/kotlin/serialization/DescriptorSerializerPlugin at java.base/java.lang.ClassLoader.defineClass1(Native Method)

我应该做什么才能让它发挥作用?任何帮助,将不胜感激。

android kotlin android-jetpack-compose kotlin-multiplatform-mobile

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

在 KMM 中使用 SQLDelight 有哪些限制(产品)

SQLDelight 仍然在 Maven 存储库上标记为实验库,尽管第一个版本似乎于 2018 年 10 月发布。

我在 KMM 中制作了一个示例应用程序,我可以在其中插入/删除行,到目前为止,它似乎对我们的用例运行良好。但是,有人可以帮助我了解它的哪些方面在产品中使用不安全。是否存在任何性能问题?或者产品中是否存在随机崩溃的可能性?或者,我们是否知道是否有应用程序成功地将 Prod 中的 SqlDelight 用于其 KMM 应用程序?

谢谢!

sqldelight kotlin-multiplatform kotlin-multiplatform-mobile

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

来自 Kotlin Concurrancy HandsOn 的关于 Kotlin/Native 中冻结的查询

我正在关注此处的Kotlin/Native Concurrency 实践。我无法理解最后一个示例,为什么“上面修改后的 saveToDb 函数现在处理后台调用,并且仅捕获函数参数。这不会冻结父类

class CountingModelSafer{
    var count = 0

    fun increment(){
        count++
        saveToDb(count)
    }

    private fun saveToDb(arg:Int) = background {
        println("Doing db stuff with $arg, in main $isMainThread")
    }
}
Run Code Online (Sandbox Code Playgroud)

[请注意,在这些示例中,在背景内部,传递的 lambda 被冻结]

下面的代码片段会导致整个 CountingModel 被冻结,但上面的代码片段不会被冻结。有人可以帮我理解为什么会这样吗?

class CountingModel{
    var count = 0

    fun increment(){
        count++
        background {
            saveToDb(count)
        }
    }

    private fun saveToDb(arg:Int){
        //Do some db stuff
        println("Saving $arg to db")
    }
}
Run Code Online (Sandbox Code Playgroud)

kotlin-native kotlin-multiplatform kotlin-multiplatform-mobile

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

在 Kotlin Multiplatform Moblie 范围内找不到“Greeting”

我在 Android Studio 项目中添加了 KMM 模块。我的项目构建成功。我已经在您的依赖项中添加了共享模块

App level build.gradle.kts

它看起来像这样:-

implementation(project(":kotlinmultiplatformsharedmodule"))
Run Code Online (Sandbox Code Playgroud)

我正在添加我的项目目录

在此输入图像描述

我的项目在这个目录下

> /Users/vmodi/AndroidStudioProjects/KotlinCocoapods
Run Code Online (Sandbox Code Playgroud)

我创建了一个 xcode 项目并使用创建了一个 pod 文件

pod init
Run Code Online (Sandbox Code Playgroud)

Pod文件

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'IosCocoapods' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for IosCocoapods
   pod 'kotlinmultiplatformsharedmodule', :path => '/Users/vmodi/AndroidStudioProjects/KotlinCocoapods/kotlinmultiplatformsharedmodule'

end
Run Code Online (Sandbox Code Playgroud)

我在新终端中运行命令并转到 ios 项目目录

  cd /Users/vmodi/Xcode/IosCocoapods
Run Code Online (Sandbox Code Playgroud)

然后

pod install --verbose
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的 Ios 项目结构如下

在此输入图像描述

我打开项目并导入模块然后我写 …

android ios kotlin kotlin-multiplatform kotlin-multiplatform-mobile

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