我正在尝试在Kotlin Multiplatform项目中使用cocoapods框架。所以我
.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?
我想一起玩的视频ExoPlaye上TextureView.为了缩放和裁剪视频以适应视图,我使用矩阵.我的自定义视图扩展了`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) 我正在实施一个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月以来不可能。
所以我想知道是否有任何解决方法?
我将文件(由用户选择)排队上传,然后使用 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 我不考虑链接它们,因为上传失败会删除其后所有文件的上传。