java - 当没有可用的 jar 文件时,将另一个开源项目集成到 Android 项目中的规范方法是什么?

标签 java android git android-gradle-plugin open-source

我正在编写一个 Android 应用程序,我希望能够解码以 JSON 格式存储的数据,因此我下载了 jackon.databindits dependencies进入我的 src 文件夹。我试图找到一个 jar 文件,但找不到,所以我只下载了原始源代码。我从未将另一个开源库集成到我的源代码中,而且我发现它比我想象的要困难得多。

漫长而复杂的故事

跳到查看我的问题

我的目录结构现在如下所示:

app/src/main/java
 +-- com
      |-- fasterxml
      |    +-- jackson
      |         |-- annotation
      |         |    +-- many .java files
      |         |-- core
      |         |    +-- many .java files
      |         +-- databind
      |              +-- many .java files
      +-- my_name
           +-- my_app_name
                +-- my .java files

这不起作用,因为jackson/databind/ext中的一些文件对其他软件包有 Unresolved 引用。我尝试删除出现错误的文件,因为它们似乎没有被我想要使用的主要内容使用,但后来我收到了此错误:

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
    File1: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.4.1\b130bcfb5a9c410c3cbd2e0adec9437e69a39e2c\jackson-core-2.4.1.jar
    File2: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.4.1\55605135bd7b836612e0bba7037c9669f6ccf89f\jackson-annotations-2.4.1.jar
    File3: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.4.1\f07c773f7b3a03c3801d405cadbdc93f7548e321\jackson-databind-2.4.1.jar

我不知道这意味着什么。 This answer推荐设置multiDexEnabledtrue里面defaultConfig ,但这并没有帮助,直到我也遵循了这个 answer's advice排除packagingOptions内的重复文件.

毕竟,com.fasterxml.jackson.databind.cfg.PackageVersion仍然是一个 Unresolved reference ,直到我找到带有 .in 的相同文件。钉在它的末端。删除它并重命名包最终使应用程序可以编译。

现在回答我的问题:

对于以前从未做过的人来说,所有这些都是令人难以置信的沮丧和复杂,而且主要是反复试验。当然有更简单、更容易的方法吗?此外,我现在陷入手动更新这些包的困境,因为克隆的存储库包含许多我不需要的额外内容,因为我只需要源代码,所以我不能只执行 git pull并期待一切顺利。将整个存储库包含在我的 java 中文件夹给出了有关包与目录结构不匹配的错误。

当没有 .jar 可用时,将开源项目集成到 java 代码库的规范方法是什么?

最佳答案

除非您需要根据自己的要求对其进行自定义,否则不要在自己的项目中导入库的源代码。 (如果许可证同意这样做的话)

以下是 Jackson 所需的 gradle 依赖项。将它们添加到应用级 build.gradle 文件中。

compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.5'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.5'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.8.5'

jar 文件也可以从 Maven Repository 找到.

您可以使用 gradle 或 jar。两者不在一起。

关于java - 当没有可用的 jar 文件时,将另一个开源项目集成到 Android 项目中的规范方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41205564/

相关文章:

java - 局部范围静态方法的 Power Mock 单元测试

java - 如何在java库中处理异步响应?

android - Sinch验证错误42202

android - 如何从 ListView 中删除子项

git - 默认从 git Commit 中排除 Visual Studio 中的文件

java - 适当事件后图形不显示

java - Spring boot 与不同数据库环境的集成测试

javascript - 如何在 Android Webview 中已加载的网页上执行 Javascript

git - 无法通过 SSH 克隆

git - 从 .gitmodules 恢复 git 子模块