- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在玩在 Android Studio 3.3(新空项目)中创建的“Hello World”项目,并决定 add a library (ktor)到项目。我按照 README 说明进行操作,并将所需的内容简单地添加到 gradle 文件中。当我使用 websockets 时,以下行已添加到应用程序的 gradle 构建文件中:
implementation "io.ktor:ktor-client-websocket:$ktor_version"
implementation "io.ktor:ktor-client-cio:$ktor_version"
implementation "io.ktor:ktor-client-android:$ktor_version"
implementation "io.ktor:ktor-client-cio:$ktor_version"
添加这些项目后立即停止编译,我收到以下错误:
More than one file was found with OS independent path 'META-INF/kotlinx-io.kotlin_module'
有人可以解释为什么我会收到此错误吗?我没有做任何违法的事情,我只是将库添加到在 Android Studio 中创建的简单、标准的空项目中,不知何故在添加新的依赖项后,一切都停止了。
我在 StackOverflow 和 GitHub Issues 上发现了一些类似的问题,但我没有找到很好的解释为什么会发生以及如何防止此类错误。我刚刚找到了一堆快速而简短的答案/解决方案,以“将其添加到您的项目配置中它会起作用,相信我,我是专家”的方式编写,但我对此并不满意,因为我认为作为一名开发人员,我必须了解我在做什么以及为什么它以这种方式工作,IMO 只是添加人们不完全理解的东西,希望它能解决问题是不专业的。
所以,我尽力去理解这个问题。据我基于其他答案的理解,这个问题是由于我不知何故在我的项目中有一个库的 2 个实例(?),所以 Gradle 无法理解选择哪个。但是后来我无法理解怎么办? (我没有添加任何其他“外部依赖项”)
至于解决方案,最常见的答案是将 'META-INF/kotlinx-io.kotlin_module'
添加到 excludePath
打包选项,但我没有不明白为什么它应该是正确的。对我来说,这听起来像是在告诉构建系统“请从我的项目中排除这些路径/不要扫描它们以查找库”。但我不确定这是否是一种正确的方法,因为在这种情况下,我有效地从我的项目中排除了几个库/依赖项,这可能会导致运行时异常 NoClassDefFoundError
或将来类似的东西。
第二个最常见的答案是将 pickFirst 'META-INF/kotlinx-io.kotlin_module'
添加到打包选项中,这看起来好一点,因为它告诉构建系统“当你有一些库的多个条目,请选择你找到的第一个”,即该库将包含在我的项目中,所以我是安全的,但我仍然担心这个解决方案作为一个来自C/C++/Rust/System_Programming 世界:就 C(简化版)而言,让我们想象一下,我最终拥有 2 个不同版本(1.1、1.2)的库,并且我有一个头文件,它期望我链接到 v.库的 1.2,如果我选择了一个错误的版本库 (1.1),但使用较新版本的 header 并期望它能正常工作,好吧......它显然不会工作,我认为可能会发生同样的问题在 Android 上(但我不确定,因为我不是专家),即 pickFirst
似乎是一个很好的解决方案,只要我们能保证我们正在使用的库的“多个条目”具有相同的版本。
所以我现在尝试使用 pickFirst
方法,结果在我的 gradle 构建文件中增加了一个部分:
packagingOptions {
pickFirst 'META-INF/kotlinx-io.kotlin_module'
pickFirst 'META-INF/atomicfu.kotlin_module'
pickFirst 'META-INF/kotlinx-coroutines-io.kotlin_module'
}
哪个解决了这个问题,但我仍然不确定这是否是最佳解决方案。我认为正确的方法是了解错误发生的原因并解决错误的根本原因,而不是尝试使用其他打包选项来解决它。
最佳答案
Android 不需要 APK 包的 META-INF
目录中的任何这些文件。
META-INF
目录中的这些重复文件源自引用的库 -
除了使用 packagingOptions
之外别无他法。
另见:What is the purpose of META-INF? (Android APK
!= Java JAR
)。
这些确实是类似的包格式,但还是不完全一样。
关于android - 将库添加到 Android 项目后出错(发现多个文件的操作系统独立路径 'META-INF/kotlinx-io.kotlin_module' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54438064/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!