我正在尝试在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 不再识别测试,我无法运行它们。
我在设置驻留在 KMM 项目中的共享代码中并使用 Jetpack Compose 的活动时遇到问题。当 Activity 位于 Android 源(/app)中时,效果很好。但我想发布一个没有任何应用程序的共享(/common)库。
作为一个例子,我分叉了一个很棒的最小 KMM+Compose 项目:https://github.com/cyberhenoch/PeopleInSpace:
它编译得很好,但在运行时我得到:
进程: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但是
我应该做什么才能让它发挥作用?任何帮助,将不胜感激。
android kotlin android-jetpack-compose kotlin-multiplatform-mobile
SQLDelight 仍然在 Maven 存储库上标记为实验库,尽管第一个版本似乎于 2018 年 10 月发布。
我在 KMM 中制作了一个示例应用程序,我可以在其中插入/删除行,到目前为止,它似乎对我们的用例运行良好。但是,有人可以帮助我了解它的哪些方面在产品中使用不安全。是否存在任何性能问题?或者产品中是否存在随机崩溃的可能性?或者,我们是否知道是否有应用程序成功地将 Prod 中的 SqlDelight 用于其 KMM 应用程序?
谢谢!
我正在关注此处的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
我在 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