小编ole*_*men的帖子

Kotlin本机互操作链接器找不到框架

我正在尝试在Kotlin Multiplatform项目中使用cocoapods框架。所以我

  • 在Pods文件中添加了框架。
  • 运行pod安装。
  • 创建的.def文件
  • 在添加cinterop配置build.gradle

./gradlew cinteropFirebaseIos运行成功。它生成,.klib因此我可以看到kotlin代码中的类。但是,当我尝试运行iOS应用时,构建失败并显示以下消息:

显示最近的消息

>任务:app:linkDebugFrameworkIos

ld:找不到框架FirebaseDatabase

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld调用报告了错误

这是我的配置 build.gradle

    fromPreset(presets.iosX64, 'ios') {
        compilations.main {
            outputKinds('FRAMEWORK')
            cinterops {
                firebase {
                    def proj = "${System.getProperty("user.home")}/Projects/kmpp"
                    def pods = "${proj}/iosApp/Pods"

                    defFile "${proj}/app/src/iosMain/c_interop/libfirebase.def"

                    includeDirs "${pods}/Firebase",
                            "${pods}/Firebase/CoreOnly/Sources",
                            "${pods}/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers"
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的.def文件:

language = Objective-C
headers = /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FIRApp.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h

compilerOpts = -framework FirebaseDatabase
linkerOpts = -framework FirebaseDatabase
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我如何找出问题所在?我错过了.def文件中的东西吗?在build.gradle

kotlin kotlin-interop kotlin-native kotlin-multiplatform

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

TextureView Android上的矩阵比例视频

我想一起玩的视频ExoPlayeTextureView.为了缩放和裁剪视频以适应视图,我使用矩阵.我的自定义视图扩展了`TextureView'这是我的代码:

@Override
public void onVideoSizeChanged(int width, int height, float pixelWidthHeightRatio) {
    updateTextureViewSize(width, height);
    Log.v("EXO", "onVideoSizeChanged() " +  width + "x" + height);
}

private void updateTextureViewSize(float videoWidth, float videoHeight) {
    float viewWidth = getWidth();
    float viewHeight = getHeight();

    float scaleX = 1.0f;
    float scaleY = 1.0f;

    float viewRatio = viewWidth / viewHeight;
    float videoRatio = videoWidth / videoHeight;
    if (viewRatio > videoRatio) {
        // video is higher than view
        scaleY = videoHeight / videoWidth;
    } else …
Run Code Online (Sandbox Code Playgroud)

video android scale exoplayer

3
推荐指数
2
解决办法
4831
查看次数

如何在Kotlin中使方法参数可变?

我正在实施一个SpinnerAdapterAndroid项目。所以我必须重写getView(i: Int, convertView: View, parent: ViewGroup)方法。convertView为了重用现有视图并减少内存使用和GC发生,此处也是如此。因此,如果是这样,null我必须创建视图并使用已经创建的视图。

所以实际上我必须写这样的东西(由Google官方推荐):

if (view == null) {
    view = View.inflate(context, R.layout.item_spinner, parent)
    view.tag(Holder(view))
} else {
    (view.tag as Holder).title.text = getItem(i)
}
Run Code Online (Sandbox Code Playgroud)

但是Kotlin不允许写param。我在互联网上发现的是一篇官方博客文章,内容是自2013年2月以来不可能。

所以我想知道是否有任何解决方法?

android kotlin

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

如何限制 WorkManager 中并行运行的工作线程数量?

我将文件(由用户选择)排队上传,然后使用 WorkManager 更新同步状态,如下所示:

fun schedule(files: List<String>) {
    var cont = workManager
                .beginUniqueWork(issueId, APPEND, files.map { workRequest(it) })
                .then(updateSyncStatusWork)
                .enqueue()
}
Run Code Online (Sandbox Code Playgroud)

效果很好。但是,当用户选择大量文件并查看日志时,我发现很多文件正在同时上传(大约 10 个甚至全部)。并且发生了很多超时。我相信减少并行上传数量会减少超时次数,但我在 WorkManager 或 WorkRequest 中找不到任何允许这样做的 API。

PS 我不考虑链接它们,因为上传失败会删除其后所有文件的上传。

android android-workmanager

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