当没有可用的 jar 文件时,将另一个开源项目集成到 Android 项目中的规范方法是什么?
What is the canonical way to integrate another open source project into an Android project when no jar file is available?
我正在编写一个 Android 应用程序,我希望能够解码以 JSON 格式存储的数据,因此我将 jackon.databind and its 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
中的一些文件有对其他包的未解析引用。我尝试删除出错的文件,因为它们似乎没有被我想使用的主要内容使用,但后来我得到了这个错误:
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.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.4.1605135bd7b836612e0bba7037c9669f6ccf89f\jackson-annotations-2.4.1.jar
File3: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind.4.1\f07c773f7b3a03c3801d405cadbdc93f7548e321\jackson-databind-2.4.1.jar
我不知道这是什么意思。 recommended setting multiDexEnabled
to true
inside defaultConfig
, but that didn't help until I also followed this 排除packagingOptions
.
内的重复文件
毕竟,com.fasterxml.jackson.databind.cfg.PackageVersion
仍然是一个未解决的参考,直到我发现同一个文件的末尾附加了 .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 或罐子。两个都不在一起
我正在编写一个 Android 应用程序,我希望能够解码以 JSON 格式存储的数据,因此我将 jackon.databind and its 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
中的一些文件有对其他包的未解析引用。我尝试删除出错的文件,因为它们似乎没有被我想使用的主要内容使用,但后来我得到了这个错误:
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.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.4.1605135bd7b836612e0bba7037c9669f6ccf89f\jackson-annotations-2.4.1.jar
File3: C:\Users\my_name\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind.4.1\f07c773f7b3a03c3801d405cadbdc93f7548e321\jackson-databind-2.4.1.jar
我不知道这是什么意思。 multiDexEnabled
to true
inside defaultConfig
, but that didn't help until I also followed this packagingOptions
.
毕竟,com.fasterxml.jackson.databind.cfg.PackageVersion
仍然是一个未解决的参考,直到我发现同一个文件的末尾附加了 .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 或罐子。两个都不在一起